ZGlmZiAtLWdpdCBhLy5jaGVja3BhdGNoLmNvbmYgYi8uY2hlY2twYXRjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2RiOWUKLS0tIC9kZXYvbnVsbAorKysgYi8uY2hlY2twYXRjaC5jb25mCkBAIC0wLDAgKzEsMTQgQEAKKyMgTm90IExpbnV4LCBzbyBkb24ndCBleHBlY3QgYSBMaW51eCB0cmVlLgorLS1uby10cmVlCisKKyMgVGVtcG9yYXJ5IGZvciBmYWxzZSBwb3NpdGl2ZSBpbiBjaGVja3BhdGNoCistLWlnbm9yZSBDT01QTEVYX01BQ1JPCisKKyMgRm9yIENPTkZJR19TWVNfSTJDX05PUFJPQkVTCistLWlnbm9yZSBNVUxUSVNUQVRFTUVOVF9NQUNST19VU0VfRE9fV0hJTEUKKworIyBGb3Igc2ltcGxlX3N0cnRvdWwKKy0taWdub3JlIENPTlNJREVSX0tTVFJUTworCisjIEZvciBtaW4vbWF4CistLWlnbm9yZSBNSU5NQVgKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDcwYTExZjcuLmZmNGJhZTAgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzYsNiArMzYsNyBAQAogL3UtYm9vdC5sZHMKIC91LWJvb3QudWJsCiAvdS1ib290LmR0YgorL3UtYm9vdC5zYgogCiAjCiAjIEdlbmVyYXRlZCBmaWxlcwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAwMzBmZTRhLi5mNmY2YjcyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzA1LDEwICszMDUsNiBAQAogCXNuYXBwZXI5MjYwCQlBUk05MjZFSlMgKEFUOTFTQU05MjYwIFNvQykKIAlzbmFwcGVyOWcyMAkJQVJNOTI2RUpTIChBVDkxU0FNOUcyMCBTb0MpCiAKLUVyYW4gTWFuIDxlcmFuQG5iYXNlLmNvLmlsPgotCi0JRVZCNjQyNjBfNzUwQ1gJTVBDNzUwQ1gKLQogQW5kcmVhICJsbGFuZHJlIiBNYXJzb24gPGFuZHJlYS5tYXJzb25AZGF2ZS10ZWNoLml0PgogCiAJUFBDaGFtZWxlb25FVkIJUFBDNDA1RVAKQEAgLTU0MywxMCArNTM5LDEwIEBACiAJcnNkcHJvdG8JTVBDODI2MAogCiAJRVZCNjQyNjAJTVBDN3h4Xzc0eHgKKwlFVkI2NDI2MF83NTBDWAlNUEM3NTBDWAlbRXJhbiBNYW4gPGVyYW5AbmJhc2UuY28uaWw+XQogCiAJdmVyc2F0aWxlCUFSTTkyNkVKLVMKIAotCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEFSTSBTeXN0ZW1zOgkJCQkJCQkJIwogIwkJCQkJCQkJCSMKQEAgLTc3NSwxMCArNzcxLDYgQEAKIAogCW9tYXA3MzBwMglBUk05MjZFSlMKIAotTWFuaWthbmRhbiBQaWxsYWkgPG1hbmkucGlsbGFpQHRpLmNvbT4KLQotCW9tYXAzX2V2bQlBUk0gQVJNVjcgKE9NQVAzeHggU29DKQotCiBTdGVsaWFuIFBvcCA8c3RlbGlhbi5wb3BAbGVhZHRlY2hkZXNpZ24uY29tPgogCiAJYXQ5MXNhbTkyNjBlawlBUk05MjZFSlMgKEFUOTFTQU05MjYwIFNvQykKQEAgLTc4Niw2ICs3NzgsMTAgQEAKIAlhdDkxc2FtOTI2M2VrCUFSTTkyNkVKUyAoQVQ5MVNBTTkyNjMgU29DKQogCWF0OTFzYW05cmxlawlBUk05MjZFSlMgKEFUOTFTQU05UkwgU29DKQogCitUb20gUmluaSA8dHJpbmlAdGkuY29tPgorCisJb21hcDNfZXZtCUFSTSBBUk1WNyAoT01BUDN4eCBTb0MpCisKIFRvbSBSaXggPFRvbS5SaXhAd2luZHJpdmVyLmNvbT4KIAogCW9tYXAzX3pvb20yCUFSTSBBUk1WNyAoT01BUDN4eCBTb0MpCkBAIC04MTcsMTEgKzgxMyw2IEBACiAJbWFnbmVzaXVtCWkuTVgyNwogCW1nY29nZTN1bglBUk05MjZFSlMgKEtpcmt3b29kIFNvQykKIAotUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgotCi0JY3NiMjI2CQl4c2NhbGUvcHhhCi0JaW5ub2tvbQkJeHNjYWxlL3B4YQotCiBNaWNoYWVsIFNjaHdpbmdlbiA8bWljaGFlbEBzY2h3aW5nZW4ub3JnPgogCiAJYWN0dXgxCQl4c2NhbGUvaXhwCkBAIC04NTAsNiArODQxLDcgQEAKIAogCW9tYXA0X3BhbmRhCUFSTSBBUk1WNyAoT01BUDR4eCBTb0MpCiAJb21hcDRfc2RwNDQzMAlBUk0gQVJNVjcgKE9NQVA0eHggU29DKQorCW9tYXA1X2V2bQlBUk0gQVJNVjcgKE9NQVA1eHggU29jKQogCiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgogCkBAIC04NTksNiArODUxLDcgQEAKIAlwYWxtdGMJCXhzY2FsZS9weGEKIAl2cGFjMjcwCQl4c2NhbGUvcHhhCiAJemlwaXR6MgkJeHNjYWxlL3B4YQorCW0yOGV2awkJaS5NWDI4CiAgCWVmaWthbXgJCWkuTVg1MQogCWVmaWthc2IJCWkuTVg1MQogCkBAIC0xMTUxLDYgKzExNDQsNyBAQAogTWFjcGF1bCBMaW4gPG1hY3BhdWxAYW5kZXN0ZWNoLmNvbT4KIAogCUFEUC1BRzEwMQlOMTIxMyAoQUcxMDEgU29DKQorCUFEUC1BRzEwMVAJTjEyMTMgKEFHMTAxUCBYQzUgRlBHQSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbmQgb2YgTUFJTlRBSU5FUlMgbGlzdAkJCQkJCSMKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMjk0Yzc2Mi4uZDg0YjM1MCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTI5MCwxNiArMjkwLDkgQEAKIExJQlMgKz0gYXBpL2xpYmFwaS5vCiBMSUJTICs9IHBvc3QvbGlicG9zdC5vCiAKLWlmZXEgKCQoU09DKSxhbTMzeHgpCitpZm5lcSAoJChDT05GSUdfQU0zMzVYKSQoQ09ORklHX09NQVAzNFhYKSQoQ09ORklHX09NQVA0NFhYKSQoQ09ORklHX09NQVA1NFhYKSwpCiBMSUJTICs9ICQoQ1BVRElSKS9vbWFwLWNvbW1vbi9saWJvbWFwLWNvbW1vbi5vCiBlbmRpZgotaWZlcSAoJChTT0MpLG9tYXAzKQotTElCUyArPSAkKENQVURJUikvb21hcC1jb21tb24vbGlib21hcC1jb21tb24ubwotZW5kaWYKLWlmZXEgKCQoU09DKSxvbWFwNCkKLUxJQlMgKz0gJChDUFVESVIpL29tYXAtY29tbW9uL2xpYm9tYXAtY29tbW9uLm8KLWVuZGlmCi0KIGlmZXEgKCQoU09DKSxzNXBjMXh4KQogTElCUyArPSAkKENQVURJUikvczVwLWNvbW1vbi9saWJzNXAtY29tbW9uLm8KIGVuZGlmCkBAIC00MjQsNiArNDE3LDEwIEBACiAJCXJtICQob2JqKXUtYm9vdC11YmwuYmluCiAJCXJtICQob2JqKXNwbC91LWJvb3Qtc3BsLXBhZC5iaW4KIAorJChvYmopdS1ib290LnNiOiAgICAgICAkKG9iail1LWJvb3QuYmluICQob2JqKXNwbC91LWJvb3Qtc3BsLmJpbgorCQllbGZ0b3NiIC16ZGYgaW14MjggLWMgJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5iZCBcCisJCQktbyAkKG9iail1LWJvb3Quc2IKKwogaWZlcSAoJChDT05GSUdfU0FOREJPWCkseSkKIEdFTl9VQk9PVCA9IFwKIAkJY2QgJChMTkRJUikgJiYgJChDQykgJChTWU1TKSAtVCAkKG9iail1LWJvb3QubGRzIFwKQEAgLTQ4Niw3ICs0ODMsNyBAQAogCiAkKG9iailtbWNfc3BsL3UtYm9vdC1tbWMtc3BsLmJpbjoJbW1jX3NwbAogCi0kKG9iailzcGwvdS1ib290LXNwbC5iaW46CQlkZXBlbmQKKyQob2JqKXNwbC91LWJvb3Qtc3BsLmJpbjoJJChTVUJESVJfVE9PTFMpIGRlcGVuZAogCQkkKE1BS0UpIC1DIHNwbCBhbGwKIAogdXBkYXRlcjoKQEAgLTc2Myw2ICs3NjAsNyBAQAogCSAgICAgICAkKG9iailhcmNoL2JsYWNrZmluL2NwdS9ib290cm9tLWFzbS1vZmZzZXRzLltjaHNdCSAgXAogCSAgICAgICAkKG9iailhcmNoL2JsYWNrZmluL2NwdS9pbml0LntsZHMsZWxmfQogCUBybSAtZiAkKG9iailpbmNsdWRlL2JtcF9sb2dvLmgKKwlAcm0gLWYgJChvYmopaW5jbHVkZS9ibXBfbG9nb19kYXRhLmgKIAlAcm0gLWYgJChvYmopbGliL2FzbS1vZmZzZXRzLnMKIAlAcm0gLWYgJChvYmopaW5jbHVkZS9nZW5lcmF0ZWQvYXNtLW9mZnNldHMuaAogCUBybSAtZiAkKG9iaikkKENQVURJUikvJChTT0MpL2FzbS1vZmZzZXRzLnMKQEAgLTc5MSw3ICs3ODksOCBAQAogCUBybSAtZiAkKG9iail1LWJvb3QuaW14CiAJQHJtIC1mICQob2JqKXUtYm9vdC51YmwKIAlAcm0gLWYgJChvYmopdS1ib290LmR0YgotCUBybSAtZiAkKG9iail0b29scy97ZW52L2NyYzMyLmMsaW5jYS1zd2FwLWJ5dGVzfQorCUBybSAtZiAkKG9iail1LWJvb3Quc2IKKwlAcm0gLWYgJChvYmopdG9vbHMvaW5jYS1zd2FwLWJ5dGVzCiAJQHJtIC1mICQob2JqKWFyY2gvcG93ZXJwYy9jcHUvbXBjODI0eC9iZWRidWdfNjAzZS5jCiAJQHJtIC1mciAkKG9iailpbmNsdWRlL2FzbS9wcm9jICQob2JqKWluY2x1ZGUvYXNtL2FyY2ggJChvYmopaW5jbHVkZS9hc20KIAlAcm0gLWZyICQob2JqKWluY2x1ZGUvZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggNzNjYTA0Mi4uMDdmMWQxMSAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMTAyNyw2ICsxMDI3LDEyIEBACiAJCQlEZWZpbmUgdGhpcyB0byB1c2UgaS9vIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG1hY3JvcwogCQkJKHNvbWUgaGFyZHdhcmUgd29udCB3b3JrIHdpdGggbWFjcm9zKQogCisJCUNPTkZJR19EUklWRVJfVElfRU1BQworCQlTdXBwb3J0IGZvciBkYXZpbmNpIGVtYWMKKworCQkJQ09ORklHX1NZU19EQVZJTkNJX0VNQUNfUEhZX0NPVU5UCisJCQlEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBtb3JlIHRoZW4gMyBQSFlzLgorCiAJCUNPTkZJR19GVEdNQUMxMDAKIAkJU3VwcG9ydCBmb3IgRmFyYWRheSdzIEZUR01BQzEwMCBHaWdhYml0IFNvQyBFdGhlcm5ldAogCmRpZmYgLS1naXQgYS9hcGkvTWFrZWZpbGUgYi9hcGkvTWFrZWZpbGUKaW5kZXggMmE2NGM0ZC4uMGU5OWY3NCAxMDA2NDQKLS0tIGEvYXBpL01ha2VmaWxlCisrKyBiL2FwaS9NYWtlZmlsZQpAQCAtMjQsNyArMjQsOCBAQAogCiBMSUIJPSAkKG9iailsaWJhcGkubwogCi1DT0JKUy0kKENPTkZJR19BUEkpICs9IGFwaS5vIGFwaV9uZXQubyBhcGlfc3RvcmFnZS5vIGFwaV9wbGF0Zm9ybS0kKEFSQ0gpLm8KK0NPQkpTLSQoQ09ORklHX0FQSSkgKz0gYXBpLm8gYXBpX2Rpc3BsYXkubyBhcGlfbmV0Lm8gYXBpX3N0b3JhZ2UubyBcCisJCSAgICAgICBhcGlfcGxhdGZvcm0tJChBUkNIKS5vCiAKIENPQkpTCTo9ICQoQ09CSlMteSkKIFNSQ1MJOj0gJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2FwaS9hcGkuYyBiL2FwaS9hcGkuYwppbmRleCA4NTNmMDEwLi5hM2JmNjBhIDEwMDY0NAotLS0gYS9hcGkvYXBpLmMKKysrIGIvYXBpL2FwaS5jCkBAIC01NTMsNiArNTUzLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBwc2V1ZG8gc2lnbmF0dXJlOgorICoKKyAqIGludCBBUElfZGlzcGxheV9nZXRfaW5mbyhpbnQgdHlwZSwgc3RydWN0IGRpc3BsYXlfaW5mbyAqZGkpCisgKi8KK3N0YXRpYyBpbnQgQVBJX2Rpc3BsYXlfZ2V0X2luZm8odmFfbGlzdCBhcCkKK3sKKwlpbnQgdHlwZTsKKwlzdHJ1Y3QgZGlzcGxheV9pbmZvICpkaTsKKworCXR5cGUgPSB2YV9hcmcoYXAsIGludCk7CisJZGkgPSB2YV9hcmcoYXAsIHN0cnVjdCBkaXNwbGF5X2luZm8gKik7CisKKwlyZXR1cm4gZGlzcGxheV9nZXRfaW5mbyh0eXBlLCBkaSk7Cit9CisKKy8qCisgKiBwc2V1ZG8gc2lnbmF0dXJlOgorICoKKyAqIGludCBBUElfZGlzcGxheV9kcmF3X2JpdG1hcCh1bG9uZyBiaXRtYXAsIGludCB4LCBpbnQgeSkKKyAqLworc3RhdGljIGludCBBUElfZGlzcGxheV9kcmF3X2JpdG1hcCh2YV9saXN0IGFwKQoreworCXVsb25nIGJpdG1hcDsKKwlpbnQgeCwgeTsKKworCWJpdG1hcCA9IHZhX2FyZyhhcCwgdWxvbmcpOworCXggPSB2YV9hcmcoYXAsIGludCk7CisJeSA9IHZhX2FyZyhhcCwgaW50KTsKKworCXJldHVybiBkaXNwbGF5X2RyYXdfYml0bWFwKGJpdG1hcCwgeCwgeSk7Cit9CisKKy8qCisgKiBwc2V1ZG8gc2lnbmF0dXJlOgorICoKKyAqIHZvaWQgQVBJX2Rpc3BsYXlfY2xlYXIodm9pZCkKKyAqLworc3RhdGljIGludCBBUElfZGlzcGxheV9jbGVhcih2YV9saXN0IGFwKQoreworCWRpc3BsYXlfY2xlYXIoKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNmcF90IGNhbGxzX3RhYmxlW0FQSV9NQVhDQUxMXSA9IHsgTlVMTCwgfTsKIAogLyoKQEAgLTYxNiw2ICs2NjAsOSBAQAogCWNhbGxzX3RhYmxlW0FQSV9FTlZfR0VUXSA9ICZBUElfZW52X2dldDsKIAljYWxsc190YWJsZVtBUElfRU5WX1NFVF0gPSAmQVBJX2Vudl9zZXQ7CiAJY2FsbHNfdGFibGVbQVBJX0VOVl9FTlVNXSA9ICZBUElfZW52X2VudW07CisJY2FsbHNfdGFibGVbQVBJX0RJU1BMQVlfR0VUX0lORk9dID0gJkFQSV9kaXNwbGF5X2dldF9pbmZvOworCWNhbGxzX3RhYmxlW0FQSV9ESVNQTEFZX0RSQVdfQklUTUFQXSA9ICZBUElfZGlzcGxheV9kcmF3X2JpdG1hcDsKKwljYWxsc190YWJsZVtBUElfRElTUExBWV9DTEVBUl0gPSAmQVBJX2Rpc3BsYXlfY2xlYXI7CiAJY2FsbHNfbm8gPSBBUElfTUFYQ0FMTDsKIAogCWRlYnVnZigiQVBJIGluaXRpYWxpemVkIHdpdGggJWQgY2FsbHNcbiIsIGNhbGxzX25vKTsKZGlmZiAtLWdpdCBhL2FwaS9hcGlfZGlzcGxheS5jIGIvYXBpL2FwaV9kaXNwbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzOTE3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9hcGlfZGlzcGxheS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIE9TIEF1dGhvcnMuCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXBpX3B1YmxpYy5oPgorI2luY2x1ZGUgPGxjZC5oPgorI2luY2x1ZGUgPHZpZGVvX2ZvbnQuaD4gLyogR2V0IGZvbnQgd2lkdGggYW5kIGhlaWdodCAqLworCisvKiBsY2QuaCBuZWVkcyBCTVBfTE9HT19IRUlHSFQgdG8gY2FsY3VsYXRlIENPTlNPTEVfUk9XUyAqLworI2lmIGRlZmluZWQoQ09ORklHX0xDRF9MT0dPKSAmJiAhZGVmaW5lZChDT05GSUdfTENEX0lORk9fQkVMT1dfTE9HTykKKyNpbmNsdWRlIDxibXBfbG9nby5oPgorI2VuZGlmCisKKy8qIFRPRE8oY2xjaGlvdSk6IGFkZCBzdXBwb3J0IG9mIHZpZGVvIGRldmljZSAqLworCitpbnQgZGlzcGxheV9nZXRfaW5mbyhpbnQgdHlwZSwgc3RydWN0IGRpc3BsYXlfaW5mbyAqZGkpCit7CisJaWYgKCFkaSkKKwkJcmV0dXJuIEFQSV9FSU5WQUw7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlkZWZhdWx0OgorCQlkZWJ1ZygiJXM6IHVuc3VwcG9ydCBkaXNwbGF5IGRldmljZSB0eXBlOiAlZFxuIiwKKwkJCQlfX0ZJTEVfXywgdHlwZSk7CisJCXJldHVybiBBUElfRU5PREVWOworI2lmZGVmIENPTkZJR19MQ0QKKwljYXNlIERJU1BMQVlfVFlQRV9MQ0Q6CisJCWRpLT5waXhlbF93aWR0aCAgPSBwYW5lbF9pbmZvLnZsX2NvbDsKKwkJZGktPnBpeGVsX2hlaWdodCA9IHBhbmVsX2luZm8udmxfcm93OworCQlkaS0+c2NyZWVuX3Jvd3MgPSBDT05TT0xFX1JPV1M7CisJCWRpLT5zY3JlZW5fY29scyA9IENPTlNPTEVfQ09MUzsKKwkJYnJlYWs7CisjZW5kaWYKKwl9CisKKwlkaS0+dHlwZSA9IHR5cGU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkaXNwbGF5X2RyYXdfYml0bWFwKHVsb25nIGJpdG1hcCwgaW50IHgsIGludCB5KQoreworCWlmICghYml0bWFwKQorCQlyZXR1cm4gQVBJX0VJTlZBTDsKKyNpZmRlZiBDT05GSUdfTENECisJcmV0dXJuIGxjZF9kaXNwbGF5X2JpdG1hcChiaXRtYXAsIHgsIHkpOworI2Vsc2UKKwlyZXR1cm4gQVBJX0VOT0RFVjsKKyNlbmRpZgorfQorCit2b2lkIGRpc3BsYXlfY2xlYXIodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTENECisJbGNkX2NsZWFyKCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FwaS9hcGlfcHJpdmF0ZS5oIGIvYXBpL2FwaV9wcml2YXRlLmgKaW5kZXggOTRhN2ZjNS4uOTg4ZjcwMiAxMDA2NDQKLS0tIGEvYXBpL2FwaV9wcml2YXRlLmgKKysrIGIvYXBpL2FwaV9wcml2YXRlLmgKQEAgLTQ1LDQgKzQ1LDggQEAKIAogdm9pZCBkZXZfc3Rvcl9pbml0KHZvaWQpOwogCitpbnQgZGlzcGxheV9nZXRfaW5mbyhpbnQgdHlwZSwgc3RydWN0IGRpc3BsYXlfaW5mbyAqZGkpOworaW50IGRpc3BsYXlfZHJhd19iaXRtYXAodWxvbmcgYml0bWFwLCBpbnQgeCwgaW50IHkpOwordm9pZCBkaXNwbGF5X2NsZWFyKHZvaWQpOworCiAjZW5kaWYgLyogX0FQSV9QUklWQVRFX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtMTEzNi9teDMxL2dlbmVyaWMuYyBiL2FyY2gvYXJtL2NwdS9hcm0xMTM2L214MzEvZ2VuZXJpYy5jCmluZGV4IDRmMjdlMjUuLmY0NTgyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm0xMTM2L214MzEvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm0xMTM2L214MzEvZ2VuZXJpYy5jCkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CiAKLSNkZWZpbmUgSU9NVVhHUFIJKElPTVVYQ19CQVNFICsgMHgwMDgpCi0KIHN0YXRpYyB1MzIgbXgzMV9kZWNvZGVfcGxsKHUzMiByZWcsIHUzMiBpbmZyZXEpCiB7CiAJdTMyIG1maSA9IEdFVF9QTExfTUZJKHJlZyk7CkBAIC04OSw3ICs4Nyw3IEBACiB2b2lkIG14MzFfZHVtcF9jbG9ja3Modm9pZCkKIHsKIAl1MzIgY3B1ZnJlcSA9IG14MzFfZ2V0X21jdV9tYWluX2NsaygpOwotCXByaW50ZigibXgzMSBjcHUgY2xvY2s6ICVkTUh6XG4iLGNwdWZyZXEgLyAxMDAwMDAwKTsKKwlwcmludGYoIm14MzEgY3B1IGNsb2NrOiAlZE1IelxuIiwgY3B1ZnJlcSAvIDEwMDAwMDApOwogCXByaW50ZigiaXBnIGNsb2NrICAgICA6ICVkSHpcbiIsIG14MzFfZ2V0X2lwZ19jbGsoKSk7CiAJcHJpbnRmKCJoc3AgY2xvY2sgICAgIDogJWRIelxuIiwgbXgzMV9nZXRfaHNwX2NsaygpKTsKIH0KQEAgLTE0NiwxNCArMTQ0LDE1IEBACiB2b2lkIG14MzFfc2V0X2dwcihlbnVtIGlvbXV4X2dwX2Z1bmMgZ3AsIGNoYXIgZW4pCiB7CiAJdTMyIGw7CisJc3RydWN0IGlvbXV4Y19yZWdzICppb211eGMgPSAoc3RydWN0IGlvbXV4Y19yZWdzICopSU9NVVhDX0JBU0U7CiAKLQlsID0gcmVhZGwoSU9NVVhHUFIpOworCWwgPSByZWFkbCgmaW9tdXhjLT5ncHIpOwogCWlmIChlbikKIAkJbCB8PSBncDsKIAllbHNlCiAJCWwgJj0gfmdwOwogCi0Jd3JpdGVsKGwsIElPTVVYR1BSKTsKKwl3cml0ZWwobCwgJmlvbXV4Yy0+Z3ByKTsKIH0KIAogdm9pZCBteGNfc2V0dXBfd2VpbWNzKGludCBjcywgY29uc3Qgc3RydWN0IG14Y193ZWltY3MgKndlaW1jcykKQEAgLTIxNiw3ICsyMTUsNyBAQAogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfRElTUExBWV9DUFVJTkZPKQotaW50IHByaW50X2NwdWluZm8gKHZvaWQpCitpbnQgcHJpbnRfY3B1aW5mbyh2b2lkKQogewogCXUzMiBzcmV2ID0gZ2V0X2NwdV9yZXYoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYTMyMC90aW1lci5jIGIvYXJjaC9hcm0vY3B1L2FybTkyMHQvYTMyMC90aW1lci5jCmluZGV4IDQ0M2QzMWQuLjRiZmNlZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L2EzMjAvdGltZXIuYworKysgYi9hcmNoL2FybS9jcHUvYXJtOTIwdC9hMzIwL3RpbWVyLmMKQEAgLTE4LDIwICsxOCwzNSBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxkaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGZhcmFkYXkvZnRwbXUwMTAuaD4KICNpbmNsdWRlIDxmYXJhZGF5L2Z0dG1yMDEwLmg+CiAKLXN0YXRpYyB1bG9uZyB0aW1lc3RhbXA7Ci1zdGF0aWMgdWxvbmcgbGFzdGRlYzsKLQotc3RhdGljIHN0cnVjdCBmdHRtcjAxMCAqdG1yID0gKHN0cnVjdCBmdHRtcjAxMCAqKUNPTkZJR19GVFRNUjAxMF9CQVNFOworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKICNkZWZpbmUgVElNRVJfQ0xPQ0sJMzI3NjgKICNkZWZpbmUgVElNRVJfTE9BRF9WQUwJMHhmZmZmZmZmZgogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrX3RvX3RpbWUodW5zaWduZWQgbG9uZyBsb25nIHRpY2spCit7CisJdGljayAqPSBDT05GSUdfU1lTX0haOworCWRvX2Rpdih0aWNrLCBnZC0+dGltZXJfcmF0ZV9oeik7CisKKwlyZXR1cm4gdGljazsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgdXNlY190b190aWNrKHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VjKQoreworCXVzZWMgKj0gZ2QtPnRpbWVyX3JhdGVfaHo7CisJZG9fZGl2KHVzZWMsIDEwMDAwMDApOworCisJcmV0dXJuIHVzZWM7Cit9CisKIGludCB0aW1lcl9pbml0KHZvaWQpCiB7CisJc3RydWN0IGZ0dG1yMDEwICp0bXIgPSAoc3RydWN0IGZ0dG1yMDEwICopQ09ORklHX0ZUVE1SMDEwX0JBU0U7CiAJdW5zaWduZWQgaW50IGNyOwogCiAJZGVidWcoIiVzKClcbiIsIF9fZnVuY19fKTsKQEAgLTU5LDEwNiArNzQsNTcgQEAKIAljciB8PSBGVFRNUjAxMF9UTTNfRU5BQkxFOwogCXdyaXRlbChjciwgJnRtci0+Y3IpOwogCi0JLyogaW5pdCB0aGUgdGltZXN0YW1wIGFuZCBsYXN0ZGVjIHZhbHVlICovCi0JcmVzZXRfdGltZXJfbWFza2VkKCk7CisJZ2QtPnRpbWVyX3JhdGVfaHogPSBUSU1FUl9DTE9DSzsKKwlnZC0+dGJ1ID0gZ2QtPnRibCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cwotICovCi0KLS8qCi0gKiByZXNldCB0aW1lCi0gKi8KLXZvaWQgcmVzZXRfdGltZXJfbWFza2VkKHZvaWQpCi17Ci0JLyogY2FwdXJlIGN1cnJlbnQgZGVjcmVtZW50ZXIgdmFsdWUgdGltZSAqLwotCWxhc3RkZWMgPSByZWFkbCgmdG1yLT50aW1lcjNfY291bnRlcikgLyAoVElNRVJfQ0xPQ0sgLyBDT05GSUdfU1lTX0haKTsKLQl0aW1lc3RhbXAgPSAwOwkJLyogc3RhcnQgImFkdmFuY2luZyIgdGltZSBzdGFtcCBmcm9tIDAgKi8KLQotCWRlYnVnKCIlcygpOiBsYXN0ZGVjID0gJWx4XG4iLCBfX2Z1bmNfXywgbGFzdGRlYyk7Ci19Ci0KLS8qCi0gKiByZXR1cm4gdGltZXIgdGlja3MKLSAqLwotdWxvbmcgZ2V0X3RpbWVyX21hc2tlZCh2b2lkKQotewotCS8qIGN1cnJlbnQgdGljayB2YWx1ZSAqLwotCXVsb25nIG5vdyA9IHJlYWRsKCZ0bXItPnRpbWVyM19jb3VudGVyKSAvIChUSU1FUl9DTE9DSyAvIENPTkZJR19TWVNfSFopOwotCi0JZGVidWcoIiVzKCk6IG5vdyA9ICVseCwgbGFzdGRlYyA9ICVseFxuIiwgX19mdW5jX18sIG5vdywgbGFzdGRlYyk7Ci0KLQlpZiAobGFzdGRlYyA+PSBub3cpIHsKLQkJLyoKLQkJICogbm9ybWFsIG1vZGUgKG5vbiByb2xsKQotCQkgKiBtb3ZlIHN0YW1wIGZvcmR3YXJkIHdpdGggYWJzb3VsdGUgZGlmZiB0aWNrcwotCQkgKi8KLQkJdGltZXN0YW1wICs9IGxhc3RkZWMgLSBub3c7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogd2UgaGF2ZSBvdmVyZmxvdyBvZiB0aGUgY291bnQgZG93biB0aW1lcgotCQkgKgotCQkgKiBudHMgPSB0cyArIGxkICsgKFRMViAtIG5vdykKLQkJICogdHM9b2xkIHN0YW1wLCBsZD10aW1lIHRoYXQgcGFzc2VkIGJlZm9yZSBwYXNzaW5nIHRocm91Z2ggLTEKLQkJICogKFRMVi1ub3cpIGFtb3VudCBvZiB0aW1lIGFmdGVyIHBhc3NpbmcgdGhvdWdoIC0xCi0JCSAqIG50cyA9IG5ldyAiYWR2YW5jaW5nIHRpbWUgc3RhbXAiLi4uaXQgY291bGQgYWxzbyByb2xsIGFuZAotCQkgKiBjYXVzZSBwcm9ibGVtcy4KLQkJICovCi0JCXRpbWVzdGFtcCArPSBsYXN0ZGVjICsgVElNRVJfTE9BRF9WQUwgLSBub3c7Ci0JfQotCi0JbGFzdGRlYyA9IG5vdzsKLQotCWRlYnVnKCIlcygpIHJldHVybnMgJWx4XG4iLCBfX2Z1bmNfXywgdGltZXN0YW1wKTsKLQotCXJldHVybiB0aW1lc3RhbXA7Ci19Ci0KLS8qCi0gKiByZXR1cm4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRpbWVyIHRpY2tzIGFuZCBiYXNlCi0gKi8KLXVsb25nIGdldF90aW1lcih1bG9uZyBiYXNlKQotewotCWRlYnVnKCIlcyglbHgpXG4iLCBfX2Z1bmNfXywgYmFzZSk7Ci0JcmV0dXJuIGdldF90aW1lcl9tYXNrZWQoKSAtIGJhc2U7Ci19Ci0KLS8qIGRlbGF5IHggdXNlY29uZHMgQU5EIHByZXNlcnZlIGFkdmFuY2UgdGltZXN0YW1wIHZhbHVlICovCi12b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKLXsKLQlsb25nIHRtbyA9IHVzZWMgKiAoVElNRVJfQ0xPQ0sgLyAxMDAwKSAvIDEwMDA7Ci0JdW5zaWduZWQgbG9uZyBub3csIGxhc3QgPSByZWFkbCgmdG1yLT50aW1lcjNfY291bnRlcik7Ci0KLQlkZWJ1ZygiJXMoJWx1KVxuIiwgX19mdW5jX18sIHVzZWMpOwotCXdoaWxlICh0bW8gPiAwKSB7Ci0JCW5vdyA9IHJlYWRsKCZ0bXItPnRpbWVyM19jb3VudGVyKTsKLQkJaWYgKG5vdyA+IGxhc3QpIC8qIGNvdW50IGRvd24gdGltZXIgb3ZlcmZsb3cgKi8KLQkJCXRtbyAtPSBUSU1FUl9MT0FEX1ZBTCArIGxhc3QgLSBub3c7Ci0JCWVsc2UKLQkJCXRtbyAtPSBsYXN0IC0gbm93OwotCQlsYXN0ID0gbm93OwotCX0KLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAocmVhZCB0aW1lYmFzZSBhcyBsb25nIGxvbmcpLgotICogT24gQVJNIGl0IGp1c3QgcmV0dXJucyB0aGUgdGltZXIgdmFsdWUuCisgKiBHZXQgdGhlIGN1cnJlbnQgNjQgYml0IHRpbWVyIHRpY2sgY291bnQKICAqLwogdW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyh2b2lkKQogewotCWRlYnVnKCIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIGdldF90aW1lcigwKTsKKwlzdHJ1Y3QgZnR0bXIwMTAgKnRtciA9IChzdHJ1Y3QgZnR0bXIwMTAgKilDT05GSUdfRlRUTVIwMTBfQkFTRTsKKwl1bG9uZyBub3cgPSBUSU1FUl9MT0FEX1ZBTCAtIHJlYWRsKCZ0bXItPnRpbWVyM19jb3VudGVyKTsKKworCS8qIGluY3JlbWVudCB0YnUgaWYgdGJsIGhhcyByb2xsZWQgb3ZlciAqLworCWlmIChub3cgPCBnZC0+dGJsKQorCQlnZC0+dGJ1Kys7CisJZ2QtPnRibCA9IG5vdzsKKwlyZXR1cm4gKCgodW5zaWduZWQgbG9uZyBsb25nKWdkLT50YnUpIDw8IDMyKSB8IGdkLT50Ymw7Cit9CisKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydDsKKwl1bG9uZyB0bW87CisKKwlzdGFydCA9IGdldF90aWNrcygpOwkJLyogZ2V0IGN1cnJlbnQgdGltZXN0YW1wICovCisJdG1vID0gdXNlY190b190aWNrKHVzZWMpOwkvKiBjb252ZXJ0IHVzZWNzIHRvIHRpY2tzICovCisJd2hpbGUgKChnZXRfdGlja3MoKSAtIHN0YXJ0KSA8IHRtbykKKwkJOwkJCS8qIGxvb3AgdGlsbCB0aW1lIGhhcyBwYXNzZWQgKi8KIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAodGltZWJhc2UgY2xvY2sgZnJlcXVlbmN5KS4KLSAqIE9uIEFSTSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KKyAqIGdldF90aW1lcihiYXNlKSBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGltZW91dHMgb3IKKyAqIHRvIG1lYXN1cmUgZWxhc3BlZCB0aW1lIHJlbGF0aXZlIHRvIGFuIGV2ZW50OgorICoKKyAqIHVsb25nIHN0YXJ0X3RpbWUgPSBnZXRfdGltZXIoMCkgc2V0cyBzdGFydF90aW1lIHRvIHRoZSBjdXJyZW50CisgKiB0aW1lIHZhbHVlLgorICogZ2V0X3RpbWVyKHN0YXJ0X3RpbWUpIHJldHVybnMgdGhlIHRpbWUgZWxhcHNlZCBzaW5jZSB0aGVuLgorICoKKyAqIFRoZSB0aW1lIGlzIHVzZWQgaW4gQ09ORklHX1NZU19IWiB1bml0cyEKKyAqLwordWxvbmcgZ2V0X3RpbWVyKHVsb25nIGJhc2UpCit7CisJcmV0dXJuIHRpY2tfdG9fdGltZShnZXRfdGlja3MoKSkgLSBiYXNlOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KICAqLwogdWxvbmcgZ2V0X3RiY2xrKHZvaWQpCiB7Ci0JZGVidWcoIiVzKClcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gQ09ORklHX1NZU19IWjsKKwlyZXR1cm4gZ2QtPnRpbWVyX3JhdGVfaHo7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL01ha2VmaWxlIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9NYWtlZmlsZQppbmRleCA5MzBlMGQxLi5hNTZmZjA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvTWFrZWZpbGUKQEAgLTI4LDYgKzI4LDEyIEBACiBTVEFSVAk9IHN0YXJ0Lm8KIENPQkpTCT0gY3B1Lm8KIAoraWZkZWYJQ09ORklHX1NQTF9CVUlMRAoraWZkZWYJQ09ORklHX1NQTF9OT19DUFVfU1VQUE9SVF9DT0RFCitTVEFSVAk6PQorZW5kaWYKK2VuZGlmCisKIFNSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpICQoU09CSlMpKQogU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL01ha2VmaWxlIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL01ha2VmaWxlCmluZGV4IDk4YzdlNTUuLmFlYjA1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIExJQgk9ICQob2JqKWxpYiQoU09DKS5vCiAKIENPQkpTLXkJCQkJKz0gY3B1Lm8gdGltZXIubyBwc2MubwotQ09CSlMtJChDT05GSUdfQU0xODAxOF9MT1dMRVZFTCkgICAgICAgKz0gYW0xODA4X2xvd2xldmVsLm8KK0NPQkpTLSQoQ09ORklHX0RBODUwX0xPV0xFVkVMKQkrPSBkYTg1MF9sb3dsZXZlbC5vCiBDT0JKUy0kKENPTkZJR19TT0NfRE0zNTUpCSs9IGRtMzU1Lm8KIENPQkpTLSQoQ09ORklHX1NPQ19ETTM2NSkJKz0gZG0zNjUubwogQ09CSlMtJChDT05GSUdfU09DX0RNNjQ0WCkJKz0gZG02NDR4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9hbTE4MDhfbG93bGV2ZWwuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9hbTE4MDhfbG93bGV2ZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhNGE5Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvYW0xODA4X2xvd2xldmVsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotLyoKLSAqIFNvQy1zcGVjaWZpYyBsb3dsZXZlbCBjb2RlIGZvciBBTTE4MDggYW5kIHNpbWlsYXIgY2hpcHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEKLSAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBoc0BkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bmFuZC5oPgotI2luY2x1ZGUgPG5zMTY1NTAuaD4KLSNpbmNsdWRlIDxwb3N0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYW0xODA4X2xvd2xldmVsLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9kZHIyX2RlZnMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9lbWlmX2RlZnMuaD4KLQotdm9pZCBhbTE4MDhfd2FpdGxvb3AodW5zaWduZWQgbG9uZyBsb29wY250KQotewotCXVuc2lnbmVkIGxvbmcJaTsKLQotCWZvciAoaSA9IDA7IGkgPCBsb29wY250OyBpKyspCi0JCWFzbSgiICAgTk9QIik7Ci19Ci0KLWludCBhbTE4MDhfcGxsX2luaXQoc3RydWN0IGRhdmluY2lfcGxsY19yZWdzICpyZWcsIHVuc2lnbmVkIGxvbmcgcGxsbXVsdCkKLXsKLQlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykKLQkJLyogVW5sb2NrIFBMTCByZWdpc3RlcnMuICovCi0JCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmdfcmVncy0+Y2ZnY2hpcDAsIDB4MDAwMDAwMTApOwotCi0JLyoKLQkgKiBTZXQgUExMRU5TUkMgJzAnLGJpdCA1LCBQTEwgRW5hYmxlKFBMTEVOKSBzZWxlY3Rpb24gaXMgY29udHJvbGxlZAotCSAqIHRocm91Z2ggTU1SCi0JICovCi0JY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgMHgwMDAwMDAyMCk7Ci0JLyogUExMQ1RMLkVYVENMS1NSQyBiaXQgOSBzaG91bGQgYmUgbGVmdCBhdCAwIGZvciBGcmVvbiAqLwotCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAyMDApOwotCi0JLyogU2V0IFBMTEVOPTAgPT4gUExMIEJZUEFTUyBNT0RFICovCi0JY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgMHgwMDAwMDAwMSk7Ci0KLQlhbTE4MDhfd2FpdGxvb3AoMTUwKTsKLQotCWlmIChyZWcgPT0gZGF2aW5jaV9wbGxjMF9yZWdzKSB7Ci0JCS8qCi0JCSAqIFNlbGVjdCB0aGUgQ2xvY2sgTW9kZSBiaXQgOCBhcyBFeHRlcm5hbCBDbG9jayBvciBPbiBDaGlwCi0JCSAqIE9zY2lsYXRvcgotCQkgKi8KLQkJZHZfbWFza2JpdHMoJnJlZy0+cGxsY3RsLCAweEZGRkZGRUZGKTsKLQkJc2V0Yml0c19sZTMyKCZyZWctPnBsbGN0bCwgKENPTkZJR19TWVNfRFZfQ0xLTU9ERSA8PCA4KSk7Ci0JfQotCi0JLyogQ2xlYXIgUExMUlNUIGJpdCB0byByZXNldCB0aGUgUExMICovCi0JY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgMHgwMDAwMDAwOCk7Ci0KLQkvKiBEaXNhYmxlIHRoZSBQTEwgb3V0cHV0ICovCi0Jc2V0Yml0c19sZTMyKCZyZWctPnBsbGN0bCwgMHgwMDAwMDAxMCk7Ci0KLQkvKiBQTEwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgKi8KLQkvKgotCSAqIFBvd2VyIHVwIHRoZSBQTEwtIFBXUkROIGJpdCBzZXQgdG8gMCB0byBicmluZyB0aGUgUExMIG91dCBvZgotCSAqIHBvd2VyIGRvd24gYml0Ci0JICovCi0JY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgMHgwMDAwMDAwMik7Ci0KLQkvKiBFbmFibGUgdGhlIFBMTCBmcm9tIERpc2FibGUgTW9kZSBQTExESVMgYml0IHRvIDAgKi8KLQljbHJiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLCAweDAwMDAwMDEwKTsKLQotCS8qIFByb2dyYW0gdGhlIHJlcXVpcmVkIG11bHRpcGxpZXIgdmFsdWUgaW4gUExMTSAqLwotCXdyaXRlbChwbGxtdWx0LCAmcmVnLT5wbGxtKTsKLQotCS8qIHByb2dyYW0gdGhlIHBvc3RkaXYgKi8KLQlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykKLQkJd3JpdGVsKCgweDgwMDAgfCBDT05GSUdfU1lTX0FNMTgwOF9QTEwwX1BPU1RESVYpLAotCQkJJnJlZy0+cG9zdGRpdik7Ci0JZWxzZQotCQl3cml0ZWwoKDB4ODAwMCB8IENPTkZJR19TWVNfQU0xODA4X1BMTDFfUE9TVERJViksCi0JCQkmcmVnLT5wb3N0ZGl2KTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIHRoZSBHT1NUQVQgYml0IGluIFBMTFNUQVQgdG8gY2xlYXIgdG8gMCB0byBpbmRpY2F0ZSB0aGF0Ci0JICogbm8gR08gb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcwotCSAqLwotCXdoaWxlICgocmVhZGwoJnJlZy0+cGxsc3RhdCkgJiAweDEpID09IDEpCi0JCTsKLQotCWlmIChyZWcgPT0gZGF2aW5jaV9wbGxjMF9yZWdzKSB7Ci0JCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9QTEwwX1BMTERJVjEsICZyZWctPnBsbGRpdjEpOwotCQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfUExMMF9QTExESVYyLCAmcmVnLT5wbGxkaXYyKTsKLQkJd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X1BMTDBfUExMRElWMywgJnJlZy0+cGxsZGl2Myk7Ci0JCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9QTEwwX1BMTERJVjQsICZyZWctPnBsbGRpdjQpOwotCQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfUExMMF9QTExESVY1LCAmcmVnLT5wbGxkaXY1KTsKLQkJd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X1BMTDBfUExMRElWNiwgJnJlZy0+cGxsZGl2Nik7Ci0JCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9QTEwwX1BMTERJVjcsICZyZWctPnBsbGRpdjcpOwotCX0gZWxzZSB7Ci0JCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9QTEwxX1BMTERJVjEsICZyZWctPnBsbGRpdjEpOwotCQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfUExMMV9QTExESVYyLCAmcmVnLT5wbGxkaXYyKTsKLQkJd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X1BMTDFfUExMRElWMywgJnJlZy0+cGxsZGl2Myk7Ci0JfQotCi0JLyoKLQkgKiBTZXQgdGhlIEdPU0VUIGJpdCBpbiBQTExDTUQgdG8gMSB0byBpbml0aWF0ZSBhIG5ldyBkaXZpZGVyCi0JICogdHJhbnNpdGlvbi4KLQkgKi8KLQlzZXRiaXRzX2xlMzIoJnJlZy0+cGxsY21kLCAweDAxKTsKLQotCS8qCi0JICogV2FpdCBmb3IgdGhlIEdPU1RBVCBiaXQgaW4gUExMU1RBVCB0byBjbGVhciB0byAwCi0JICogKGNvbXBsZXRpb24gb2YgcGhhc2UgYWxpZ25tZW50KS4KLQkgKi8KLQl3aGlsZSAoKHJlYWRsKCZyZWctPnBsbHN0YXQpICYgMHgxKSA9PSAxKQotCQk7Ci0KLQkvKiBXYWl0IGZvciBQTEwgdG8gcmVzZXQgcHJvcGVybHkuIFNlZSBQTEwgc3BlYyBmb3IgUExMIHJlc2V0IHRpbWUgKi8KLQlhbTE4MDhfd2FpdGxvb3AoMjAwKTsKLQotCS8qIFNldCB0aGUgUExMUlNUIGJpdCBpbiBQTExDVEwgdG8gMSB0byBicmluZyB0aGUgUExMIG91dCBvZiByZXNldCAqLwotCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAwMDgpOwotCi0JLyogV2FpdCBmb3IgUExMIHRvIGxvY2suIFNlZSBQTEwgc3BlYyBmb3IgUExMIGxvY2sgdGltZSAqLwotCWFtMTgwOF93YWl0bG9vcCgyNDAwKTsKLQotCS8qCi0JICogU2V0IHRoZSBQTExFTiBiaXQgaW4gUExMQ1RMIHRvIDEgdG8gcmVtb3ZlIHRoZSBQTEwgZnJvbSBieXBhc3MKLQkgKiBtb2RlCi0JICovCi0Jc2V0Yml0c19sZTMyKCZyZWctPnBsbGN0bCwgMHgwMDAwMDAwMSk7Ci0KLQotCS8qCi0JICogY2xlYXIgRU1JRkEgYW5kIEVNSUZCIGNsb2NrIHNvdXJjZSBzZXR0aW5ncywgbGV0IHRoZW0KLQkgKiBydW4gb2ZmIFNZU0NMSwotCSAqLwotCWlmIChyZWcgPT0gZGF2aW5jaV9wbGxjMF9yZWdzKQotCQlkdl9tYXNrYml0cygmZGF2aW5jaV9zeXNjZmdfcmVncy0+Y2ZnY2hpcDMsIDB4RkZGRkZGRjgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYW0xODA4X2xwY190cmFuc2l0aW9uKHVuc2lnbmVkIGNoYXIgcHNjbnVtLCB1bnNpZ25lZCBjaGFyIG1vZHVsZSwKLQkJdW5zaWduZWQgY2hhciBkb21haW4sIHVuc2lnbmVkIGNoYXIgc3RhdGUpCi17Ci0Jc3RydWN0IGRhdmluY2lfcHNjX3JlZ3MJKnJlZzsKLQlkdl9yZWdfcCBtZHN0YXQsIG1kY3RsOwotCi0JaWYgKHBzY251bSA9PSAwKSB7Ci0JCXJlZyA9IGRhdmluY2lfcHNjMF9yZWdzOwotCQltZHN0YXQgPSAmcmVnLT5wc2MwLm1kc3RhdFttb2R1bGVdOwotCQltZGN0bCA9ICZyZWctPnBzYzAubWRjdGxbbW9kdWxlXTsKLQl9IGVsc2UgewotCQlyZWcgPSBkYXZpbmNpX3BzYzFfcmVnczsKLQkJbWRzdGF0ID0gJnJlZy0+cHNjMS5tZHN0YXRbbW9kdWxlXTsKLQkJbWRjdGwgPSAmcmVnLT5wc2MxLm1kY3RsW21vZHVsZV07Ci0JfQotCi0JLyogV2FpdCBmb3IgYW55IG91dHN0YW5kaW5nIHRyYW5zaXRpb24gdG8gY29tcGxldGUgKi8KLQl3aGlsZSAoKHJlYWRsKCZyZWctPnB0c3RhdCkgJiAoMHgwMDAwMDAwMSA8PCBkb21haW4pKSkKLQkJOwotCi0JLyogSWYgd2UgYXJlIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSwganVzdCByZXR1cm4gKi8KLQlpZiAoKHJlYWRsKG1kc3RhdCkgJiAweDFGKSA9PSBzdGF0ZSkKLQkJcmV0dXJuOwotCi0JLyogUGVyZm9ybSB0cmFuc2l0aW9uICovCi0Jd3JpdGVsKChyZWFkbChtZGN0bCkgJiAweEZGRkZGRkUwKSB8IHN0YXRlLCBtZGN0bCk7Ci0Jc2V0Yml0c19sZTMyKCZyZWctPnB0Y21kLCAoMHgwMDAwMDAwMSA8PCBkb21haW4pKTsKLQotCS8qIFdhaXQgZm9yIHRyYW5zaXRpb24gdG8gY29tcGxldGUgKi8KLQl3aGlsZSAocmVhZGwoJnJlZy0+cHRzdGF0KSAmICgweDAwMDAwMDAxIDw8IGRvbWFpbikpCi0JCTsKLQotCS8qIFdhaXQgYW5kIHZlcmlmeSB0aGUgc3RhdGUgKi8KLQl3aGlsZSAoKHJlYWRsKG1kc3RhdCkgJiAweDFGKSAhPSBzdGF0ZSkKLQkJOwotfQotCi1pbnQgYW0xODA4X2Rkcl9zZXR1cCh1bnNpZ25lZCBpbnQgZnJlcSkKLXsKLQl1bnNpZ25lZCBsb25nCXRtcDsKLQotCS8qIEVuYWJsZSB0aGUgQ2xvY2sgdG8gRERSMi9tRERSICovCi0JYW0xODA4X2xwY190cmFuc2l0aW9uKDEsIDYsIDAsIFBTQ19FTkFCTEUpOwotCi0JdG1wID0gcmVhZGwoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwpOwotCWlmICgodG1wICYgVlRQX1BPV0VSRFdOKSA9PSBWVFBfUE9XRVJEV04pIHsKLQkJLyogQmVnaW4gVlRQIENhbGlicmF0aW9uICovCi0JCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX1BPV0VSRFdOKTsKLQkJY2xyYml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfTE9DSyk7Ci0JCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0NMS1JaKTsKLQkJY2xyYml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfQ0xLUlopOwotCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9DTEtSWik7Ci0KLQkJLyogUG9sbGluZyBSRUFEWSBiaXQgdG8gc2VlIHdoZW4gVlRQIGNhbGlicmF0aW9uIGlzIGRvbmUgKi8KLQkJdG1wID0gcmVhZGwoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwpOwotCQl3aGlsZSAoKHRtcCAmIFZUUF9SRUFEWSkgIT0gVlRQX1JFQURZKQotCQkJdG1wID0gcmVhZGwoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwpOwotCi0JCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0xPQ0spOwotCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9QT1dFUkRXTik7Ci0KLQkJc2V0Yml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfSU9QV1JEV04pOwotCX0KLQotCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9ERFIyX0REUlBIWUNSLCAmZHZfZGRyMl9yZWdzX2N0cmwtPmRkcnBoeWNyKTsKLQljbHJiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT5kZHJfc2xldywKLQkJKDEgPDwgRERSX1NMRVdfQ01PU0VOX0JJVCkpOwotCi0Jc2V0Yml0c19sZTMyKCZkdl9kZHIyX3JlZ3NfY3RybC0+c2RiY3IsIERWX0REUl9CT09UVU5MT0NLKTsKLQotCXdyaXRlbCgoQ09ORklHX1NZU19BTTE4MDhfRERSMl9TREJDUiAmIH4weGYwMDAwMDAwKSB8Ci0JCShyZWFkbCgmZHZfZGRyMl9yZWdzX2N0cmwtPnNkYmNyKSAmIDB4ZjAwMDAwMDApLCAvKnJzdiBCeXRlcyovCi0JCSZkdl9kZHIyX3JlZ3NfY3RybC0+c2RiY3IpOwotCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9ERFIyX1NEQkNSMiwgJmR2X2RkcjJfcmVnc19jdHJsLT5zZGJjcjIpOwotCi0Jd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X0REUjJfU0RUSU1SLCAmZHZfZGRyMl9yZWdzX2N0cmwtPnNkdGltcik7Ci0Jd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X0REUjJfU0RUSU1SMiwgJmR2X2RkcjJfcmVnc19jdHJsLT5zZHRpbXIyKTsKLQotCWNscmJpdHNfbGUzMigmZHZfZGRyMl9yZWdzX2N0cmwtPnNkYmNyLAotCQkoMSA8PCBEVl9ERFJfU0RDUl9USU1VTkxPQ0tfU0hJRlQpKTsKLQotCS8qCi0JICogTFBNT0RFTiBhbmQgTUNMS1NUT1BFTiBtdXN0IGJlIHNldCEKLQkgKiBXaXRob3V0IHRoaXMgYml0cyBzZXQsIFBTQyBkb247dCBzd2l0Y2ggc3RhdGVzICEhCi0JICovCi0Jd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X0REUjJfU0RSQ1IgfAotCQkoMSA8PCBEVl9ERFJfU1JDUl9MUE1PREVOX1NISUZUKSB8Ci0JCSgxIDw8IERWX0REUl9TUkNSX01DTEtTVE9QRU5fU0hJRlQpLAotCQkmZHZfZGRyMl9yZWdzX2N0cmwtPnNkcmNyKTsKLQotCS8qIFN5bmNSZXNldCB0aGUgQ2xvY2sgdG8gRU1JRjNBIFNEUkFNICovCi0JYW0xODA4X2xwY190cmFuc2l0aW9uKDEsIDYsIDAsIFBTQ19TWU5DUkVTRVQpOwotCS8qIEVuYWJsZSB0aGUgQ2xvY2sgdG8gRU1JRjNBIFNEUkFNICovCi0JYW0xODA4X2xwY190cmFuc2l0aW9uKDEsIDYsIDAsIFBTQ19FTkFCTEUpOwotCi0JLyogZGlzYWJsZSBzZWxmIHJlZnJlc2ggKi8KLQljbHJiaXRzX2xlMzIoJmR2X2RkcjJfcmVnc19jdHJsLT5zZHJjciwgMHhjMDAwMDAwMCk7Ci0Jd3JpdGVsKDB4MzAsICZkdl9kZHIyX3JlZ3NfY3RybC0+cGJicHIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFtMTgwOF9zZXRfbWRjdGwoZHZfcmVnX3AgbWRjdGwpCi17Ci0JaWYgKChyZWFkbChtZGN0bCkgJiAweDFGKSAhPSBQU0NfRU5BQkxFKQotCQl3cml0ZWwoKChyZWFkbChtZGN0bCkgJiAweEZGRkZGRkUwKSB8IFBTQ19FTkFCTEUpLCBtZGN0bCk7Ci19Ci0KLXZvaWQgYW0xODA4X3BzY19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRhdmluY2lfcHNjX3JlZ3MJKnJlZzsKLQlpbnQgaTsKLQotCS8qIFBTQyAwIGRvbWFpbiAwIGluaXQgKi8KLQlyZWcgPSBkYXZpbmNpX3BzYzBfcmVnczsKLQl3aGlsZSAoKHJlYWRsKCZyZWctPnB0c3RhdCkgJiAweDAwMDAwMDAxKSkKLQkJOwotCi0JZm9yIChpID0gMzsgaSA8PSA0IDsgaSsrKQotCQlhbTE4MDhfc2V0X21kY3RsKCZyZWctPnBzYzAubWRjdGxbaV0pOwotCi0JZm9yIChpID0gNzsgaSA8PSAxMiA7IGkrKykKLQkJYW0xODA4X3NldF9tZGN0bCgmcmVnLT5wc2MwLm1kY3RsW2ldKTsKLQotCS8qIERvIEFsd2F5cy1PbiBQb3dlciBEb21haW4gVHJhbnNpdGlvbnMgKi8KLQlzZXRiaXRzX2xlMzIoJnJlZy0+cHRjbWQsIDB4MDAwMDAwMDEpOwotCXdoaWxlIChyZWFkbCgmcmVnLT5wdHN0YXQpICYgMHgwMDAwMDAwMSkKLQkJOwotCi0JLyogUFNDMSwgZG9tYWluIDEgaW5pdCAqLwotCXJlZyA9IGRhdmluY2lfcHNjMV9yZWdzOwotCXdoaWxlICgocmVhZGwoJnJlZy0+cHRzdGF0KSAmIDB4MDAwMDAwMDEpKQotCQk7Ci0KLQlhbTE4MDhfc2V0X21kY3RsKCZyZWctPnBzYzEubWRjdGxbM10pOwotCWFtMTgwOF9zZXRfbWRjdGwoJnJlZy0+cHNjMS5tZGN0bFs2XSk7Ci0KLQkvKiBVQVJUMSArIFVBUlQyICovCi0JZm9yIChpID0gMTIgOyBpIDw9IDEzIDsgaSsrKQotCQlhbTE4MDhfc2V0X21kY3RsKCZyZWctPnBzYzEubWRjdGxbaV0pOwotCi0JYW0xODA4X3NldF9tZGN0bCgmcmVnLT5wc2MxLm1kY3RsWzI2XSk7Ci0JYW0xODA4X3NldF9tZGN0bCgmcmVnLT5wc2MxLm1kY3RsWzMxXSk7Ci0KLQkvKiBEbyBBbHdheXMtT24gUG93ZXIgRG9tYWluIFRyYW5zaXRpb25zICovCi0Jc2V0Yml0c19sZTMyKCZyZWctPnB0Y21kLCAweDAwMDAwMDAxKTsKLQl3aGlsZSAocmVhZGwoJnJlZy0+cHRzdGF0KSAmIDB4MDAwMDAwMDEpCi0JCTsKLX0KLQotdm9pZCBhbTE4MDhfcGlubXV4X2N0bCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBtYXNrLAotCXVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0JY2xyYml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZ19yZWdzLT5waW5tdXhbb2Zmc2V0XSwgbWFzayk7Ci0Jc2V0Yml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZ19yZWdzLT5waW5tdXhbb2Zmc2V0XSwgKG1hc2sgJiB2YWx1ZSkpOwotfQotCi1fX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKLXZvaWQgYm9hcmRfZ3Bpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCi12b2lkIG5hbmRfYm9vdCh2b2lkKQotewotCV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgdm9pZCAoKnVib290KSh2b2lkKTsKLQotCS8qIGNvcHkgaW1hZ2UgZnJvbSBOT1IgdG8gUkFNICovCi0JbWVtY3B5KCh2b2lkICopQ09ORklHX1NZU19OQU5EX1VfQk9PVF9EU1QsCi0JCSh2b2lkICopQ09ORklHX1NZU19OQU5EX1VfQk9PVF9PRkZTLAotCQlDT05GSUdfU1lTX05BTkRfVV9CT09UX1NJWkUpOwotCi0JLyogYW5kIGp1bXAgdG8gaXQgLi4uICovCi0JdWJvb3QgPSAodm9pZCAqKUNPTkZJR19TWVNfTkFORF9VX0JPT1RfU1RBUlQ7Ci0JKCp1Ym9vdCkoKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCi12b2lkIGJvYXJkX2luaXRfZih1bG9uZyBib290ZmxhZykKLSNlbHNlCi1pbnQgYXJjaF9jcHVfaW5pdCh2b2lkKQotI2VuZGlmCi17Ci0JLyoKLQkgKiBjb3BpZWQgZnJvbSBhcmNoL2FybS9jcHUvYXJtOTI2ZWpzL3N0YXJ0LlMKLQkgKgotCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKLQkgKi8KLQlhc20oIm1vdglyMCwgIzAiKTsKLQlhc20oIm1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAiKTsJLyogZmx1c2ggdjMvdjQgY2FjaGUgKi8KLQlhc20oIm1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAiKTsJLyogZmx1c2ggdjQgVExCICovCi0KLQkvKgotCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKLQkgKi8KLQlhc20oIm1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAiKTsKLQkvKiBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykgKi8KLQlhc20oImJpYwlyMCwgcjAsICMweDAwMDAyMzAwIik7Ci0JLyogY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkgKi8KLQlhc20oImJpYwlyMCwgcjAsICMweDAwMDAwMDg3Iik7Ci0JLyogc2V0IGJpdCAyIChBKSBBbGlnbiAqLwotCWFzbSgib3JyCXIwLCByMCwgIzB4MDAwMDAwMDIiKTsKLQkvKiBzZXQgYml0IDEyIChJKSBJLUNhY2hlICovCi0JYXNtKCJvcnIJcjAsIHIwLCAjMHgwMDAwMTAwMCIpOwotCWFzbSgibWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMCIpOwotCi0JLyogVW5sb2NrIGtpY2sgcmVnaXN0ZXJzICovCi0Jd3JpdGVsKDB4ODNlNzBiMTMsICZkYXZpbmNpX3N5c2NmZ19yZWdzLT5raWNrMCk7Ci0Jd3JpdGVsKDB4OTVhNGYxZTAsICZkYXZpbmNpX3N5c2NmZ19yZWdzLT5raWNrMSk7Ci0KLQlkdl9tYXNrYml0cygmZGF2aW5jaV9zeXNjZmdfcmVncy0+c3VzcHNyYywKLQkJKCgxIDw8IDI3KSB8ICgxIDw8IDIyKSB8ICgxIDw8IDIwKSB8ICgxIDw8IDUpIHwJKDEgPDwgMTYpKSk7Ci0KLQkvKiBTeXN0ZW0gUFNDIHNldHVwIC0gZW5hYmxlIGFsbCAqLwotCWFtMTgwOF9wc2NfaW5pdCgpOwotCi0JLyogU2V0dXAgUGlubXV4ICovCi0JYW0xODA4X3Bpbm11eF9jdGwoMCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMCk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMSk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMiwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMik7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMywgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMyk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoNCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYNCk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoNSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYNSk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoNiwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYNik7Ci0JYW0xODA4X3Bpbm11eF9jdGwoNywgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYNyk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoOCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYOCk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoOSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYOSk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMTAsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDEwKTsKLQlhbTE4MDhfcGlubXV4X2N0bCgxMSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMTEpOwotCWFtMTgwOF9waW5tdXhfY3RsKDEyLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0FNMTgwOF9QSU5NVVgxMik7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMTMsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDEzKTsKLQlhbTE4MDhfcGlubXV4X2N0bCgxNCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMTQpOwotCWFtMTgwOF9waW5tdXhfY3RsKDE1LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0FNMTgwOF9QSU5NVVgxNSk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMTYsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDE2KTsKLQlhbTE4MDhfcGlubXV4X2N0bCgxNywgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMTcpOwotCWFtMTgwOF9waW5tdXhfY3RsKDE4LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0FNMTgwOF9QSU5NVVgxOCk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMTksIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDE5KTsKLQotCS8qIFBMTCBzZXR1cCAqLwotCWFtMTgwOF9wbGxfaW5pdChkYXZpbmNpX3BsbGMwX3JlZ3MsIENPTkZJR19TWVNfQU0xODA4X1BMTDBfUExMTSk7Ci0JYW0xODA4X3BsbF9pbml0KGRhdmluY2lfcGxsYzFfcmVncywgQ09ORklHX1NZU19BTTE4MDhfUExMMV9QTExNKTsKLQotCS8qIEdQSU8gc2V0dXAgKi8KLQlib2FyZF9ncGlvX2luaXQoKTsKLQotCS8qIHNldHVwIENTbiBjb25maWcgKi8KLQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfQ1MyQ0ZHLCAmZGF2aW5jaV9lbWlmX3JlZ3MtPmFiMWNyKTsKLQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfQ1MzQ0ZHLCAmZGF2aW5jaV9lbWlmX3JlZ3MtPmFiMmNyKTsKLQotCWFtMTgwOF9scGNfdHJhbnNpdGlvbigxLCAxMywgMCwgUFNDX0VOQUJMRSk7Ci0JTlMxNjU1MF9pbml0KChOUzE2NTUwX3QpKENPTkZJR19TWVNfTlMxNjU1MF9DT00xKSwKLQkJCUNPTkZJR19TWVNfTlMxNjU1MF9DTEsgLyAxNiAvIENPTkZJR19CQVVEUkFURSk7Ci0KLQkvKgotCSAqIEZpeCBQb3dlciBhbmQgRW11bGF0aW9uIE1hbmFnZW1lbnQgUmVnaXN0ZXIKLQkgKiBzZWUgc3BydWZ3M2EucGRmIHBhZ2UgMzcgVGFibGUgMjQKLQkgKi8KLQl3cml0ZWwocmVhZGwoKENPTkZJR19TWVNfTlMxNjU1MF9DT00xICsgMHgzMCkpIHwgMHgwMDAwNjAwMSwKLQkJKENPTkZJR19TWVNfTlMxNjU1MF9DT00xICsgMHgzMCkpOwotI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQotCXB1dHMoImRkciBpbml0XG4iKTsKLQlhbTE4MDhfZGRyX3NldHVwKDEzMik7Ci0KLQlwdXRzKCJib290IHUtYm9vdCAuLi5cbiIpOwotCi0JbmFuZF9ib290KCk7Ci0jZWxzZQotCWFtMTgwOF9kZHJfc2V0dXAoMTMyKTsKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL2RhODUwX2xvd2xldmVsLmMgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvZGE4NTBfbG93bGV2ZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2VjNzBmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL2RhODUwX2xvd2xldmVsLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBTb0Mtc3BlY2lmaWMgbG93bGV2ZWwgY29kZSBmb3IgREE4NTAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEKKyAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBoc0BkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bmFuZC5oPgorI2luY2x1ZGUgPG5zMTY1NTAuaD4KKyNpbmNsdWRlIDxwb3N0Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZGE4NTBfbG93bGV2ZWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RkcjJfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2VtaWZfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsbF9kZWZzLmg+CisKK3ZvaWQgZGE4NTBfd2FpdGxvb3AodW5zaWduZWQgbG9uZyBsb29wY250KQoreworCXVuc2lnbmVkIGxvbmcJaTsKKworCWZvciAoaSA9IDA7IGkgPCBsb29wY250OyBpKyspCisJCWFzbSgiICAgTk9QIik7Cit9CisKK2ludCBkYTg1MF9wbGxfaW5pdChzdHJ1Y3QgZGF2aW5jaV9wbGxjX3JlZ3MgKnJlZywgdW5zaWduZWQgbG9uZyBwbGxtdWx0KQoreworCWlmIChyZWcgPT0gZGF2aW5jaV9wbGxjMF9yZWdzKQorCQkvKiBVbmxvY2sgUExMIHJlZ2lzdGVycy4gKi8KKwkJY2xyYml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZ19yZWdzLT5jZmdjaGlwMCwgUExMX01BU1RFUl9MT0NLKTsKKworCS8qCisJICogU2V0IFBMTEVOU1JDICcwJyxiaXQgNSwgUExMIEVuYWJsZShQTExFTikgc2VsZWN0aW9uIGlzIGNvbnRyb2xsZWQKKwkgKiB0aHJvdWdoIE1NUgorCSAqLworCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9QTExFTlNSQyk7CisJLyogUExMQ1RMLkVYVENMS1NSQyBiaXQgOSBzaG91bGQgYmUgbGVmdCBhdCAwIGZvciBGcmVvbiAqLworCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9FWFRDTEtTUkMpOworCisJLyogU2V0IFBMTEVOPTAgPT4gUExMIEJZUEFTUyBNT0RFICovCisJY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgUExMQ1RMX1BMTEVOKTsKKworCWRhODUwX3dhaXRsb29wKDE1MCk7CisKKwlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykgeworCQkvKgorCQkgKiBTZWxlY3QgdGhlIENsb2NrIE1vZGUgYml0IDggYXMgRXh0ZXJuYWwgQ2xvY2sgb3IgT24gQ2hpcAorCQkgKiBPc2NpbGF0b3IKKwkJICovCisJCWR2X21hc2tiaXRzKCZyZWctPnBsbGN0bCwgflBMTENUTF9SRVNfOSk7CisJCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjdGwsCisJCQkoQ09ORklHX1NZU19EVl9DTEtNT0RFIDw8IFBMTENUTF9DTE9DS19NT0RFX1NISUZUKSk7CisJfQorCisJLyogQ2xlYXIgUExMUlNUIGJpdCB0byByZXNldCB0aGUgUExMICovCisJY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgUExMQ1RMX1BMTFJTVCk7CisKKwkvKiBEaXNhYmxlIHRoZSBQTEwgb3V0cHV0ICovCisJc2V0Yml0c19sZTMyKCZyZWctPnBsbGN0bCwgUExMQ1RMX1BMTERJUyk7CisKKwkvKiBQTEwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgKi8KKwkvKgorCSAqIFBvd2VyIHVwIHRoZSBQTEwtIFBXUkROIGJpdCBzZXQgdG8gMCB0byBicmluZyB0aGUgUExMIG91dCBvZgorCSAqIHBvd2VyIGRvd24gYml0CisJICovCisJY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgUExMQ1RMX1BMTFBXUkROKTsKKworCS8qIEVuYWJsZSB0aGUgUExMIGZyb20gRGlzYWJsZSBNb2RlIFBMTERJUyBiaXQgdG8gMCAqLworCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9QTExESVMpOworCisJLyogUHJvZ3JhbSB0aGUgcmVxdWlyZWQgbXVsdGlwbGllciB2YWx1ZSBpbiBQTExNICovCisJd3JpdGVsKHBsbG11bHQsICZyZWctPnBsbG0pOworCisJLyogcHJvZ3JhbSB0aGUgcG9zdGRpdiAqLworCWlmIChyZWcgPT0gZGF2aW5jaV9wbGxjMF9yZWdzKQorCQl3cml0ZWwoKFBMTF9QT1NUREVOIHwgQ09ORklHX1NZU19EQTg1MF9QTEwwX1BPU1RESVYpLAorCQkJJnJlZy0+cG9zdGRpdik7CisJZWxzZQorCQl3cml0ZWwoKFBMTF9QT1NUREVOIHwgQ09ORklHX1NZU19EQTg1MF9QTEwxX1BPU1RESVYpLAorCQkJJnJlZy0+cG9zdGRpdik7CisKKwkvKgorCSAqIENoZWNrIGZvciB0aGUgR09TVEFUIGJpdCBpbiBQTExTVEFUIHRvIGNsZWFyIHRvIDAgdG8gaW5kaWNhdGUgdGhhdAorCSAqIG5vIEdPIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MKKwkgKi8KKwl3aGlsZSAoKHJlYWRsKCZyZWctPnBsbHN0YXQpICYgUExMQ01EX0dPU1RBVCkgPT0gUExMQ01EX0dPU1RBVCkKKwkJOworCisJaWYgKHJlZyA9PSBkYXZpbmNpX3BsbGMwX3JlZ3MpIHsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMF9QTExESVYxLCAmcmVnLT5wbGxkaXYxKTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMF9QTExESVYyLCAmcmVnLT5wbGxkaXYyKTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMF9QTExESVYzLCAmcmVnLT5wbGxkaXYzKTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMF9QTExESVY0LCAmcmVnLT5wbGxkaXY0KTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMF9QTExESVY1LCAmcmVnLT5wbGxkaXY1KTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMF9QTExESVY2LCAmcmVnLT5wbGxkaXY2KTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMF9QTExESVY3LCAmcmVnLT5wbGxkaXY3KTsKKwl9IGVsc2UgeworCQl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9QTEwxX1BMTERJVjEsICZyZWctPnBsbGRpdjEpOworCQl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9QTEwxX1BMTERJVjIsICZyZWctPnBsbGRpdjIpOworCQl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9QTEwxX1BMTERJVjMsICZyZWctPnBsbGRpdjMpOworCX0KKworCS8qCisJICogU2V0IHRoZSBHT1NFVCBiaXQgaW4gUExMQ01EIHRvIDEgdG8gaW5pdGlhdGUgYSBuZXcgZGl2aWRlcgorCSAqIHRyYW5zaXRpb24uCisJICovCisJc2V0Yml0c19sZTMyKCZyZWctPnBsbGNtZCwgUExMQ01EX0dPU1RBVCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSBHT1NUQVQgYml0IGluIFBMTFNUQVQgdG8gY2xlYXIgdG8gMAorCSAqIChjb21wbGV0aW9uIG9mIHBoYXNlIGFsaWdubWVudCkuCisJICovCisJd2hpbGUgKChyZWFkbCgmcmVnLT5wbGxzdGF0KSAmIFBMTENNRF9HT1NUQVQpID09IFBMTENNRF9HT1NUQVQpCisJCTsKKworCS8qIFdhaXQgZm9yIFBMTCB0byByZXNldCBwcm9wZXJseS4gU2VlIFBMTCBzcGVjIGZvciBQTEwgcmVzZXQgdGltZSAqLworCWRhODUwX3dhaXRsb29wKDIwMCk7CisKKwkvKiBTZXQgdGhlIFBMTFJTVCBiaXQgaW4gUExMQ1RMIHRvIDEgdG8gYnJpbmcgdGhlIFBMTCBvdXQgb2YgcmVzZXQgKi8KKwlzZXRiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLCBQTExDVExfUExMUlNUKTsKKworCS8qIFdhaXQgZm9yIFBMTCB0byBsb2NrLiBTZWUgUExMIHNwZWMgZm9yIFBMTCBsb2NrIHRpbWUgKi8KKwlkYTg1MF93YWl0bG9vcCgyNDAwKTsKKworCS8qCisJICogU2V0IHRoZSBQTExFTiBiaXQgaW4gUExMQ1RMIHRvIDEgdG8gcmVtb3ZlIHRoZSBQTEwgZnJvbSBieXBhc3MKKwkgKiBtb2RlCisJICovCisJc2V0Yml0c19sZTMyKCZyZWctPnBsbGN0bCwgUExMQ1RMX1BMTEVOKTsKKworCisJLyoKKwkgKiBjbGVhciBFTUlGQSBhbmQgRU1JRkIgY2xvY2sgc291cmNlIHNldHRpbmdzLCBsZXQgdGhlbQorCSAqIHJ1biBvZmYgU1lTQ0xLCisJICovCisJaWYgKHJlZyA9PSBkYXZpbmNpX3BsbGMwX3JlZ3MpCisJCWR2X21hc2tiaXRzKCZkYXZpbmNpX3N5c2NmZ19yZWdzLT5jZmdjaGlwMywKKwkJCX4oUExMX1NDU0NGRzNfRElWNDVQRU5BIHwgUExMX1NDU0NGRzNfRU1BX0NMS1NSQykpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYTg1MF9kZHJfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nCXRtcDsKKworCS8qIEVuYWJsZSB0aGUgQ2xvY2sgdG8gRERSMi9tRERSICovCisJbHBzY19vbihEQVZJTkNJX0xQU0NfRERSX0VNSUYpOworCisJdG1wID0gcmVhZGwoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwpOworCWlmICgodG1wICYgVlRQX1BPV0VSRFdOKSA9PSBWVFBfUE9XRVJEV04pIHsKKwkJLyogQmVnaW4gVlRQIENhbGlicmF0aW9uICovCisJCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX1BPV0VSRFdOKTsKKwkJY2xyYml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfTE9DSyk7CisJCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0NMS1JaKTsKKwkJY2xyYml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfQ0xLUlopOworCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9DTEtSWik7CisKKwkJLyogUG9sbGluZyBSRUFEWSBiaXQgdG8gc2VlIHdoZW4gVlRQIGNhbGlicmF0aW9uIGlzIGRvbmUgKi8KKwkJdG1wID0gcmVhZGwoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwpOworCQl3aGlsZSAoKHRtcCAmIFZUUF9SRUFEWSkgIT0gVlRQX1JFQURZKQorCQkJdG1wID0gcmVhZGwoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwpOworCisJCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0xPQ0spOworCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9QT1dFUkRXTik7CisKKwkJc2V0Yml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfSU9QV1JEV04pOworCX0KKworCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX0REUjJfRERSUEhZQ1IsICZkdl9kZHIyX3JlZ3NfY3RybC0+ZGRycGh5Y3IpOworCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPmRkcl9zbGV3LAorCQkoMSA8PCBERFJfU0xFV19DTU9TRU5fQklUKSk7CisKKwkvKgorCSAqIFNEUkFNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKFNEQ1IpOgorCSAqIEZpcnN0IHNldCB0aGUgQk9PVFVOTE9DSyBiaXQgdG8gbWFrZSBjb25maWd1cmF0aW9uIGJpdHMKKwkgKiB3cml0ZWFibGUuCisJICovCisJc2V0Yml0c19sZTMyKCZkdl9kZHIyX3JlZ3NfY3RybC0+c2RiY3IsIERWX0REUl9CT09UVU5MT0NLKTsKKworCS8qCisJICogV3JpdGUgdGhlIG5ldyB2YWx1ZSBvZiB0aGVzZSBiaXRzIGFuZCBjbGVhciBCT09UVU5MT0NLLgorCSAqIEF0IHRoZSBzYW1lIHRpbWUsIHNldCB0aGUgVElNVU5MT0NLIGJpdCB0byBhbGxvdyBjaGFuZ2luZworCSAqIHRoZSB0aW1pbmcgcmVnaXN0ZXJzCisJICovCisJdG1wID0gQ09ORklHX1NZU19EQTg1MF9ERFIyX1NEQkNSOworCXRtcCAmPSB+RFZfRERSX0JPT1RVTkxPQ0s7CisJdG1wIHw9IERWX0REUl9USU1VTkxPQ0s7CisJd3JpdGVsKHRtcCwgJmR2X2RkcjJfcmVnc19jdHJsLT5zZGJjcik7CisKKwkvKiB3cml0ZSBtZW1vcnkgY29uZmlndXJhdGlvbiBhbmQgdGltaW5nICovCisJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfRERSMl9TREJDUjIsICZkdl9kZHIyX3JlZ3NfY3RybC0+c2RiY3IyKTsKKwl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9ERFIyX1NEVElNUiwgJmR2X2RkcjJfcmVnc19jdHJsLT5zZHRpbXIpOworCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX0REUjJfU0RUSU1SMiwgJmR2X2RkcjJfcmVnc19jdHJsLT5zZHRpbXIyKTsKKworCS8qIGNsZWFyIHRoZSBUSU1VTkxPQ0sgYml0IGFuZCB3cml0ZSB0aGUgdmFsdWUgb2YgdGhlIENMIGZpZWxkICovCisJdG1wICY9IH5EVl9ERFJfVElNVU5MT0NLOworCXdyaXRlbCh0bXAsICZkdl9kZHIyX3JlZ3NfY3RybC0+c2RiY3IpOworCisJLyoKKwkgKiBMUE1PREVOIGFuZCBNQ0xLU1RPUEVOIG11c3QgYmUgc2V0IQorCSAqIFdpdGhvdXQgdGhpcyBiaXRzIHNldCwgUFNDIGRvbjt0IHN3aXRjaCBzdGF0ZXMgISEKKwkgKi8KKwl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9ERFIyX1NEUkNSIHwKKwkJKDEgPDwgRFZfRERSX1NSQ1JfTFBNT0RFTl9TSElGVCkgfAorCQkoMSA8PCBEVl9ERFJfU1JDUl9NQ0xLU1RPUEVOX1NISUZUKSwKKwkJJmR2X2RkcjJfcmVnc19jdHJsLT5zZHJjcik7CisKKwkvKiBTeW5jUmVzZXQgdGhlIENsb2NrIHRvIEVNSUYzQSBTRFJBTSAqLworCWxwc2Nfc3luY3Jlc2V0KERBVklOQ0lfTFBTQ19ERFJfRU1JRik7CisJLyogRW5hYmxlIHRoZSBDbG9jayB0byBFTUlGM0EgU0RSQU0gKi8KKwlscHNjX29uKERBVklOQ0lfTFBTQ19ERFJfRU1JRik7CisKKwkvKiBkaXNhYmxlIHNlbGYgcmVmcmVzaCAqLworCWNscmJpdHNfbGUzMigmZHZfZGRyMl9yZWdzX2N0cmwtPnNkcmNyLAorCQlEVl9ERFJfU0RSQ1JfTFBNT0RFTiB8IERWX0REUl9TRFJDUl9MUE1PREVOKTsKKwl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9ERFIyX1BCQlBSLCAmZHZfZGRyMl9yZWdzX2N0cmwtPnBiYnByKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGRhODUwX3Bpbm11eF9jdGwodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaywKKwl1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmdfcmVncy0+cGlubXV4W29mZnNldF0sIG1hc2spOworCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmdfcmVncy0+cGlubXV4W29mZnNldF0sIChtYXNrICYgdmFsdWUpKTsKK30KKworX19hdHRyaWJ1dGVfXygod2VhaykpCit2b2lkIGJvYXJkX2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybjsKK30KKworaW50IGFyY2hfY3B1X2luaXQodm9pZCkKK3sKKwkvKiBVbmxvY2sga2ljayByZWdpc3RlcnMgKi8KKwl3cml0ZWwoRFZfU1lTQ0ZHX0tJQ0swX1VOTE9DSywgJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPmtpY2swKTsKKwl3cml0ZWwoRFZfU1lTQ0ZHX0tJQ0sxX1VOTE9DSywgJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPmtpY2sxKTsKKworCWR2X21hc2tiaXRzKCZkYXZpbmNpX3N5c2NmZ19yZWdzLT5zdXNwc3JjLAorCQlDT05GSUdfU1lTX0RBODUwX1NZU0NGR19TVVNQU1JDKTsKKworCS8qIFNldHVwIFBpbm11eCAqLworCWRhODUwX3Bpbm11eF9jdGwoMCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgwKTsKKwlkYTg1MF9waW5tdXhfY3RsKDEsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfREE4NTBfUElOTVVYMSk7CisJZGE4NTBfcGlubXV4X2N0bCgyLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDIpOworCWRhODUwX3Bpbm11eF9jdGwoMywgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgzKTsKKwlkYTg1MF9waW5tdXhfY3RsKDQsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfREE4NTBfUElOTVVYNCk7CisJZGE4NTBfcGlubXV4X2N0bCg1LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDUpOworCWRhODUwX3Bpbm11eF9jdGwoNiwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVg2KTsKKwlkYTg1MF9waW5tdXhfY3RsKDcsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfREE4NTBfUElOTVVYNyk7CisJZGE4NTBfcGlubXV4X2N0bCg4LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDgpOworCWRhODUwX3Bpbm11eF9jdGwoOSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVg5KTsKKwlkYTg1MF9waW5tdXhfY3RsKDEwLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDEwKTsKKwlkYTg1MF9waW5tdXhfY3RsKDExLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDExKTsKKwlkYTg1MF9waW5tdXhfY3RsKDEyLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDEyKTsKKwlkYTg1MF9waW5tdXhfY3RsKDEzLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDEzKTsKKwlkYTg1MF9waW5tdXhfY3RsKDE0LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDE0KTsKKwlkYTg1MF9waW5tdXhfY3RsKDE1LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDE1KTsKKwlkYTg1MF9waW5tdXhfY3RsKDE2LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDE2KTsKKwlkYTg1MF9waW5tdXhfY3RsKDE3LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDE3KTsKKwlkYTg1MF9waW5tdXhfY3RsKDE4LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDE4KTsKKwlkYTg1MF9waW5tdXhfY3RsKDE5LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDE5KTsKKworCS8qIFBMTCBzZXR1cCAqLworCWRhODUwX3BsbF9pbml0KGRhdmluY2lfcGxsYzBfcmVncywgQ09ORklHX1NZU19EQTg1MF9QTEwwX1BMTE0pOworCWRhODUwX3BsbF9pbml0KGRhdmluY2lfcGxsYzFfcmVncywgQ09ORklHX1NZU19EQTg1MF9QTEwxX1BMTE0pOworCisJLyogR1BJTyBzZXR1cCAqLworCWJvYXJkX2dwaW9faW5pdCgpOworCisJLyogc2V0dXAgQ1NuIGNvbmZpZyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NZU19EQTg1MF9DUzJDRkcpCisJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfQ1MyQ0ZHLCAmZGF2aW5jaV9lbWlmX3JlZ3MtPmFiMWNyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NZU19EQTg1MF9DUzNDRkcpCisJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfQ1MzQ0ZHLCAmZGF2aW5jaV9lbWlmX3JlZ3MtPmFiMmNyKTsKKyNlbmRpZgorCisJbHBzY19vbihDT05GSUdfU1lTX0RBODUwX0xQU0NfVUFSVCk7CisJTlMxNjU1MF9pbml0KChOUzE2NTUwX3QpKENPTkZJR19TWVNfTlMxNjU1MF9DT00xKSwKKwkJCUNPTkZJR19TWVNfTlMxNjU1MF9DTEsgLyAxNiAvIENPTkZJR19CQVVEUkFURSk7CisKKwkvKgorCSAqIEZpeCBQb3dlciBhbmQgRW11bGF0aW9uIE1hbmFnZW1lbnQgUmVnaXN0ZXIKKwkgKiBzZWUgc3BydWZ3M2EucGRmIHBhZ2UgMzcgVGFibGUgMjQKKwkgKi8KKwl3cml0ZWwoKERBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9GUkVFIHwgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VSUlNUIHwKKwkJREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VUUlNUKSwKKwkgICAgICAgJmRhdmluY2lfdWFydDJfY3RybF9yZWdzLT5wd3JlbXVfbWdtdCk7CisKKwlkYTg1MF9kZHJfc2V0dXAoKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kbTM2NV9sb3dsZXZlbC5jIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL2RtMzY1X2xvd2xldmVsLmMKaW5kZXggMzc3MmU2NC4uNmU5OThkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL2RtMzY1X2xvd2xldmVsLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL2RtMzY1X2xvd2xldmVsLmMKQEAgLTQ1LDcgKzQ1LDggQEAKIAljbHJiaXRzX2xlMzIoJmR2X3BsbDBfcmVncy0+cGxsY3RsLCBQTExDVExfUExMUFdSRE4pOwogCiAJY2xyYml0c19sZTMyKCZkdl9wbGwwX3JlZ3MtPnBsbGN0bCwgUExMQ1RMX1JFU185KTsKLQlzZXRiaXRzX2xlMzIoJmR2X3BsbDBfcmVncy0+cGxsY3RsLCBjbGtzcmMgPDwgOCk7CisJc2V0Yml0c19sZTMyKCZkdl9wbGwwX3JlZ3MtPnBsbGN0bCwKKwkJY2xrc3JjIDw8IFBMTENUTF9DTE9DS19NT0RFX1NISUZUKTsKIAogCS8qCiAJICogU2V0IFBMTEVOU1JDICcwJywgUExMIEVuYWJsZShQTExFTikgc2VsZWN0aW9uIGlzIGNvbnRyb2xsZWQKQEAgLTgyLDcgKzgzLDcgQEAKIAl3cml0ZWwoUExMU0VDQ1RMX1NUT1BNT0RFIHwgUExMU0VDQ1RMX1RJTklUWiwgJmR2X3BsbDBfcmVncy0+c2VjY3RsKTsKIAogCS8qIFByb2dyYW0gdGhlIFBvc3REaXYgZm9yIFBMTDEgKi8KLQl3cml0ZWwoMHg4MDAwLCAmZHZfcGxsMF9yZWdzLT5wb3N0ZGl2KTsKKwl3cml0ZWwoUExMX1BPU1RERU4sICZkdl9wbGwwX3JlZ3MtPnBvc3RkaXYpOwogCiAJLyogUG9zdCBkaXZpZGVyIHNldHRpbmcgZm9yIFBMTDEgKi8KIAl3cml0ZWwoQ09ORklHX1NZU19ETTM2eF9QTEwxX1BMTERJVjEsICZkdl9wbGwwX3JlZ3MtPnBsbGRpdjEpOwpAQCAtMTI2LDcgKzEyNyw4IEBACiAJICogVkRCIGhhcyBpbnB1dCBvbiBNWEkgcGluCiAJICovCiAJY2xyYml0c19sZTMyKCZkdl9wbGwxX3JlZ3MtPnBsbGN0bCwgUExMQ1RMX1JFU185KTsKLQlzZXRiaXRzX2xlMzIoJmR2X3BsbDFfcmVncy0+cGxsY3RsLCBjbGtzcmMgPDwgOCk7CisJc2V0Yml0c19sZTMyKCZkdl9wbGwxX3JlZ3MtPnBsbGN0bCwKKwkJY2xrc3JjIDw8IFBMTENUTF9DTE9DS19NT0RFX1NISUZUKTsKIAogCS8qCiAJICogU2V0IFBMTEVOU1JDICcwJywgUExMIEVuYWJsZShQTExFTikgc2VsZWN0aW9uIGlzIGNvbnRyb2xsZWQKQEAgLTE1MSw3ICsxNTMsNyBAQAogCXdyaXRlbChwbGxtLCAmZHZfcGxsMV9yZWdzLT5wbGxtKTsKIAl3cml0ZWwocHJlZGl2LCAmZHZfcGxsMV9yZWdzLT5wcmVkaXYpOwogCi0Jd3JpdGVsKDB4ODAwMCwgJmR2X3BsbDFfcmVncy0+cG9zdGRpdik7CisJd3JpdGVsKFBMTF9QT1NUREVOLCAmZHZfcGxsMV9yZWdzLT5wb3N0ZGl2KTsKIAogCS8qIEFzc2VydCBURU5BQkxFID0gMSwgVEVOQUJMRURJViA9IDEsIFRJTklUWiA9IDEgKi8KIAl3cml0ZWwoUExMU0VDQ1RMX1NUT1BNT0RFIHwgUExMU0VDQ1RMX1RFTkFCTEVESVYgfCBQTExTRUNDVExfVEVOQUJMRSB8CkBAIC0yNjEsMjEgKzI2MywyMyBAQAogCQlWUFNTX0NMS19DVExfVlBTU19DTEtNRCk7CiAKIAkvKiBMUFNDIFN5bmNSZXNldCBERFIgQ2xvY2sgRW5hYmxlICovCi0Jd3JpdGVsKCgocmVhZGwoJmR2X3BzY19yZWdzLT5tZGN0bFs0N10pICYgflBTQ19NRF9TVEFURV9NU0spIHwKLQkJUFNDX1NZTkNSRVNFVCksICZkdl9wc2NfcmVncy0+bWRjdGxbNDddKTsKKwl3cml0ZWwoKChyZWFkbCgmZHZfcHNjX3JlZ3MtPm1kY3RsW0RBVklOQ0lfTFBTQ19WUFNTTUFTVEVSXSkgJgorCQl+UFNDX01EX1NUQVRFX01TSykgfCBQU0NfU1lOQ1JFU0VUKSwKKwkJJmR2X3BzY19yZWdzLT5tZGN0bFtEQVZJTkNJX0xQU0NfVlBTU01BU1RFUl0pOwogCiAJd3JpdGVsKCgxIDw8IFBkTnVtKSwgJmR2X3BzY19yZWdzLT5wdGNtZCk7CiAKIAl3aGlsZSAoISgoKHJlYWRsKCZkdl9wc2NfcmVncy0+cHRzdGF0KSA+PiBQZE51bSkgJiBQU0NfR09TVEFUKSA9PSAwKSkKIAkJOwotCXdoaWxlICghKChyZWFkbCgmZHZfcHNjX3JlZ3MtPm1kc3RhdFs0N10pICYgIFBTQ19NRF9TVEFURV9NU0spID09Ci0JCVBTQ19TWU5DUkVTRVQpKQorCXdoaWxlICghKChyZWFkbCgmZHZfcHNjX3JlZ3MtPm1kc3RhdFtEQVZJTkNJX0xQU0NfVlBTU01BU1RFUl0pICYKKwkJUFNDX01EX1NUQVRFX01TSykgPT0gUFNDX1NZTkNSRVNFVCkpCiAJCTsKIH0KIAogdm9pZCBkbTM2NV9wb3JfcmVzZXQodm9pZCkKIHsKLQlpZiAocmVhZGwoJmR2X3BsbDBfcmVncy0+cnN0eXBlKSAmIDMpCisJaWYgKHJlYWRsKCZkdl9wbGwwX3JlZ3MtPnJzdHlwZSkgJgorCQkoUExMX1JTVFlQRV9QT1IgfCBQTExfUlNUWVBFX1hXUlNUKSkKIAkJZG0zNjVfdnBzc19zeW5jX3Jlc2V0KCk7CiB9CiAKQEAgLTI5MSwxOSArMjk1LDIwIEBACiAKIAlmb3IgKGxwc2Nncm91cCA9IGxwc2NtaW47IGxwc2Nncm91cCA8PSBscHNjbWF4OyBscHNjZ3JvdXArKykgewogCQlpZiAobHBzY2dyb3VwID09IDApIHsKLQkJCWxwc2Nfc3RhcnQgPSAwOyAvKiBFbmFibGluZyBMUFNDIDMgdG8gMjggU0NSIGZpcnN0ICovCi0JCQlscHNjX2VuZCAgID0gMjg7CisJCQkvKiBFbmFibGluZyBMUFNDIDMgdG8gMjggU0NSIGZpcnN0ICovCisJCQlscHNjX3N0YXJ0ID0gREFWSU5DSV9MUFNDX1ZQU1NNU1RSOworCQkJbHBzY19lbmQgICA9IERBVklOQ0lfTFBTQ19USU1FUjE7CiAJCX0gZWxzZSBpZiAobHBzY2dyb3VwID09IDEpIHsgLyogU2tpcCBsb2NrZWQgTFBTQ3MgWzI5LTM3XSAqLwotCQkJbHBzY19zdGFydCA9IDM4OwotCQkJbHBzY19lbmQgICA9IDQ3OworCQkJbHBzY19zdGFydCA9IERBVklOQ0lfTFBTQ19DRkc1OworCQkJbHBzY19lbmQgICA9IERBVklOQ0lfTFBTQ19WUFNTTUFTVEVSOwogCQl9IGVsc2UgewotCQkJbHBzY19zdGFydCA9IDUwOwotCQkJbHBzY19lbmQgICA9IDUxOworCQkJbHBzY19zdGFydCA9IERBVklOQ0lfTFBTQ19NSkNQOworCQkJbHBzY19lbmQgICA9IERBVklOQ0lfTFBTQ19IRFZJQ1A7CiAJCX0KIAogCQkvKiBORVhUPTB4MywgRW5hYmxlIExQU0MncyAqLwogCQlmb3IgKGkgPSBscHNjX3N0YXJ0OyBpIDw9IGxwc2NfZW5kOyBpKyspCi0JCQlzZXRiaXRzX2xlMzIoJmR2X3BzY19yZWdzLT5tZGN0bFtpXSwgMHgzKTsKKwkJCXNldGJpdHNfbGUzMigmZHZfcHNjX3JlZ3MtPm1kY3RsW2ldLCBQU0NfRU5BQkxFKTsKIAogCQkvKgogCQkgKiBQcm9ncmFtIGdvY3RsIHRvIHN0YXJ0IHRyYW5zaXRpb24gc2VxdWVuY2UgZm9yIExQU0NzCkBAIC0zMjIsNyArMzI3LDcgQEAKIAkJLyogV2FpdCBmb3IgTU9EU1RBVCA9IEVOQUJMRSBmcm9tIExQU0MncyAqLwogCQlmb3IgKGkgPSBscHNjX3N0YXJ0OyBpIDw9IGxwc2NfZW5kOyBpKyspCiAJCQl3aGlsZSAoISgocmVhZGwoJmR2X3BzY19yZWdzLT5tZHN0YXRbaV0pICYKLQkJCQlQU0NfTURfU1RBVEVfTVNLKSA9PSAweDMpKQorCQkJCVBTQ19NRF9TVEFURV9NU0spID09IFBTQ19FTkFCTEUpKQogCQkJCTsKIAl9CiB9CkBAIC0zMzIsNyArMzM3LDcgQEAKIAl3cml0ZWwoQ09ORklHX1NZU19ETTM2eF9BV0NDUiwgJmRhdmluY2lfZW1pZl9yZWdzLT5hd2Njcik7CiAJd3JpdGVsKENPTkZJR19TWVNfRE0zNnhfQUIxQ1IsICZkYXZpbmNpX2VtaWZfcmVncy0+YWIxY3IpOwogCi0Jc2V0Yml0c19sZTMyKCZkYXZpbmNpX2VtaWZfcmVncy0+bmFuZGZjciwgMSk7CisJc2V0Yml0c19sZTMyKCZkYXZpbmNpX2VtaWZfcmVncy0+bmFuZGZjciwgREFWSU5DSV9OQU5ERkNSX0NTMk5BTkQpOwogCiAJd3JpdGVsKENPTkZJR19TWVNfRE0zNnhfQUIyQ1IsICZkYXZpbmNpX2VtaWZfcmVncy0+YWIyY3IpOwogCkBAIC0zNjEsMzEgKzM2NiwxMiBAQAogCiB2b2lkIGRtMzZ4X2xvd2xldmVsX2luaXQodWxvbmcgYm9vdGZsYWcpCiB7Ci0JLyoKLQkgKiBjb3BpZWQgZnJvbSBhcmNoL2FybS9jcHUvYXJtOTI2ZWpzL3N0YXJ0LlMKLQkgKgotCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKLQkgKi8KLQlhc20oIm1vdglyMCwgIzAiKTsKLQlhc20oIm1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAiKTsJLyogZmx1c2ggdjMvdjQgY2FjaGUgKi8KLQlhc20oIm1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAiKTsJLyogZmx1c2ggdjQgVExCICovCi0KLQkvKgotCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKLQkgKi8KLQlhc20oIm1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAiKTsKLQkvKiBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykgKi8KLQlhc20oImJpYwlyMCwgcjAsICMweDAwMDAyMzAwIik7Ci0JLyogY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkgKi8KLQlhc20oImJpYwlyMCwgcjAsICMweDAwMDAwMDg3Iik7Ci0JLyogc2V0IGJpdCAyIChBKSBBbGlnbiAqLwotCWFzbSgib3JyCXIwLCByMCwgIzB4MDAwMDAwMDIiKTsKLQkvKiBzZXQgYml0IDEyIChJKSBJLUNhY2hlICovCi0JYXNtKCJvcnIJcjAsIHIwLCAjMHgwMDAwMTAwMCIpOwotCWFzbSgibWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMCIpOworCXN0cnVjdCBkYXZpbmNpX3VhcnRfY3RybF9yZWdzICpkYXZpbmNpX3VhcnRfY3RybF9yZWdzID0KKwkJKHN0cnVjdCBkYXZpbmNpX3VhcnRfY3RybF9yZWdzICopKENPTkZJR19TWVNfTlMxNjU1MF9DT00xICsKKwkJREFWSU5DSV9VQVJUX0NUUkxfQkFTRSk7CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCi0Jd3JpdGVsKDB4MDQsICZkdl9haW50Y19yZWdzLT5pbnRjdGwpOworCXdyaXRlbChEVl9BSU5UQ19JTlRDVExfSURNT0RFLCAmZHZfYWludGNfcmVncy0+aW50Y3RsKTsKIAl3cml0ZWwoMHgwLCAmZHZfYWludGNfcmVncy0+ZWFiYXNlKTsKIAl3cml0ZWwoMHgwLCAmZHZfYWludGNfcmVncy0+ZWludDApOwogCXdyaXRlbCgweDAsICZkdl9haW50Y19yZWdzLT5laW50MSk7CkBAIC00MjIsNyArNDA4LDEwIEBACiAJICogRml4IFBvd2VyIGFuZCBFbXVsYXRpb24gTWFuYWdlbWVudCBSZWdpc3RlcgogCSAqIHNlZSBzcHJ1ZmgyLnBkZiBwYWdlIDM4IFRhYmxlIDIyCiAJICovCi0Jd3JpdGVsKDB4MDAwMGUwMDMsIChDT05GSUdfU1lTX05TMTY1NTBfQ09NMSArIDB4MzApKTsKKwl3cml0ZWwoKERBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9GUkVFIHwgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VSUlNUIHwKKwkJREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VUUlNUKSwKKwkgICAgICAgJmRhdmluY2lfdWFydF9jdHJsX3JlZ3MtPnB3cmVtdV9tZ210KTsKKwogCXB1dHMoImRkciBpbml0XG4iKTsKIAlkbTM2NV9kZHJfc2V0dXAoKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIGJvYXJkL2NzYjIyNi9NYWtlZmlsZQpyZW5hbWUgdG8gYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L01ha2VmaWxlCmluZGV4IDZmZTliZWMuLjc4NDUzMTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvTWFrZWZpbGUKQEAgLTIzLDE0ICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gJChvYmopbGliJChCT0FSRCkubworTElCCT0gJChvYmopbGliJChTT0MpLm8KIAotQ09CSlMJOj0gY3NiMjI2Lm8gZmxhc2gubworQ09CSlMJPSBjbG9jay5vIG14MjgubyBpb211eC5vIHRpbWVyLm8KIAotU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCiAKLSQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQogCSQoY2FsbCBjbWRfbGlua19vX3RhcmdldCwgJChPQkpTKSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L2Nsb2NrLmMgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjk4NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L2Nsb2NrLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IGNsb2NrIHNldHVwIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisKKy8qIFRoZSBQTEwgZnJlcXVlbmN5IGlzIGFsd2F5cyA0ODBNSHosIHNlZSBzZWN0aW9uIDEwLjIgaW4gaU1YMjggZGF0YXNoZWV0LiAqLworI2RlZmluZQlQTExfRlJFUV9LSFoJNDgwMDAwCisjZGVmaW5lCVBMTF9GUkVRX0NPRUYJMTgKKy8qIFRoZSBYVEFMIGZyZXF1ZW5jeSBpcyBhbHdheXMgMjRNSHosIHNlZSBzZWN0aW9uIDEwLjIgaW4gaU1YMjggZGF0YXNoZWV0LiAqLworI2RlZmluZQlYVEFMX0ZSRVFfS0haCTI0MDAwCisKKyNkZWZpbmUJUExMX0ZSRVFfTUhaCShQTExfRlJFUV9LSFogLyAxMDAwKQorI2RlZmluZQlYVEFMX0ZSRVFfTUhaCShYVEFMX0ZSRVFfS0haIC8gMTAwMCkKKworc3RhdGljIHVpbnQzMl90IG14MjhfZ2V0X3BjbGsodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJdWludDMyX3QgY2xrY3RybCwgY2xrc2VxLCBjbGtmcmFjOworCXVpbnQzMl90IGZyYWMsIGRpdjsKKworCWNsa2N0cmwgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2NwdSk7CisKKwkvKiBObyBzdXBwb3J0IG9mIGZyYWN0aW9uYWwgZGl2aWRlciBjYWxjdWxhdGlvbiAqLworCWlmIChjbGtjdHJsICYKKwkJKENMS0NUUkxfQ1BVX0RJVl9YVEFMX0ZSQUNfRU4gfCBDTEtDVFJMX0NQVV9ESVZfQ1BVX0ZSQUNfRU4pKSB7CisJCXJldHVybiAwOworCX0KKworCWNsa3NlcSA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxKTsKKworCS8qIFhUQUwgUGF0aCAqLworCWlmIChjbGtzZXEgJiBDTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVKSB7CisJCWRpdiA9IChjbGtjdHJsICYgQ0xLQ1RSTF9DUFVfRElWX1hUQUxfTUFTSykgPj4KKwkJCUNMS0NUUkxfQ1BVX0RJVl9YVEFMX09GRlNFVDsKKwkJcmV0dXJuIFhUQUxfRlJFUV9NSFogLyBkaXY7CisJfQorCisJLyogUkVGIFBhdGggKi8KKwljbGtmcmFjID0gcmVhZGwoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMCk7CisJZnJhYyA9IGNsa2ZyYWMgJiBDTEtDVFJMX0ZSQUMwX0NQVUZSQUNfTUFTSzsKKwlkaXYgPSBjbGtjdHJsICYgQ0xLQ1RSTF9DUFVfRElWX0NQVV9NQVNLOworCXJldHVybiAoUExMX0ZSRVFfTUhaICogUExMX0ZSRVFfQ09FRiAvIGZyYWMpIC8gZGl2OworfQorCitzdGF0aWMgdWludDMyX3QgbXgyOF9nZXRfaGNsayh2b2lkKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwl1aW50MzJfdCBkaXY7CisJdWludDMyX3QgY2xrY3RybDsKKworCWNsa2N0cmwgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2hidXMpOworCisJLyogTm8gc3VwcG9ydCBvZiBmcmFjdGlvbmFsIGRpdmlkZXIgY2FsY3VsYXRpb24gKi8KKwlpZiAoY2xrY3RybCAmIENMS0NUUkxfSEJVU19ESVZfRlJBQ19FTikKKwkJcmV0dXJuIDA7CisKKwlkaXYgPSBjbGtjdHJsICYgQ0xLQ1RSTF9IQlVTX0RJVl9NQVNLOworCXJldHVybiBteDI4X2dldF9wY2xrKCkgLyBkaXY7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBteDI4X2dldF9lbWljbGsodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJdWludDMyX3QgZnJhYywgZGl2OworCXVpbnQzMl90IGNsa2N0cmwsIGNsa3NlcSwgY2xrZnJhYzsKKworCWNsa3NlcSA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxKTsKKwljbGtjdHJsID0gcmVhZGwoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9lbWkpOworCisJLyogWFRBTCBQYXRoICovCisJaWYgKGNsa3NlcSAmIENMS0NUUkxfQ0xLU0VRX0JZUEFTU19FTUkpIHsKKwkJZGl2ID0gKGNsa2N0cmwgJiBDTEtDVFJMX0VNSV9ESVZfWFRBTF9NQVNLKSA+PgorCQkJQ0xLQ1RSTF9FTUlfRElWX1hUQUxfT0ZGU0VUOworCQlyZXR1cm4gWFRBTF9GUkVRX01IWiAvIGRpdjsKKwl9CisKKwljbGtmcmFjID0gcmVhZGwoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMCk7CisKKwkvKiBSRUYgUGF0aCAqLworCWZyYWMgPSAoY2xrZnJhYyAmIENMS0NUUkxfRlJBQzBfRU1JRlJBQ19NQVNLKSA+PgorCQlDTEtDVFJMX0ZSQUMwX0VNSUZSQUNfT0ZGU0VUOworCWRpdiA9IGNsa2N0cmwgJiBDTEtDVFJMX0VNSV9ESVZfRU1JX01BU0s7CisJcmV0dXJuIChQTExfRlJFUV9NSFogKiBQTExfRlJFUV9DT0VGIC8gZnJhYykgLyBkaXY7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBteDI4X2dldF9ncG1pY2xrKHZvaWQpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKworCXVpbnQzMl90IGZyYWMsIGRpdjsKKwl1aW50MzJfdCBjbGtjdHJsLCBjbGtzZXEsIGNsa2ZyYWM7CisKKwljbGtzZXEgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2Nsa3NlcSk7CisJY2xrY3RybCA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZ3BtaSk7CisKKwkvKiBYVEFMIFBhdGggKi8KKwlpZiAoY2xrc2VxICYgQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0dQTUkpIHsKKwkJZGl2ID0gY2xrY3RybCAmIENMS0NUUkxfR1BNSV9ESVZfTUFTSzsKKwkJcmV0dXJuIFhUQUxfRlJFUV9NSFogLyBkaXY7CisJfQorCisJY2xrZnJhYyA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzEpOworCisJLyogUkVGIFBhdGggKi8KKwlmcmFjID0gKGNsa2ZyYWMgJiBDTEtDVFJMX0ZSQUMxX0dQTUlGUkFDX01BU0spID4+CisJCUNMS0NUUkxfRlJBQzFfR1BNSUZSQUNfT0ZGU0VUOworCWRpdiA9IGNsa2N0cmwgJiBDTEtDVFJMX0dQTUlfRElWX01BU0s7CisJcmV0dXJuIChQTExfRlJFUV9NSFogKiBQTExfRlJFUV9DT0VGIC8gZnJhYykgLyBkaXY7Cit9CisKKy8qCisgKiBTZXQgSU8gY2xvY2sgZnJlcXVlbmN5LCBpbiBrSHoKKyAqLwordm9pZCBteDI4X3NldF9pb2NsayhlbnVtIG14c19pb2Nsb2NrIGlvLCB1aW50MzJfdCBmcmVxKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisJdWludDMyX3QgZGl2OworCisJaWYgKGZyZXEgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGlvID4gTVhDX0lPQ0xLMSkKKwkJcmV0dXJuOworCisJZGl2ID0gKFBMTF9GUkVRX0tIWiAqIFBMTF9GUkVRX0NPRUYpIC8gZnJlcTsKKworCWlmIChkaXYgPCAxOCkKKwkJZGl2ID0gMTg7CisKKwlpZiAoZGl2ID4gMzUpCisJCWRpdiA9IDM1OworCisJaWYgKGlvID09IE1YQ19JT0NMSzApIHsKKwkJd3JpdGVsKENMS0NUUkxfRlJBQzBfQ0xLR0FURUlPMCwKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzBfc2V0KTsKKwkJY2xyc2V0Yml0c19sZTMyKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzAsCisJCQkJQ0xLQ1RSTF9GUkFDMF9JTzBGUkFDX01BU0ssCisJCQkJZGl2IDw8IENMS0NUUkxfRlJBQzBfSU8wRlJBQ19PRkZTRVQpOworCQl3cml0ZWwoQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFSU8wLAorCQkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMF9jbHIpOworCX0gZWxzZSB7CisJCXdyaXRlbChDTEtDVFJMX0ZSQUMwX0NMS0dBVEVJTzEsCisJCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwX3NldCk7CisJCWNscnNldGJpdHNfbGUzMigmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwLAorCQkJCUNMS0NUUkxfRlJBQzBfSU8xRlJBQ19NQVNLLAorCQkJCWRpdiA8PCBDTEtDVFJMX0ZSQUMwX0lPMUZSQUNfT0ZGU0VUKTsKKwkJd3JpdGVsKENMS0NUUkxfRlJBQzBfQ0xLR0FURUlPMSwKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzBfY2xyKTsKKwl9Cit9CisKKy8qCisgKiBHZXQgSU8gY2xvY2ssIHJldHVybnMgSU8gY2xvY2sgaW4ga0h6CisgKi8KK3N0YXRpYyB1aW50MzJfdCBteDI4X2dldF9pb2NsayhlbnVtIG14c19pb2Nsb2NrIGlvKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisJdWludDMyX3QgdG1wLCByZXQ7CisKKwlpZiAoaW8gPiBNWENfSU9DTEsxKQorCQlyZXR1cm4gMDsKKworCXRtcCA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzApOworCisJaWYgKGlvID09IE1YQ19JT0NMSzApCisJCXJldCA9ICh0bXAgJiBDTEtDVFJMX0ZSQUMwX0lPMEZSQUNfTUFTSykgPj4KKwkJCUNMS0NUUkxfRlJBQzBfSU8wRlJBQ19PRkZTRVQ7CisJZWxzZQorCQlyZXQgPSAodG1wICYgQ0xLQ1RSTF9GUkFDMF9JTzFGUkFDX01BU0spID4+CisJCQlDTEtDVFJMX0ZSQUMwX0lPMUZSQUNfT0ZGU0VUOworCisJcmV0dXJuIChQTExfRlJFUV9LSFogKiBQTExfRlJFUV9DT0VGKSAvIHJldDsKK30KKworLyoKKyAqIENvbmZpZ3VyZSBTU1AgY2xvY2sgZnJlcXVlbmN5LCBpbiBrSHoKKyAqLwordm9pZCBteDI4X3NldF9zc3BjbGsoZW51bSBteHNfc3NwY2xvY2sgc3NwLCB1aW50MzJfdCBmcmVxLCBpbnQgeHRhbCkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCXVpbnQzMl90IGNsaywgY2xrcmVnOworCisJaWYgKHNzcCA+IE1YQ19TU1BDTEszKQorCQlyZXR1cm47CisKKwljbGtyZWcgPSAodWludDMyX3QpKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMCkgKworCQkJKHNzcCAqIHNpemVvZihzdHJ1Y3QgbXgyOF9yZWdpc3RlcikpOworCisJY2xyYml0c19sZTMyKGNsa3JlZywgQ0xLQ1RSTF9TU1BfQ0xLR0FURSk7CisJd2hpbGUgKHJlYWRsKGNsa3JlZykgJiBDTEtDVFJMX1NTUF9DTEtHQVRFKQorCQk7CisKKwlpZiAoeHRhbCkKKwkJY2xrID0gWFRBTF9GUkVRX0tIWjsKKwllbHNlCisJCWNsayA9IG14MjhfZ2V0X2lvY2xrKHNzcCA+PiAxKTsKKworCWlmIChmcmVxID4gY2xrKQorCQlyZXR1cm47CisKKwkvKiBDYWxjdWxhdGUgdGhlIGRpdmlkZXIgYW5kIGNhcCBpdCBpZiBuZWNlc3NhcnkgKi8KKwljbGsgLz0gZnJlcTsKKwlpZiAoY2xrID4gQ0xLQ1RSTF9TU1BfRElWX01BU0spCisJCWNsayA9IENMS0NUUkxfU1NQX0RJVl9NQVNLOworCisJY2xyc2V0Yml0c19sZTMyKGNsa3JlZywgQ0xLQ1RSTF9TU1BfRElWX01BU0ssIGNsayk7CisJd2hpbGUgKHJlYWRsKGNsa3JlZykgJiBDTEtDVFJMX1NTUF9CVVNZKQorCQk7CisKKwlpZiAoeHRhbCkKKwkJd3JpdGVsKENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwIDw8IHNzcCwKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxX3NldCk7CisJZWxzZQorCQl3cml0ZWwoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUDAgPDwgc3NwLAorCQkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXFfY2xyKTsKK30KKworLyoKKyAqIFJldHVybiBTU1AgZnJlcXVlbmN5LCBpbiBrSHoKKyAqLworc3RhdGljIHVpbnQzMl90IG14MjhfZ2V0X3NzcGNsayhlbnVtIG14c19zc3BjbG9jayBzc3ApCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKwl1aW50MzJfdCBjbGtyZWc7CisJdWludDMyX3QgY2xrLCB0bXA7CisKKwlpZiAoc3NwID4gTVhDX1NTUENMSzMpCisJCXJldHVybiAwOworCisJdG1wID0gcmVhZGwoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXEpOworCWlmICh0bXAgJiAoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUDAgPDwgc3NwKSkKKwkJcmV0dXJuIFhUQUxfRlJFUV9LSFo7CisKKwljbGtyZWcgPSAodWludDMyX3QpKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMCkgKworCQkJKHNzcCAqIHNpemVvZihzdHJ1Y3QgbXgyOF9yZWdpc3RlcikpOworCisJdG1wID0gcmVhZGwoY2xrcmVnKSAmIENMS0NUUkxfU1NQX0RJVl9NQVNLOworCisJaWYgKHRtcCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWNsayA9IG14MjhfZ2V0X2lvY2xrKHNzcCA+PiAxKTsKKworCXJldHVybiBjbGsgLyB0bXA7Cit9CisKKy8qCisgKiBTZXQgU1NQL01NQyBidXMgZnJlcXVlbmN5LCBpbiBrSHopCisgKi8KK3ZvaWQgbXgyOF9zZXRfc3NwX2J1c2Nsb2NrKHVuc2lnbmVkIGludCBidXMsIHVpbnQzMl90IGZyZXEpCit7CisJc3RydWN0IG14Mjhfc3NwX3JlZ3MgKnNzcF9yZWdzOworCWNvbnN0IHVpbnQzMl90IHNzcGNsayA9IG14MjhfZ2V0X3NzcGNsayhidXMpOworCXVpbnQzMl90IHJlZzsKKwl1aW50MzJfdCBkaXZpZGUsIHJhdGUsIHRndGNsazsKKworCXNzcF9yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopKE1YU19TU1AwX0JBU0UgKyAoYnVzICogMHgyMDAwKSk7CisKKwkvKgorCSAqIFNTUCBiaXQgcmF0ZSA9IFNTUENMSyAvIChDTE9DS19ESVZJREUgKiAoMSArIENMT0NLX1JBVEUpKSwKKwkgKiBDTE9DS19ESVZJREUgaGFzIHRvIGJlIGFuIGV2ZW4gdmFsdWUgZnJvbSAyIHRvIDI1NCwgYW5kCisJICogQ0xPQ0tfUkFURSBjb3VsZCBiZSBhbnkgaW50ZWdlciBmcm9tIDAgdG8gMjU1LgorCSAqLworCWZvciAoZGl2aWRlID0gMjsgZGl2aWRlIDwgMjU0OyBkaXZpZGUgKz0gMikgeworCQlyYXRlID0gc3NwY2xrIC8gZnJlcSAvIGRpdmlkZTsKKwkJaWYgKHJhdGUgPD0gMjU2KQorCQkJYnJlYWs7CisJfQorCisJdGd0Y2xrID0gc3NwY2xrIC8gZGl2aWRlIC8gcmF0ZTsKKwl3aGlsZSAodGd0Y2xrID4gZnJlcSkgeworCQlyYXRlKys7CisJCXRndGNsayA9IHNzcGNsayAvIGRpdmlkZSAvIHJhdGU7CisJfQorCWlmIChyYXRlID4gMjU2KQorCQlyYXRlID0gMjU2OworCisJLyogQWx3YXlzIHNldCB0aW1lb3V0IHRoZSBtYXhpbXVtICovCisJcmVnID0gU1NQX1RJTUlOR19USU1FT1VUX01BU0sgfAorCQkoZGl2aWRlIDw8IFNTUF9USU1JTkdfQ0xPQ0tfRElWSURFX09GRlNFVCkgfAorCQkoKHJhdGUgLSAxKSA8PCBTU1BfVElNSU5HX0NMT0NLX1JBVEVfT0ZGU0VUKTsKKwl3cml0ZWwocmVnLCAmc3NwX3JlZ3MtPmh3X3NzcF90aW1pbmcpOworCisJZGVidWcoIlNQSSVkOiBTZXQgZnJlcSByYXRlIHRvICVkIEtIeiAocmVxdWVzdGVkICVkIEtIeilcbiIsCisJCWJ1cywgdGd0Y2xrLCBmcmVxKTsKK30KKwordWludDMyX3QgbXhjX2dldF9jbG9jayhlbnVtIG14Y19jbG9jayBjbGspCit7CisJc3dpdGNoIChjbGspIHsKKwljYXNlIE1YQ19BUk1fQ0xLOgorCQlyZXR1cm4gbXgyOF9nZXRfcGNsaygpICogMTAwMDAwMDsKKwljYXNlIE1YQ19HUE1JX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X2dwbWljbGsoKSAqIDEwMDAwMDA7CisJY2FzZSBNWENfQUhCX0NMSzoKKwljYXNlIE1YQ19JUEdfQ0xLOgorCQlyZXR1cm4gbXgyOF9nZXRfaGNsaygpICogMTAwMDAwMDsKKwljYXNlIE1YQ19FTUlfQ0xLOgorCQlyZXR1cm4gbXgyOF9nZXRfZW1pY2xrKCk7CisJY2FzZSBNWENfSU8wX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X2lvY2xrKE1YQ19JT0NMSzApOworCWNhc2UgTVhDX0lPMV9DTEs6CisJCXJldHVybiBteDI4X2dldF9pb2NsayhNWENfSU9DTEsxKTsKKwljYXNlIE1YQ19TU1AwX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X3NzcGNsayhNWENfU1NQQ0xLMCk7CisJY2FzZSBNWENfU1NQMV9DTEs6CisJCXJldHVybiBteDI4X2dldF9zc3BjbGsoTVhDX1NTUENMSzEpOworCWNhc2UgTVhDX1NTUDJfQ0xLOgorCQlyZXR1cm4gbXgyOF9nZXRfc3NwY2xrKE1YQ19TU1BDTEsyKTsKKwljYXNlIE1YQ19TU1AzX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X3NzcGNsayhNWENfU1NQQ0xLMyk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvaW9tdXguYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9pb211eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTQxMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvaW9tdXguYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYsMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEphbiBXZWl0emVsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJILAorICogICAgICAgICAgICAgICAgICAgICAgIDxhcm1saW51eEBwaHl0ZWMuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorCisjaWYJZGVmaW5lZChDT05GSUdfTVgyMykKKyNkZWZpbmUJRFJJVkVfT0ZGU0VUCTB4MjAwCisjZGVmaW5lCVBVTExfT0ZGU0VUCTB4NDAwCisjZWxpZglkZWZpbmVkKENPTkZJR19NWDI4KQorI2RlZmluZQlEUklWRV9PRkZTRVQJMHgzMDAKKyNkZWZpbmUJUFVMTF9PRkZTRVQJMHg2MDAKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBzZWxlY3QgQ09ORklHX01YMjMgb3IgQ09ORklHX01YMjgiCisjZW5kaWYKKworLyoKKyAqIGNvbmZpZ3VyZXMgYSBzaW5nbGUgcGFkIGluIHRoZSBpb211eGVyCisgKi8KK2ludCBteHNfaW9tdXhfc2V0dXBfcGFkKGlvbXV4X2NmZ190IHBhZCkKK3sKKwl1MzIgcmVnLCBvZnMsIGJwLCBibTsKKwl2b2lkICppb211eF9iYXNlID0gKHZvaWQgKilNWFNfUElOQ1RSTF9CQVNFOworCXN0cnVjdCBteDI4X3JlZ2lzdGVyICpteHNfcmVnOworCisJLyogbXV4c2VsICovCisJb2ZzID0gMHgxMDA7CisJb2ZzICs9IFBBRF9CQU5LKHBhZCkgKiAweDIwICsgUEFEX1BJTihwYWQpIC8gMTYgKiAweDEwOworCWJwID0gUEFEX1BJTihwYWQpICUgMTYgKiAyOworCWJtID0gMHgzIDw8IGJwOworCXJlZyA9IHJlYWRsKGlvbXV4X2Jhc2UgKyBvZnMpOworCXJlZyAmPSB+Ym07CisJcmVnIHw9IFBBRF9NVVhTRUwocGFkKSA8PCBicDsKKwl3cml0ZWwocmVnLCBpb211eF9iYXNlICsgb2ZzKTsKKworCS8qIGRyaXZlICovCisJb2ZzID0gRFJJVkVfT0ZGU0VUOworCW9mcyArPSBQQURfQkFOSyhwYWQpICogMHg0MCArIFBBRF9QSU4ocGFkKSAvIDggKiAweDEwOworCS8qIG1BICovCisJaWYgKFBBRF9NQV9WQUxJRChwYWQpKSB7CisJCWJwID0gUEFEX1BJTihwYWQpICUgOCAqIDQ7CisJCWJtID0gMHgzIDw8IGJwOworCQlyZWcgPSByZWFkbChpb211eF9iYXNlICsgb2ZzKTsKKwkJcmVnICY9IH5ibTsKKwkJcmVnIHw9IFBBRF9NQShwYWQpIDw8IGJwOworCQl3cml0ZWwocmVnLCBpb211eF9iYXNlICsgb2ZzKTsKKwl9CisJLyogdm9sICovCisJaWYgKFBBRF9WT0xfVkFMSUQocGFkKSkgeworCQlicCA9IFBBRF9QSU4ocGFkKSAlIDggKiA0ICsgMjsKKwkJbXhzX3JlZyA9IChzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqKShpb211eF9iYXNlICsgb2ZzKTsKKwkJaWYgKFBBRF9WT0wocGFkKSkKKwkJCXdyaXRlbCgxIDw8IGJwLCAmbXhzX3JlZy0+cmVnX3NldCk7CisJCWVsc2UKKwkJCXdyaXRlbCgxIDw8IGJwLCAmbXhzX3JlZy0+cmVnX2Nscik7CisJfQorCisJLyogcHVsbCAqLworCWlmIChQQURfUFVMTF9WQUxJRChwYWQpKSB7CisJCW9mcyA9IFBVTExfT0ZGU0VUOworCQlvZnMgKz0gUEFEX0JBTksocGFkKSAqIDB4MTA7CisJCWJwID0gUEFEX1BJTihwYWQpOworCQlteHNfcmVnID0gKHN0cnVjdCBteDI4X3JlZ2lzdGVyICopKGlvbXV4X2Jhc2UgKyBvZnMpOworCQlpZiAoUEFEX1BVTEwocGFkKSkKKwkJCXdyaXRlbCgxIDw8IGJwLCAmbXhzX3JlZy0+cmVnX3NldCk7CisJCWVsc2UKKwkJCXdyaXRlbCgxIDw8IGJwLCAmbXhzX3JlZy0+cmVnX2Nscik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBteHNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGFkcyhjb25zdCBpb211eF9jZmdfdCAqcGFkX2xpc3QsIHVuc2lnbmVkIGNvdW50KQoreworCWNvbnN0IGlvbXV4X2NmZ190ICpwID0gcGFkX2xpc3Q7CisJaW50IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXJldCA9IG14c19pb211eF9zZXR1cF9wYWQoKnApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJcCsrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L214MjguYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9teDI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4YzAxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9teDI4LmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IGNvbW1vbiBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworLyogMSBzZWNvbmQgZGVsYXkgc2hvdWxkIGJlIHBsZW50eSBvZiB0aW1lIGZvciBibG9jayByZXNldC4gKi8KKyNkZWZpbmUJUkVTRVRfTUFYX1RJTUVPVVQJMTAwMDAwMAorCisjZGVmaW5lCU1YMjhfQkxPQ0tfU0ZUUlNUCSgxIDw8IDMxKQorI2RlZmluZQlNWDI4X0JMT0NLX0NMS0dBVEUJKDEgPDwgMzApCisKKy8qIExvd2xldmVsIGluaXQgaXNuJ3QgdXNlZCBvbiBpLk1YMjgsIHNvIGp1c3QgaGF2ZSBhIGR1bW15IGhlcmUgKi8KK2lubGluZSB2b2lkIGxvd2xldmVsX2luaXQodm9pZCkge30KKwordm9pZCByZXNldF9jcHUodWxvbmcgaWdub3JlZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKKwordm9pZCByZXNldF9jcHUodWxvbmcgaWdub3JlZCkKK3sKKworCXN0cnVjdCBteDI4X3J0Y19yZWdzICpydGNfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9ydGNfcmVncyAqKU1YU19SVENfQkFTRTsKKworCS8qIFdhaXQgMSB1UyBiZWZvcmUgZG9pbmcgdGhlIGFjdHVhbCB3YXRjaGRvZyByZXNldCAqLworCXdyaXRlbCgxLCAmcnRjX3JlZ3MtPmh3X3J0Y193YXRjaGRvZyk7CisJd3JpdGVsKFJUQ19DVFJMX1dBVENIRE9HRU4sICZydGNfcmVncy0+aHdfcnRjX2N0cmxfc2V0KTsKKworCS8qIEVuZGxlc3MgbG9vcCwgcmVzZXQgd2lsbCBleGl0IGZyb20gaGVyZSAqLworCWZvciAoOzspCisJCTsKK30KKworaW50IG14Mjhfd2FpdF9tYXNrX3NldChzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnLCB1aW50MzJfdCBtYXNrLCBpbnQgdGltZW91dCkKK3sKKwl3aGlsZSAoLS10aW1lb3V0KSB7CisJCWlmICgocmVhZGwoJnJlZy0+cmVnKSAmIG1hc2spID09IG1hc2spCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAhdGltZW91dDsKK30KKworaW50IG14Mjhfd2FpdF9tYXNrX2NscihzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnLCB1aW50MzJfdCBtYXNrLCBpbnQgdGltZW91dCkKK3sKKwl3aGlsZSAoLS10aW1lb3V0KSB7CisJCWlmICgocmVhZGwoJnJlZy0+cmVnKSAmIG1hc2spID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAhdGltZW91dDsKK30KKworaW50IG14MjhfcmVzZXRfYmxvY2soc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZykKK3sKKwkvKiBDbGVhciBTRlRSU1QgKi8KKwl3cml0ZWwoTVgyOF9CTE9DS19TRlRSU1QsICZyZWctPnJlZ19jbHIpOworCisJaWYgKG14Mjhfd2FpdF9tYXNrX2NscihyZWcsIE1YMjhfQkxPQ0tfU0ZUUlNULCBSRVNFVF9NQVhfVElNRU9VVCkpCisJCXJldHVybiAxOworCisJLyogQ2xlYXIgQ0xLR0FURSAqLworCXdyaXRlbChNWDI4X0JMT0NLX0NMS0dBVEUsICZyZWctPnJlZ19jbHIpOworCisJLyogU2V0IFNGVFJTVCAqLworCXdyaXRlbChNWDI4X0JMT0NLX1NGVFJTVCwgJnJlZy0+cmVnX3NldCk7CisKKwkvKiBXYWl0IGZvciBDTEtHQVRFIGJlaW5nIHNldCAqLworCWlmIChteDI4X3dhaXRfbWFza19zZXQocmVnLCBNWDI4X0JMT0NLX0NMS0dBVEUsIFJFU0VUX01BWF9USU1FT1VUKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBDbGVhciBTRlRSU1QgKi8KKwl3cml0ZWwoTVgyOF9CTE9DS19TRlRSU1QsICZyZWctPnJlZ19jbHIpOworCisJaWYgKG14Mjhfd2FpdF9tYXNrX2NscihyZWcsIE1YMjhfQkxPQ0tfU0ZUUlNULCBSRVNFVF9NQVhfVElNRU9VVCkpCisJCXJldHVybiAxOworCisJLyogQ2xlYXIgQ0xLR0FURSAqLworCXdyaXRlbChNWDI4X0JMT0NLX0NMS0dBVEUsICZyZWctPnJlZ19jbHIpOworCisJaWYgKG14Mjhfd2FpdF9tYXNrX2NscihyZWcsIE1YMjhfQkxPQ0tfQ0xLR0FURSwgUkVTRVRfTUFYX1RJTUVPVVQpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCit2b2lkIG14MjhfZml4dXBfdnQodWludDMyX3Qgc3RhcnRfYWRkcikKK3sKKwl1aW50MzJfdCAqdnQgPSAodWludDMyX3QgKikweDIwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJdnRbaV0gPSBzdGFydF9hZGRyICsgKDQgKiBpKTsKK30KKworI2lmZGVmCUNPTkZJR19BUkNIX01JU0NfSU5JVAoraW50IGFyY2hfbWlzY19pbml0KHZvaWQpCit7CisJbXgyOF9maXh1cF92dChnZC0+cmVsb2NhZGRyKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX0FSQ0hfQ1BVX0lOSVQKK2ludCBhcmNoX2NwdV9pbml0KHZvaWQpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKwlleHRlcm4gdWludDMyX3QgX3N0YXJ0OworCisJbXgyOF9maXh1cF92dCgodWludDMyX3QpJl9zdGFydCk7CisKKwkvKgorCSAqIEVuYWJsZSBOQU5EIGNsb2NrCisJICovCisJLyogQ2xlYXIgYnlwYXNzIGJpdCAqLworCXdyaXRlbChDTEtDVFJMX0NMS1NFUV9CWVBBU1NfR1BNSSwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXFfc2V0KTsKKworCS8qIFNldCBHUE1JIGNsb2NrIHRvIHJlZl9ncG1pIC8gMTIgKi8KKwljbHJzZXRiaXRzX2xlMzIoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9ncG1pLAorCQlDTEtDVFJMX0dQTUlfQ0xLR0FURSB8IENMS0NUUkxfR1BNSV9ESVZfTUFTSywgMSk7CisKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBHUElPIHVuaXQKKwkgKi8KKwlteHNfZ3Bpb19pbml0KCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRElTUExBWV9DUFVJTkZPKQoraW50IHByaW50X2NwdWluZm8odm9pZCkKK3sKKwlwcmludGYoIkZyZWVzY2FsZSBpLk1YMjggZmFtaWx5XG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgZG9fbXgyOF9zaG93Y2xvY2tzKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdKQoreworCXByaW50ZigiQ1BVOiAgICUzZCBNSHpcbiIsIG14Y19nZXRfY2xvY2soTVhDX0FSTV9DTEspIC8gMTAwMDAwMCk7CisJcHJpbnRmKCJCVVM6ICAgJTNkIE1IelxuIiwgbXhjX2dldF9jbG9jayhNWENfQUhCX0NMSykgLyAxMDAwMDAwKTsKKwlwcmludGYoIkVNSTogICAlM2QgTUh6XG4iLCBteGNfZ2V0X2Nsb2NrKE1YQ19FTUlfQ0xLKSk7CisJcHJpbnRmKCJHUE1JOiAgJTNkIE1IelxuIiwgbXhjX2dldF9jbG9jayhNWENfR1BNSV9DTEspIC8gMTAwMDAwMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbml0aWFsaXplcyBvbi1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXJzLgorICovCisjaWZkZWYJQ09ORklHX0NNRF9ORVQKK2ludCBjcHVfZXRoX2luaXQoYmRfdCAqYmlzKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwkvKiBUdXJuIG9uIEVORVQgY2xvY2tzICovCisJY2xyYml0c19sZTMyKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZW5ldCwKKwkJQ0xLQ1RSTF9FTkVUX1NMRUVQIHwgQ0xLQ1RSTF9FTkVUX0RJU0FCTEUpOworCisJLyogU2V0IHVwIEVORVQgUExMIGZvciA1MCBNSHogKi8KKwkvKiBQb3dlciBvbiBFTkVUIFBMTCAqLworCXdyaXRlbChDTEtDVFJMX1BMTDJDVFJMMF9QT1dFUiwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9wbGwyY3RybDBfc2V0KTsKKworCXVkZWxheSgxMCk7CisKKwkvKiBHYXRlIG9uIEVORVQgUExMICovCisJd3JpdGVsKENMS0NUUkxfUExMMkNUUkwwX0NMS0dBVEUsCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfcGxsMmN0cmwwX2Nscik7CisKKwkvKiBFbmFibGUgcGFkIG91dHB1dCAqLworCXNldGJpdHNfbGUzMigmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2VuZXQsIENMS0NUUkxfRU5FVF9DTEtfT1VUX0VOKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK1VfQk9PVF9DTUQoCisJY2xvY2tzLAlDT05GSUdfU1lTX01BWEFSR1MsIDEsIGRvX214Mjhfc2hvd2Nsb2NrcywKKwkiZGlzcGxheSBjbG9ja3MiLAorCSIiCispOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L3RpbWVyLmMgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmM5MDRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L3RpbWVyLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IHRpbWVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogKEMpIENvcHlyaWdodCAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKworLyogTWF4aW11bSBmaXhlZCBjb3VudCAqLworI2RlZmluZSBUSU1FUl9MT0FEX1ZBTAkweGZmZmZmZmZmCisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjZGVmaW5lIHRpbWVzdGFtcCAoZ2QtPnRibCkKKyNkZWZpbmUgbGFzdGRlYyAoZ2QtPmxhc3RpbmMpCisKKy8qCisgKiBUaGlzIGRyaXZlciB1c2VzIDFrSHogY2xvY2sgc291cmNlLgorICovCisjZGVmaW5lCU1YMjhfSU5DUkVNRU5URVJfSFoJCTEwMDAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRpY2tfdG9fdGltZSh1bnNpZ25lZCBsb25nIHRpY2spCit7CisJcmV0dXJuIHRpY2sgLyAoTVgyOF9JTkNSRU1FTlRFUl9IWiAvIENPTkZJR19TWVNfSFopOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGltZV90b190aWNrKHVuc2lnbmVkIGxvbmcgdGltZSkKK3sKKwlyZXR1cm4gdGltZSAqIChNWDI4X0lOQ1JFTUVOVEVSX0haIC8gQ09ORklHX1NZU19IWik7Cit9CisKKy8qIENhbGN1bGF0ZSBob3cgbWFueSB0aWNrcyBoYXBwZW4gaW4gInVzIiBtaWNyb3NlY29uZHMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1c190b190aWNrKHVuc2lnbmVkIGxvbmcgdXMpCit7CisJcmV0dXJuICh1cyAqIE1YMjhfSU5DUkVNRU5URVJfSFopIC8gMTAwMDAwMDsKK30KKworaW50IHRpbWVyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF90aW1yb3RfcmVncyAqdGltcm90X3JlZ3MgPQorCQkoc3RydWN0IG14MjhfdGltcm90X3JlZ3MgKilNWFNfVElNUk9UX0JBU0U7CisKKwkvKiBSZXNldCBUaW1lcnMgYW5kIFJvdGFyeSBFbmNvZGVyIG1vZHVsZSAqLworCW14MjhfcmVzZXRfYmxvY2soJnRpbXJvdF9yZWdzLT5od190aW1yb3Rfcm90Y3RybF9yZWcpOworCisJLyogU2V0IGZpeGVkX2NvdW50IHRvIDAgKi8KKwl3cml0ZWwoMCwgJnRpbXJvdF9yZWdzLT5od190aW1yb3RfZml4ZWRfY291bnQwKTsKKworCS8qIFNldCBVUERBVEUgYml0IGFuZCAxS2h6IGZyZXF1ZW5jeSAqLworCXdyaXRlbChUSU1ST1RfVElNQ1RSTG5fVVBEQVRFIHwgVElNUk9UX1RJTUNUUkxuX1JFTE9BRCB8CisJCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfMUtIWl9YVEFMLAorCQkmdGltcm90X3JlZ3MtPmh3X3RpbXJvdF90aW1jdHJsMCk7CisKKwkvKiBTZXQgZml4ZWRfY291bnQgdG8gbWF4aW1hbCB2YWx1ZSAqLworCXdyaXRlbChUSU1FUl9MT0FEX1ZBTCwgJnRpbXJvdF9yZWdzLT5od190aW1yb3RfZml4ZWRfY291bnQwKTsKKworCXJldHVybiAwOworfQorCit1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKK3sKKwlzdHJ1Y3QgbXgyOF90aW1yb3RfcmVncyAqdGltcm90X3JlZ3MgPQorCQkoc3RydWN0IG14MjhfdGltcm90X3JlZ3MgKilNWFNfVElNUk9UX0JBU0U7CisKKwkvKiBDdXJyZW50IHRpY2sgdmFsdWUgKi8KKwl1aW50MzJfdCBub3cgPSByZWFkbCgmdGltcm90X3JlZ3MtPmh3X3RpbXJvdF9ydW5uaW5nX2NvdW50MCk7CisKKwlpZiAobGFzdGRlYyA+PSBub3cpIHsKKwkJLyoKKwkJICogbm9ybWFsIG1vZGUgKG5vbiByb2xsKQorCQkgKiBtb3ZlIHN0YW1wIGZvcndhcmQgd2l0aCBhYnNvbHV0IGRpZmYgdGlja3MKKwkJICovCisJCXRpbWVzdGFtcCArPSAobGFzdGRlYyAtIG5vdyk7CisJfSBlbHNlIHsKKwkJLyogd2UgaGF2ZSByb2xsb3ZlciBvZiBkZWNyZW1lbnRlciAqLworCQl0aW1lc3RhbXAgKz0gKFRJTUVSX0xPQURfVkFMIC0gbm93KSArIGxhc3RkZWM7CisKKwl9CisJbGFzdGRlYyA9IG5vdzsKKworCXJldHVybiB0aWNrX3RvX3RpbWUodGltZXN0YW1wKSAtIGJhc2U7Cit9CisKKy8qIFdlIHVzZSB0aGUgSFdfRElHQ1RMX01JQ1JPU0VDT05EUyByZWdpc3RlciBmb3Igc3ViLW1pbGxpc2Vjb25kIHRpbWVyLiAqLworI2RlZmluZQlNWDI4X0hXX0RJR0NUTF9NSUNST1NFQ09ORFMJMHg4MDAxYzBjMAorCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1aW50MzJfdCBvbGQsIG5ldywgaW5jcjsKKwl1aW50MzJfdCBjb3VudGVyID0gMDsKKworCW9sZCA9IHJlYWRsKE1YMjhfSFdfRElHQ1RMX01JQ1JPU0VDT05EUyk7CisKKwl3aGlsZSAoY291bnRlciA8IHVzZWMpIHsKKwkJbmV3ID0gcmVhZGwoTVgyOF9IV19ESUdDVExfTUlDUk9TRUNPTkRTKTsKKworCQkvKiBDaGVjayBpZiB0aGUgdGltZXIgd3JhcHBlZC4gKi8KKwkJaWYgKG5ldyA8IG9sZCkgeworCQkJaW5jciA9IDB4ZmZmZmZmZmYgLSBvbGQ7CisJCQlpbmNyICs9IG5ldzsKKwkJfSBlbHNlIHsKKwkJCWluY3IgPSBuZXcgLSBvbGQ7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayBpZiB3ZSBhcmUgY2xvc2UgdG8gdGhlIG1heGltdW0gdGltZSBhbmQgdGhlIGNvdW50ZXIKKwkJICogd291bGQgd3JhcCBpZiBpbmNyZW1lbnRlZC4gSWYgdGhhdCdzIHRoZSBjYXNlLCBicmVhayBvdXQKKwkJICogZnJvbSB0aGUgbG9vcCBhcyB0aGUgcmVxdWVzdGVkIGRlbGF5IHRpbWUgcGFzc2VkLgorCQkgKi8KKwkJaWYgKGNvdW50ZXIgKyBpbmNyIDwgY291bnRlcikKKwkJCWJyZWFrOworCisJCWNvdW50ZXIgKz0gaW5jcjsKKwkJb2xkID0gbmV3OworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9NYWtlZmlsZQppbmRleCAxZGVlODFmLi5hNjg0NjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL01ha2VmaWxlCkBAIC0zMyw2ICszMywxMyBAQAogQ09CSlMJKz0gZ3Bpby5vCiBlbmRpZgogCitpZm5lcSAoJChDT05GSUdfT01BUDQ0WFgpJChDT05GSUdfT01BUDU0WFgpLCkKK0NPQkpTCSs9IGh3aW5pdC1jb21tb24ubworQ09CSlMJKz0gY2xvY2tzLWNvbW1vbi5vCitDT0JKUwkrPSBlbWlmLWNvbW1vbi5vCitTT0JKUwkrPSBsb3dsZXZlbF9pbml0Lm8KK2VuZGlmCisKIGlmZGVmIENPTkZJR19TUExfQlVJTEQKIENPQkpTCSs9IHNwbC5vCiBpZmRlZiBDT05GSUdfU1BMX05BTkRfU1VQUE9SVApAQCAtNDMsNiArNTAsMTIgQEAKIGVuZGlmCiBlbmRpZgogCitpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAoraWZuZXEgKCQoQ09ORklHX09NQVA0NFhYKSQoQ09ORklHX09NQVA1NFhYKSwpCitDT0JKUwkrPSBtZW0tY29tbW9uLm8KK2VuZGlmCitlbmRpZgorCiBTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL2Nsb2Nrcy1jb21tb24uYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9jbG9ja3MtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0YTEwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9jbG9ja3MtY29tbW9uLmMKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKgorICogQ2xvY2sgaW5pdGlhbGl6YXRpb24gZm9yIE9NQVA0CisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogQmFzZWQgb24gcHJldmlvdXMgd29yayBieToKKyAqCVNhbnRvc2ggU2hpbGlta2FyIDxzYW50b3NoLnNoaWxpbWthckB0aS5jb20+CisgKglSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9ja3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vdXRpbHMuaD4KKyNpbmNsdWRlIDxhc20vb21hcF9ncGlvLmg+CisKKyNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAorLyoKKyAqIHByaW50aW5nIHRvIGNvbnNvbGUgZG9lc24ndCB3b3JrIHVubGVzcworICogdGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGZyb20gU1BMCisgKi8KKyNkZWZpbmUgcHJpbnRmKGZtdCwgYXJncy4uLikKKyNkZWZpbmUgcHV0cyhzKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdTMyIF9fZ2V0X3N5c19jbGtfaW5kZXgodm9pZCkKK3sKKwl1MzIgaW5kOworCS8qCisJICogRm9yIEVTMSB0aGUgUk9NIGNvZGUgY2FsaWJyYXRpb24gb2Ygc3lzIGNsb2NrIGlzIG5vdCByZWxpYWJsZQorCSAqIGR1ZSB0byBodyBpc3N1ZS4gU28sIHVzZSBoYXJkLWNvZGVkIHZhbHVlLiBJZiB0aGlzIHZhbHVlIGlzIG5vdAorCSAqIGNvcnJlY3QgZm9yIGFueSBib2FyZCBvdmVyLXJpZGUgdGhpcyBmdW5jdGlvbiBpbiBib2FyZCBmaWxlCisJICogRnJvbSBFUzIuMCBvbndhcmRzIHlvdSB3aWxsIGdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20KKwkgKiBDTV9TWVNfQ0xLU0VMCisJICovCisJaWYgKG9tYXBfcmV2aXNpb24oKSA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJaW5kID0gT01BUF9TWVNfQ0xLX0lORF8zOF80X01IWjsKKwllbHNlIHsKKwkJLyogU1lTX0NMS1NFTCAtIDEgdG8gbWF0Y2ggdGhlIGRwbGwgcGFyYW0gYXJyYXkgaW5kaWNlcyAqLworCQlpbmQgPSAocmVhZGwoJnByY20tPmNtX3N5c19jbGtzZWwpICYKKwkJCUNNX1NZU19DTEtTRUxfU1lTX0NMS1NFTF9NQVNLKSAtIDE7CisJfQorCXJldHVybiBpbmQ7Cit9CisKK3UzMiBnZXRfc3lzX2Nsa19pbmRleCh2b2lkKQorCV9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiX19nZXRfc3lzX2Nsa19pbmRleCIpKSk7CisKK3UzMiBnZXRfc3lzX2Nsa19mcmVxKHZvaWQpCit7CisJdTggaW5kZXggPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiBzeXNfY2xrX2FycmF5W2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRvX2J5cGFzc19kcGxsKHUzMiAqY29uc3QgYmFzZSkKK3sKKwlzdHJ1Y3QgZHBsbF9yZWdzICpkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7CisKKwljbHJzZXRiaXRzX2xlMzIoJmRwbGxfcmVncy0+Y21fY2xrbW9kZV9kcGxsLAorCQkJQ01fQ0xLTU9ERV9EUExMX0RQTExfRU5fTUFTSywKKwkJCURQTExfRU5fRkFTVF9SRUxPQ0tfQllQQVNTIDw8CisJCQlDTV9DTEtNT0RFX0RQTExfRU5fU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfYnlwYXNzKHUzMiAqY29uc3QgYmFzZSkKK3sKKwlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7CisKKwlpZiAoIXdhaXRfb25fdmFsdWUoU1RfRFBMTF9DTEtfTUFTSywgMCwgJmRwbGxfcmVncy0+Y21faWRsZXN0X2RwbGwsCisJCQkJTERFTEFZKSkgeworCQlwcmludGYoIkJ5cGFzc2luZyBEUExMIGZhaWxlZCAlcFxuIiwgYmFzZSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fbG9ja19kcGxsKHUzMiAqY29uc3QgYmFzZSkKK3sKKwlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7CisKKwljbHJzZXRiaXRzX2xlMzIoJmRwbGxfcmVncy0+Y21fY2xrbW9kZV9kcGxsLAorCQkgICAgICBDTV9DTEtNT0RFX0RQTExfRFBMTF9FTl9NQVNLLAorCQkgICAgICBEUExMX0VOX0xPQ0sgPDwgQ01fQ0xLTU9ERV9EUExMX0VOX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2xvY2sodTMyICpjb25zdCBiYXNlKQoreworCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKKworCWlmICghd2FpdF9vbl92YWx1ZShTVF9EUExMX0NMS19NQVNLLCBTVF9EUExMX0NMS19NQVNLLAorCQkmZHBsbF9yZWdzLT5jbV9pZGxlc3RfZHBsbCwgTERFTEFZKSkgeworCQlwcmludGYoIkRQTEwgbG9ja2luZyBmYWlsZWQgZm9yICVwXG4iLCBiYXNlKTsKKwkJaGFuZygpOworCX0KK30KKworaW5saW5lIHUzMiBjaGVja19mb3JfbG9jayh1MzIgKmNvbnN0IGJhc2UpCit7CisJc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOworCXUzMiBsb2NrID0gcmVhZGwoJmRwbGxfcmVncy0+Y21faWRsZXN0X2RwbGwpICYgU1RfRFBMTF9DTEtfTUFTSzsKKworCXJldHVybiBsb2NrOworfQorCitzdGF0aWMgdm9pZCBkb19zZXR1cF9kcGxsKHUzMiAqY29uc3QgYmFzZSwgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXMsCisJCQkJdTggbG9jaywgY2hhciAqZHBsbCkKK3sKKwl1MzIgdGVtcCwgTSwgTjsKKwlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7CisKKwl0ZW1wID0gcmVhZGwoJmRwbGxfcmVncy0+Y21fY2xrc2VsX2RwbGwpOworCisJaWYgKGNoZWNrX2Zvcl9sb2NrKGJhc2UpKSB7CisJCS8qCisJCSAqIFRoZSBEcGxsIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGJ5IHJvbSBjb2RlIHVzaW5nIENILgorCQkgKiBDaGVjayBpZiBNLE4gYXJlIG1hdGNoaW5nIHdpdGggSWRlYWwgbm9taW5hbCBvcHAgdmFsdWVzLgorCQkgKiBJZiBtYXRjaGVzLCBza2lwIHRoZSByZXN0IG90aGVyd2lzZSByZWxvY2suCisJCSAqLworCQlNID0gKHRlbXAgJiBDTV9DTEtTRUxfRFBMTF9NX01BU0spID4+IENNX0NMS1NFTF9EUExMX01fU0hJRlQ7CisJCU4gPSAodGVtcCAmIENNX0NMS1NFTF9EUExMX05fTUFTSykgPj4gQ01fQ0xLU0VMX0RQTExfTl9TSElGVDsKKwkJaWYgKChNICE9IChwYXJhbXMtPm0pKSB8fCAoTiAhPSAocGFyYW1zLT5uKSkpIHsKKwkJCWRlYnVnKCJcbiAlcyBEcGxsIGxvY2tlZCwgYnV0IG5vdCBmb3IgaWRlYWwgTSA9ICVkLCIKKwkJCQkiTiA9ICVkIHZhbHVlcywgY3VycmVudCB2YWx1ZXMgYXJlIE0gPSAlZCwiCisJCQkJIk49ICVkIiAsIGRwbGwsIHBhcmFtcy0+bSwgcGFyYW1zLT5uLAorCQkJCU0sIE4pOworCQl9IGVsc2UgeworCQkJLyogRHBsbCBsb2NrZWQgd2l0aCBpZGVhbCB2YWx1ZXMgZm9yIG5vbWluYWwgb3Bwcy4gKi8KKwkJCWRlYnVnKCJcbiAlcyBEcGxsIGFscmVhZHkgbG9ja2VkIHdpdGggaWRlYWwiCisJCQkJCQkibm9taW5hbCBvcHAgdmFsdWVzIiwgZHBsbCk7CisJCQlnb3RvIHNldHVwX3Bvc3RfZGl2aWRlcnM7CisJCX0KKwl9CisKKwlieXBhc3NfZHBsbChiYXNlKTsKKworCS8qIFNldCBNICYgTiAqLworCXRlbXAgJj0gfkNNX0NMS1NFTF9EUExMX01fTUFTSzsKKwl0ZW1wIHw9IChwYXJhbXMtPm0gPDwgQ01fQ0xLU0VMX0RQTExfTV9TSElGVCkgJiBDTV9DTEtTRUxfRFBMTF9NX01BU0s7CisKKwl0ZW1wICY9IH5DTV9DTEtTRUxfRFBMTF9OX01BU0s7CisJdGVtcCB8PSAocGFyYW1zLT5uIDw8IENNX0NMS1NFTF9EUExMX05fU0hJRlQpICYgQ01fQ0xLU0VMX0RQTExfTl9NQVNLOworCisJd3JpdGVsKHRlbXAsICZkcGxsX3JlZ3MtPmNtX2Nsa3NlbF9kcGxsKTsKKworCS8qIExvY2sgKi8KKwlpZiAobG9jaykKKwkJZG9fbG9ja19kcGxsKGJhc2UpOworCitzZXR1cF9wb3N0X2RpdmlkZXJzOgorCXNldHVwX3Bvc3RfZGl2aWRlcnMoYmFzZSwgcGFyYW1zKTsKKworCS8qIFdhaXQgdGlsbCB0aGUgRFBMTCBsb2NrcyAqLworCWlmIChsb2NrKQorCQl3YWl0X2Zvcl9sb2NrKGJhc2UpOworfQorCit1MzIgb21hcF9kZHJfY2xrKHZvaWQpCit7CisJdTMyIGRkcl9jbGssIHN5c19jbGtfa2h6LCBvbWFwX3JldiwgZGl2aWRlcjsKKwljb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmNvcmVfZHBsbF9wYXJhbXM7CisKKwlvbWFwX3JldiA9IG9tYXBfcmV2aXNpb24oKTsKKwlzeXNfY2xrX2toeiA9IGdldF9zeXNfY2xrX2ZyZXEoKSAvIDEwMDA7CisKKwljb3JlX2RwbGxfcGFyYW1zID0gZ2V0X2NvcmVfZHBsbF9wYXJhbXMoKTsKKworCWRlYnVnKCJzeXNfY2xrICVkXG4gIiwgc3lzX2Nsa19raHogKiAxMDAwKTsKKworCS8qIEZpbmQgQ29yZSBEUExMIGxvY2tlZCBmcmVxdWVuY3kgZmlyc3QgKi8KKwlkZHJfY2xrID0gc3lzX2Nsa19raHogKiAyICogY29yZV9kcGxsX3BhcmFtcy0+bSAvCisJCQkoY29yZV9kcGxsX3BhcmFtcy0+biArIDEpOworCisJaWYgKG9tYXBfcmV2IDwgT01BUDU0MzBfRVMxXzApIHsKKwkJLyoKKwkJICogRERSIGZyZXF1ZW5jeSBpcyBQSFlfUk9PVF9DTEsvMgorCQkgKiBQSFlfUk9PVF9DTEsgPSBGZHBsbC8yL00yCisJCSAqLworCQlkaXZpZGVyID0gNDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBERFIgZnJlcXVlbmN5IGlzIFBIWV9ST09UX0NMSworCQkgKiBQSFlfUk9PVF9DTEsgPSBGZHBsbC8yL00yCisJCSAqLworCQlkaXZpZGVyID0gMjsKKwl9CisKKwlkZHJfY2xrID0gZGRyX2NsayAvIGRpdmlkZXIgLyBjb3JlX2RwbGxfcGFyYW1zLT5tMjsKKwlkZHJfY2xrICo9IDEwMDA7CS8qIGNvbnZlcnQgdG8gSHogKi8KKwlkZWJ1ZygiZGRyX2NsayAlZFxuICIsIGRkcl9jbGspOworCisJcmV0dXJuIGRkcl9jbGs7Cit9CisKKy8qCisgKiBMb2NrIE1QVSBkcGxsCisgKgorICogUmVzdWx0aW5nIE1QVSBmcmVxdWVuY2llczoKKyAqIDQ0MzAgRVMxLjAJOiA2MDAgTUh6CisgKiA0NDMwIEVTMi54CTogNzkyIE1IeiAoT1BQIFR1cmJvKQorICogNDQ2MAkJOiA5MjAgTUh6IChPUFAgVHVyYm8pIC0gRENDIGRpc2FibGVkCisgKi8KK3ZvaWQgY29uZmlndXJlX21wdV9kcGxsKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7CisJc3RydWN0IGRwbGxfcmVncyAqbXB1X2RwbGxfcmVnczsKKwl1MzIgb21hcF9yZXY7CisJb21hcF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7CisKKwkvKgorCSAqIERDQyBhbmQgY2xvY2sgZGl2aWRlciBzZXR0aW5ncyBmb3IgNDQ2MC4KKwkgKiBEQ0MgaXMgcmVxdWlyZWQsIGlmIG1vcmUgdGhhbiBhIGNlcnRhaW4gZnJlcXVlbmN5IGlzIHJlcXVpcmVkLgorCSAqIEZvciwgNDQ2MCA+IDFHSFouCisJICogICAgIDU0MzAgPiAxLjRHSFouCisJICovCisJaWYgKChvbWFwX3JldiA+PSBPTUFQNDQ2MF9FUzFfMCkgJiYgKG9tYXBfcmV2IDwgT01BUDU0MzBfRVMxXzApKSB7CisJCW1wdV9kcGxsX3JlZ3MgPQorCQkJKHN0cnVjdCBkcGxsX3JlZ3MgKikmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX21wdTsKKwkJYnlwYXNzX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9tcHUpOworCQljbHJiaXRzX2xlMzIoJnByY20tPmNtX21wdV9tcHVfY2xrY3RybCwKKwkJCU1QVV9DTEtDVFJMX0NMS1NFTF9FTUlGX0RJVl9NT0RFX01BU0spOworCQlzZXRiaXRzX2xlMzIoJnByY20tPmNtX21wdV9tcHVfY2xrY3RybCwKKwkJCU1QVV9DTEtDVFJMX0NMS1NFTF9BQkVfRElWX01PREVfTUFTSyk7CisJCWNscmJpdHNfbGUzMigmbXB1X2RwbGxfcmVncy0+Y21fY2xrc2VsX2RwbGwsCisJCQlDTV9DTEtTRUxfRENDX0VOX01BU0spOworCX0KKworCXBhcmFtcyA9IGdldF9tcHVfZHBsbF9wYXJhbXMoKTsKKworCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9tcHUsIHBhcmFtcywgRFBMTF9MT0NLLCAibXB1Iik7CisJZGVidWcoIk1QVSBEUExMIGxvY2tlZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2RwbGxzKHZvaWQpCit7CisJdTMyIHN5c2Nsa19pbmQsIHRlbXA7CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7CisJZGVidWcoInNldHVwX2RwbGxzXG4iKTsKKworCXN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCisJLyogQ09SRSBkcGxsICovCisJcGFyYW1zID0gZ2V0X2NvcmVfZHBsbF9wYXJhbXMoKTsJLyogZGVmYXVsdCAtIHNhZmVzdCAqLworCS8qCisJICogRG8gbm90IGxvY2sgdGhlIGNvcmUgRFBMTCBub3cuIEp1c3Qgc2V0IGl0IHVwLgorCSAqIENvcmUgRFBMTCB3aWxsIGJlIGxvY2tlZCBhZnRlciBzZXR0aW5nIHVwIEVNSUYKKwkgKiB1c2luZyB0aGUgRlJFUV9VUERBVEUgbWV0aG9kKGZyZXFfdXBkYXRlX2NvcmUoKSkKKwkgKi8KKwlkb19zZXR1cF9kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfY29yZSwgcGFyYW1zLCBEUExMX05PX0xPQ0ssCisJCQkJCQkJCSJjb3JlIik7CisJLyogU2V0IHRoZSByYXRpb3MgZm9yIENPUkVfQ0xLLCBMM19DTEssIEw0X0NMSyAqLworCXRlbXAgPSAoQ0xLU0VMX0NPUkVfWDJfRElWXzEgPDwgQ0xLU0VMX0NPUkVfU0hJRlQpIHwKKwkgICAgKENMS1NFTF9MM19DT1JFX0RJVl8yIDw8IENMS1NFTF9MM19TSElGVCkgfAorCSAgICAoQ0xLU0VMX0w0X0wzX0RJVl8yIDw8IENMS1NFTF9MNF9TSElGVCk7CisJd3JpdGVsKHRlbXAsICZwcmNtLT5jbV9jbGtzZWxfY29yZSk7CisJZGVidWcoIkNvcmUgRFBMTCBjb25maWd1cmVkXG4iKTsKKworCS8qIGxvY2sgUEVSIGRwbGwgKi8KKwlwYXJhbXMgPSBnZXRfcGVyX2RwbGxfcGFyYW1zKCk7CisJZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX3BlciwKKwkJCXBhcmFtcywgRFBMTF9MT0NLLCAicGVyIik7CisJZGVidWcoIlBFUiBEUExMIGxvY2tlZFxuIik7CisKKwkvKiBNUFUgZHBsbCAqLworCWNvbmZpZ3VyZV9tcHVfZHBsbCgpOworfQorCisjaWZkZWYgQ09ORklHX1NZU19DTE9DS1NfRU5BQkxFX0FMTAorc3RhdGljIHZvaWQgc2V0dXBfbm9uX2Vzc2VudGlhbF9kcGxscyh2b2lkKQoreworCXUzMiBzeXNfY2xrX2toeiwgYWJlX3JlZl9jbGs7CisJdTMyIHN5c2Nsa19pbmQsIHNkX2RpdiwgbnVtLCBkZW47CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7CisKKwlzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlzeXNfY2xrX2toeiA9IGdldF9zeXNfY2xrX2ZyZXEoKSAvIDEwMDA7CisKKwkvKiBJVkEgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2J5cGNsa19kcGxsX2l2YSwKKwkJQ01fQllQQ0xLX0RQTExfSVZBX0NMS1NFTF9NQVNLLCBEUExMX0lWQV9DTEtTRUxfQ09SRV9YMl9ESVZfMik7CisKKwlwYXJhbXMgPSBnZXRfaXZhX2RwbGxfcGFyYW1zKCk7CisJZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2l2YSwgcGFyYW1zLCBEUExMX0xPQ0ssICJpdmEiKTsKKworCS8qCisJICogVVNCOgorCSAqIFVTQiBkcGxsIGlzIEotdHlwZS4gTmVlZCB0byBzZXQgRFBMTF9TRF9ESVYgZm9yIGppdHRlciBjb3JyZWN0aW9uCisJICogRFBMTF9TRF9ESVYgPSBDRUlMSU5HIChbRFBMTF9NVUxULyhEUExMX0RJVisxKV0qIENMS0lOUCAvIDI1MCkKKwkgKiAgICAgIC0gd2hlcmUgQ0xLSU5QIGlzIHN5c19jbGsgaW4gTUh6CisJICogVXNlIENMS0lOUCBpbiBLSHogYW5kIGFkanVzdCB0aGUgZGVub21pbmF0b3IgYWNjb3JkaW5nbHkgc28KKwkgKiB0aGF0IHdlIGhhdmUgZW5vdWdoIGFjY3VyYWN5IGFuZCBhdCB0aGUgc2FtZSB0aW1lIG5vIG92ZXJmbG93CisJICovCisJcGFyYW1zID0gZ2V0X3VzYl9kcGxsX3BhcmFtcygpOworCW51bSA9IHBhcmFtcy0+bSAqIHN5c19jbGtfa2h6OworCWRlbiA9IChwYXJhbXMtPm4gKyAxKSAqIDI1MCAqIDEwMDA7CisJbnVtICs9IGRlbiAtIDE7CisJc2RfZGl2ID0gbnVtIC8gZGVuOworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2xrc2VsX2RwbGxfdXNiLAorCQkJQ01fQ0xLU0VMX0RQTExfRFBMTF9TRF9ESVZfTUFTSywKKwkJCXNkX2RpdiA8PCBDTV9DTEtTRUxfRFBMTF9EUExMX1NEX0RJVl9TSElGVCk7CisKKwkvKiBOb3cgc2V0dXAgdGhlIGRwbGwgd2l0aCB0aGUgcmVndWxhciBmdW5jdGlvbiAqLworCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF91c2IsIHBhcmFtcywgRFBMTF9MT0NLLCAidXNiIik7CisKKwkvKiBDb25maWd1cmUgQUJFIGRwbGwgKi8KKwlwYXJhbXMgPSBnZXRfYWJlX2RwbGxfcGFyYW1zKCk7CisjaWZkZWYgQ09ORklHX1NZU19PTUFQX0FCRV9TWVNDSworCWFiZV9yZWZfY2xrID0gQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9TWVNDTEs7CisjZWxzZQorCWFiZV9yZWZfY2xrID0gQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF8zMktDTEs7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGVuYWJsZSBzb21lIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhY2hpZXZlCisJICogMTk2LjYwOE1IeiBmcm9tIDMyNzY4IEh6CisJICovCisJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfYWJlLAorCQkJQ01fQ0xLTU9ERV9EUExMX0RSSUZUR1VBUkRfRU5fTUFTS3wKKwkJCUNNX0NMS01PREVfRFBMTF9SRUxPQ0tfUkFNUF9FTl9NQVNLfAorCQkJQ01fQ0xLTU9ERV9EUExMX0xQTU9ERV9FTl9NQVNLfAorCQkJQ01fQ0xLTU9ERV9EUExMX1JFR000WEVOX01BU0spOworCS8qIFNwZW5kIDQgUkVGQ0xLIGN5Y2xlcyBhdCBlYWNoIHN0YWdlICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfYWJlLAorCQkJQ01fQ0xLTU9ERV9EUExMX1JBTVBfUkFURV9NQVNLLAorCQkJMSA8PCBDTV9DTEtNT0RFX0RQTExfUkFNUF9SQVRFX1NISUZUKTsKKyNlbmRpZgorCisJLyogU2VsZWN0IHRoZSByaWdodCByZWZlcmVuY2UgY2xrICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9hYmVfcGxsX3JlZl9jbGtzZWwsCisJCQlDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX01BU0ssCisJCQlhYmVfcmVmX2NsayA8PCBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX1NISUZUKTsKKwkvKiBMb2NrIHRoZSBkcGxsICovCisJZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2FiZSwgcGFyYW1zLCBEUExMX0xPQ0ssICJhYmUiKTsKK30KKyNlbmRpZgorCit2b2lkIGRvX3NjYWxlX3RwczYyMzYxKHUzMiByZWcsIHUzMiB2b2x0X212KQoreworCXUzMiB0ZW1wLCBzdGVwOworCisJc3RlcCA9IHZvbHRfbXYgLSBUUFM2MjM2MV9CQVNFX1ZPTFRfTVY7CisJc3RlcCAvPSAxMDsKKworCS8qCisJICogU2VsZWN0IFNFVDEgaW4gVFBTNjIzNjE6CisJICogVlNFTDEgaXMgZ3JvdW5kZWQgb24gYm9hcmQuIFNvIHRoZSBmb2xsb3dpbmcgc2VsZWN0cworCSAqIFZTRUwxID0gMCBhbmQgVlNFTDAgPSAxCisJICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRQUzYyMzYxX1ZTRUwwX0dQSU8sIDApOworCWdwaW9fc2V0X3ZhbHVlKFRQUzYyMzYxX1ZTRUwwX0dQSU8sIDEpOworCisJdGVtcCA9IFRQUzYyMzYxX0kyQ19TTEFWRV9BRERSIHwKKwkgICAgKHJlZyA8PCBQUk1fVkNfVkFMX0JZUEFTU19SRUdBRERSX1NISUZUKSB8CisJICAgIChzdGVwIDw8IFBSTV9WQ19WQUxfQllQQVNTX0RBVEFfU0hJRlQpIHwKKwkgICAgUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklUOworCWRlYnVnKCJkb19zY2FsZV90cHM2MjM2MTogdm9sdCAtICVkIHN0ZXAgLSAweCV4XG4iLCB2b2x0X212LCBzdGVwKTsKKworCXdyaXRlbCh0ZW1wLCAmcHJjbS0+cHJtX3ZjX3ZhbF9ieXBhc3MpOworCWlmICghd2FpdF9vbl92YWx1ZShQUk1fVkNfVkFMX0JZUEFTU19WQUxJRF9CSVQsIDAsCisJCQkJJnByY20tPnBybV92Y192YWxfYnlwYXNzLCBMREVMQVkpKSB7CisJCXB1dHMoIlNjYWxpbmcgdm9sdGFnZSBmYWlsZWQgZm9yIHZkZF9tcHUgZnJvbSBUUFNcbiIpOworCX0KK30KKwordm9pZCBkb19zY2FsZV92Y29yZSh1MzIgdmNvcmVfcmVnLCB1MzIgdm9sdF9tdikKK3sKKwl1MzIgdGVtcCwgb2Zmc2V0X2NvZGU7CisJdTMyIHN0ZXAgPSAxMjY2MDsgLyogMTIuNjYgbVYgcmVwcmVzZW50ZWQgaW4gdVYgKi8KKwl1MzIgb2Zmc2V0ID0gdm9sdF9tdjsKKworCS8qIGNvbnZlcnQgdG8gdVYgZm9yIGJldHRlciBhY2N1cmFjeSBpbiB0aGUgY2FsY3VsYXRpb25zICovCisJb2Zmc2V0ICo9IDEwMDA7CisKKwlpZiAob21hcF9yZXZpc2lvbigpID09IE9NQVA0NDMwX0VTMV8wKQorCQlvZmZzZXQgLT0gUEhPRU5JWF9TTVBTX0JBU0VfVk9MVF9TVERfTU9ERV9VVjsKKwllbHNlCisJCW9mZnNldCAtPSBQSE9FTklYX1NNUFNfQkFTRV9WT0xUX1NURF9NT0RFX1dJVEhfT0ZGU0VUX1VWOworCisJb2Zmc2V0X2NvZGUgPSAob2Zmc2V0ICsgc3RlcCAtIDEpIC8gc3RlcDsKKwkvKiBUaGUgY29kZSBzdGFydHMgYXQgMSBub3QgMCAqLworCW9mZnNldF9jb2RlKys7CisKKwlkZWJ1ZygiZG9fc2NhbGVfdmNvcmU6IHZvbHQgLSAlZCBvZmZzZXRfY29kZSAtIDB4JXhcbiIsIHZvbHRfbXYsCisJCW9mZnNldF9jb2RlKTsKKworCXRlbXAgPSBTTVBTX0kyQ19TTEFWRV9BRERSIHwKKwkgICAgKHZjb3JlX3JlZyA8PCBQUk1fVkNfVkFMX0JZUEFTU19SRUdBRERSX1NISUZUKSB8CisJICAgIChvZmZzZXRfY29kZSA8PCBQUk1fVkNfVkFMX0JZUEFTU19EQVRBX1NISUZUKSB8CisJICAgIFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVDsKKwl3cml0ZWwodGVtcCwgJnByY20tPnBybV92Y192YWxfYnlwYXNzKTsKKwlpZiAoIXdhaXRfb25fdmFsdWUoUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklULCAwLAorCQkJCSZwcmNtLT5wcm1fdmNfdmFsX2J5cGFzcywgTERFTEFZKSkgeworCQlwcmludGYoIlNjYWxpbmcgdm9sdGFnZSBmYWlsZWQgZm9yIDB4JXhcbiIsIHZjb3JlX3JlZyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Nsb2NrX2RvbWFpbih1MzIgKmNvbnN0IGNsa2N0cmxfcmVnLCB1MzIgZW5hYmxlX21vZGUpCit7CisJY2xyc2V0Yml0c19sZTMyKGNsa2N0cmxfcmVnLCBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9NQVNLLAorCQkJZW5hYmxlX21vZGUgPDwgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU0hJRlQpOworCWRlYnVnKCJFbmFibGUgY2xvY2sgZG9tYWluIC0gJXBcbiIsIGNsa2N0cmxfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2Nsa19lbmFibGUodTMyICpjbGtjdHJsX2FkZHIpCit7CisJdTMyIGNsa2N0cmwsIGlkbGVzdCA9IE1PRFVMRV9DTEtDVFJMX0lETEVTVF9ESVNBQkxFRDsKKwl1MzIgYm91bmQgPSBMREVMQVk7CisKKwl3aGlsZSAoKGlkbGVzdCA9PSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfRElTQUJMRUQpIHx8CisJCShpZGxlc3QgPT0gTU9EVUxFX0NMS0NUUkxfSURMRVNUX1RSQU5TSVRJT05JTkcpKSB7CisKKwkJY2xrY3RybCA9IHJlYWRsKGNsa2N0cmxfYWRkcik7CisJCWlkbGVzdCA9IChjbGtjdHJsICYgTU9EVUxFX0NMS0NUUkxfSURMRVNUX01BU0spID4+CisJCQkgTU9EVUxFX0NMS0NUUkxfSURMRVNUX1NISUZUOworCQlpZiAoLS1ib3VuZCA9PSAwKSB7CisJCQlwcmludGYoIkNsb2NrIGVuYWJsZSBmYWlsZWQgZm9yIDB4JXAgaWRsZXN0IDB4JXhcbiIsCisJCQkJY2xrY3RybF9hZGRyLCBjbGtjdHJsKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9jbG9ja19tb2R1bGUodTMyICpjb25zdCBjbGtjdHJsX2FkZHIsIHUzMiBlbmFibGVfbW9kZSwKKwkJCQl1MzIgd2FpdF9mb3JfZW5hYmxlKQoreworCWNscnNldGJpdHNfbGUzMihjbGtjdHJsX2FkZHIsIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKKwkJCWVuYWJsZV9tb2RlIDw8IE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOworCWRlYnVnKCJFbmFibGUgY2xvY2sgbW9kdWxlIC0gJXBcbiIsIGNsa2N0cmxfYWRkcik7CisJaWYgKHdhaXRfZm9yX2VuYWJsZSkKKwkJd2FpdF9mb3JfY2xrX2VuYWJsZShjbGtjdHJsX2FkZHIpOworfQorCit2b2lkIGZyZXFfdXBkYXRlX2NvcmUodm9pZCkKK3sKKwl1MzIgZnJlcV9jb25maWcxID0gMDsKKwljb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmNvcmVfZHBsbF9wYXJhbXM7CisKKwljb3JlX2RwbGxfcGFyYW1zID0gZ2V0X2NvcmVfZHBsbF9wYXJhbXMoKTsKKwkvKiBQdXQgRU1JRiBjbG9jayBkb21haW4gaW4gc3cgd2FrZXVwIG1vZGUgKi8KKwllbmFibGVfY2xvY2tfZG9tYWluKCZwcmNtLT5jbV9tZW1pZl9jbGtzdGN0cmwsCisJCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU1dfV0tVUCk7CisJd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8xX2Nsa2N0cmwpOworCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsKTsKKworCWZyZXFfY29uZmlnMSA9IFNIQURPV19GUkVRX0NPTkZJRzFfRlJFUV9VUERBVEVfTUFTSyB8CisJICAgIFNIQURPV19GUkVRX0NPTkZJRzFfRExMX1JFU0VUX01BU0s7CisKKwlmcmVxX2NvbmZpZzEgfD0gKERQTExfRU5fTE9DSyA8PCBTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fU0hJRlQpICYKKwkJCQlTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fTUFTSzsKKworCWZyZXFfY29uZmlnMSB8PSAoY29yZV9kcGxsX3BhcmFtcy0+bTIgPDwKKwkJCVNIQURPV19GUkVRX0NPTkZJRzFfTTJfRElWX1NISUZUKSAmCisJCQlTSEFET1dfRlJFUV9DT05GSUcxX00yX0RJVl9NQVNLOworCisJd3JpdGVsKGZyZXFfY29uZmlnMSwgJnByY20tPmNtX3NoYWRvd19mcmVxX2NvbmZpZzEpOworCWlmICghd2FpdF9vbl92YWx1ZShTSEFET1dfRlJFUV9DT05GSUcxX0ZSRVFfVVBEQVRFX01BU0ssIDAsCisJCQkJJnByY20tPmNtX3NoYWRvd19mcmVxX2NvbmZpZzEsIExERUxBWSkpIHsKKwkJcHV0cygiRlJFUSBVUERBVEUgcHJvY2VkdXJlIGZhaWxlZCEhIik7CisJCWhhbmcoKTsKKwl9CisKKwkvKiBQdXQgRU1JRiBjbG9jayBkb21haW4gYmFjayBpbiBodyBhdXRvIG1vZGUgKi8KKwllbmFibGVfY2xvY2tfZG9tYWluKCZwcmNtLT5jbV9tZW1pZl9jbGtzdGN0cmwsCisJCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTyk7CisJd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8xX2Nsa2N0cmwpOworCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsKTsKK30KKwordm9pZCBieXBhc3NfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCit7CisJZG9fYnlwYXNzX2RwbGwoYmFzZSk7CisJd2FpdF9mb3JfYnlwYXNzKGJhc2UpOworfQorCit2b2lkIGxvY2tfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCit7CisJZG9fbG9ja19kcGxsKGJhc2UpOworCXdhaXRfZm9yX2xvY2soYmFzZSk7Cit9CisKK3ZvaWQgc2V0dXBfY2xvY2tzX2Zvcl9jb25zb2xlKHZvaWQpCit7CisJLyogRG8gbm90IGFkZCBhbnkgc3BsX2RlYnVnIHByaW50cyBpbiB0aGlzIGZ1bmN0aW9uICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl9jbGtzdGN0cmwsIENEX0NMS0NUUkxfQ0xLVFJDVFJMX01BU0ssCisJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19XS1VQIDw8CisJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TSElGVCk7CisKKwkvKiBFbmFibGUgYWxsIFVBUlRzIC0gY29uc29sZSB3aWxsIGJlIG9uIG9uZSBvZiB0aGVtICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0MV9jbGtjdHJsLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX3VhcnQyX2Nsa2N0cmwsCisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOIDw8CisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKKworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfdWFydDNfY2xrY3RybCwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4gPDwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOworCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0M19jbGtjdHJsLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX2Nsa3N0Y3RybCwgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTUFTSywKKwkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8gPDwKKwkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX1NISUZUKTsKK30KKwordm9pZCBzZXR1cF9zcmkyYyh2b2lkKQoreworCXUzMiBzeXNfY2xrX2toeiwgY3ljbGVzX2hpLCBjeWNsZXNfbG93LCB0ZW1wOworCisJc3lzX2Nsa19raHogPSBnZXRfc3lzX2Nsa19mcmVxKCkgLyAxMDAwOworCisJLyoKKwkgKiBTZXR1cCB0aGUgZGVkaWNhdGVkIEkyQyBjb250cm9sbGVyIGZvciBWb2x0YWdlIENvbnRyb2wKKwkgKiBJMkMgY2xrIC0gaGlnaCBwZXJpb2QgNDAlIGxvdyBwZXJpb2QgNjAlCisJICovCisJY3ljbGVzX2hpID0gc3lzX2Nsa19raHogKiA0IC8gUFJNX1ZDX0kyQ19DSEFOTkVMX0ZSRVFfS0haIC8gMTA7CisJY3ljbGVzX2xvdyA9IHN5c19jbGtfa2h6ICogNiAvIFBSTV9WQ19JMkNfQ0hBTk5FTF9GUkVRX0tIWiAvIDEwOworCS8qIHZhbHVlcyB0byBiZSBzZXQgaW4gcmVnaXN0ZXIgLSBsZXNzIGJ5IDUgJiA3IHJlc3BlY3RpdmVseSAqLworCWN5Y2xlc19oaSAtPSA1OworCWN5Y2xlc19sb3cgLT0gNzsKKwl0ZW1wID0gKGN5Y2xlc19oaSA8PCBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMSF9TSElGVCkgfAorCSAgICAgICAoY3ljbGVzX2xvdyA8PCBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMTF9TSElGVCk7CisJd3JpdGVsKHRlbXAsICZwcmNtLT5wcm1fdmNfY2ZnX2kyY19jbGspOworCisJLyogRGlzYWJsZSBoaWdoIHNwZWVkIG1vZGUgYW5kIGFsbCBhZHZhbmNlZCBmZWF0dXJlcyAqLworCXdyaXRlbCgweDAsICZwcmNtLT5wcm1fdmNfY2ZnX2kyY19tb2RlKTsKK30KKwordm9pZCBkb19lbmFibGVfY2xvY2tzKHUzMiAqY29uc3QgKmNsa19kb21haW5zLAorCQkJICAgIHUzMiAqY29uc3QgKmNsa19tb2R1bGVzX2h3X2F1dG8sCisJCQkgICAgdTMyICpjb25zdCAqY2xrX21vZHVsZXNfZXhwbGljaXRfZW4sCisJCQkgICAgdTggd2FpdF9mb3JfZW5hYmxlKQoreworCXUzMiBpLCBtYXggPSAxMDA7CisKKwkvKiBQdXQgdGhlIGNsb2NrIGRvbWFpbnMgaW4gU1dfV0tVUCBtb2RlICovCisJZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19kb21haW5zW2ldOyBpKyspIHsKKwkJZW5hYmxlX2Nsb2NrX2RvbWFpbihjbGtfZG9tYWluc1tpXSwKKwkJCQkgICAgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU1dfV0tVUCk7CisJfQorCisJLyogQ2xvY2sgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgcHV0IGluIEhXX0FVVE8gKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX21vZHVsZXNfaHdfYXV0b1tpXTsgaSsrKSB7CisJCWVuYWJsZV9jbG9ja19tb2R1bGUoY2xrX21vZHVsZXNfaHdfYXV0b1tpXSwKKwkJCQkgICAgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9IV19BVVRPLAorCQkJCSAgICB3YWl0X2Zvcl9lbmFibGUpOworCX07CisKKwkvKiBDbG9jayBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBwdXQgaW4gU1dfRVhQTElDSVRfRU4gbW9kZSAqLworCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfbW9kdWxlc19leHBsaWNpdF9lbltpXTsgaSsrKSB7CisJCWVuYWJsZV9jbG9ja19tb2R1bGUoY2xrX21vZHVsZXNfZXhwbGljaXRfZW5baV0sCisJCQkJICAgIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4sCisJCQkJICAgIHdhaXRfZm9yX2VuYWJsZSk7CisJfTsKKworCS8qIFB1dCB0aGUgY2xvY2sgZG9tYWlucyBpbiBIV19BVVRPIG1vZGUgbm93ICovCisJZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19kb21haW5zW2ldOyBpKyspIHsKKwkJZW5hYmxlX2Nsb2NrX2RvbWFpbihjbGtfZG9tYWluc1tpXSwKKwkJCQkgICAgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTyk7CisJfQorfQorCit2b2lkIHByY21faW5pdCh2b2lkKQoreworCXN3aXRjaCAob21hcF9od19pbml0X2NvbnRleHQoKSkgeworCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfU1BMOgorCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfRlJPTV9OT1I6CisJY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9DSDoKKwkJZW5hYmxlX2Jhc2ljX2Nsb2NrcygpOworCQlzY2FsZV92Y29yZXMoKTsKKwkJc2V0dXBfZHBsbHMoKTsKKyNpZmRlZiBDT05GSUdfU1lTX0NMT0NLU19FTkFCTEVfQUxMCisJCXNldHVwX25vbl9lc3NlbnRpYWxfZHBsbHMoKTsKKwkJZW5hYmxlX25vbl9lc3NlbnRpYWxfY2xvY2tzKCk7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKE9NQVBfSU5JVF9DT05URVhUX1NQTCAhPSBvbWFwX2h3X2luaXRfY29udGV4dCgpKQorCQllbmFibGVfYmFzaWNfdWJvb3RfY2xvY2tzKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vZW1pZi1jb21tb24uYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9lbWlmLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMDNiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vZW1pZi1jb21tb24uYwpAQCAtMCwwICsxLDExNDAgQEAKKy8qCisgKiBFTUlGIHByb2dyYW1taW5nCisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2VtaWYuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9ja3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vb21hcF9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vdXRpbHMuaD4KKworaW5saW5lIHUzMiBlbWlmX251bSh1MzIgYmFzZSkKK3sKKwlpZiAoYmFzZSA9PSBFTUlGMV9CQVNFKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChiYXNlID09IEVNSUYyX0JBU0UpCisJCXJldHVybiAyOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSB1MzIgZ2V0X21yKHUzMiBiYXNlLCB1MzIgY3MsIHUzMiBtcl9hZGRyKQoreworCXUzMiBtcjsKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJbXJfYWRkciB8PSBjcyA8PCBFTUlGX1JFR19DU19TSElGVDsKKwl3cml0ZWwobXJfYWRkciwgJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2NmZyk7CisJaWYgKG9tYXBfcmV2aXNpb24oKSA9PSBPTUFQNDQzMF9FUzJfMCkKKwkJbXIgPSByZWFkbCgmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YV9lczIpOworCWVsc2UKKwkJbXIgPSByZWFkbCgmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YSk7CisJZGVidWcoImdldF9tcjogRU1JRiVkIGNzICVkIG1yICUwOHggdmFsIDB4JXhcbiIsIGVtaWZfbnVtKGJhc2UpLAorCSAgICAgIGNzLCBtcl9hZGRyLCBtcik7CisJcmV0dXJuIG1yOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21yKHUzMiBiYXNlLCB1MzIgY3MsIHUzMiBtcl9hZGRyLCB1MzIgbXJfdmFsKQoreworCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7CisKKwltcl9hZGRyIHw9IGNzIDw8IEVNSUZfUkVHX0NTX1NISUZUOworCXdyaXRlbChtcl9hZGRyLCAmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfY2ZnKTsKKwl3cml0ZWwobXJfdmFsLCAmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YSk7Cit9CisKK3ZvaWQgZW1pZl9yZXNldF9waHkodTMyIGJhc2UpCit7CisJc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKKwl1MzIgaW9kZnQ7CisKKwlpb2RmdCA9IHJlYWRsKCZlbWlmLT5lbWlmX2lvZGZ0X3RsZ2MpOworCWlvZGZ0IHw9IEVNSUZfUkVHX1JFU0VUX1BIWV9NQVNLOworCXdyaXRlbChpb2RmdCwgJmVtaWYtPmVtaWZfaW9kZnRfdGxnYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2xwZGRyMl9pbml0KHUzMiBiYXNlLCB1MzIgY3MpCit7CisJdTMyIG1yX2FkZHI7CisKKwkvKiBXYWl0IHRpbGwgZGV2aWNlIGF1dG8gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgKi8KKwl3aGlsZSAoZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIwKSAmIExQRERSMl9NUjBfREFJX01BU0spCisJCTsKKwlzZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjEwLCBNUjEwX1pRX1pRSU5JVCk7CisJLyoKKwkgKiB0WlFJTklUID0gMSB1cworCSAqIEVub3VnaCBsb29wcyBhc3N1bWluZyBhIG1heGltdW0gb2YgMkdIegorCSAqLworCXNkZWxheSgyMDAwKTsKKwlzZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjEsIE1SMV9CTF84X0JUX1NFUV9XUkFQX0VOX05XUl8zKTsKKwlzZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjE2LCBNUjE2X1JFRl9GVUxMX0FSUkFZKTsKKwkvKgorCSAqIEVuYWJsZSByZWZyZXNoIGFsb25nIHdpdGggd3JpdGluZyBNUjIKKwkgKiBFbmNvZGluZyBvZiBSTCBpbiBNUjIgaXMgKFJMIC0gMikKKwkgKi8KKwltcl9hZGRyID0gTFBERFIyX01SMiB8IEVNSUZfUkVHX1JFRlJFU0hfRU5fTUFTSzsKKwlzZXRfbXIoYmFzZSwgY3MsIG1yX2FkZHIsIFJMX0ZJTkFMIC0gMik7Cit9CisKK3N0YXRpYyB2b2lkIGxwZGRyMl9pbml0KHUzMiBiYXNlLCBjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7CisKKwkvKiBOb3QgTlZNICovCisJY2xyYml0c19sZTMyKCZlbWlmLT5lbWlmX2xwZGRyMl9udm1fY29uZmlnLCBFTUlGX1JFR19DUzFOVk1FTl9NQVNLKTsKKworCS8qCisJICogS2VlcCBSRUdfSU5JVFJFRl9ESVMgPSAxIHRvIHByZXZlbnQgcmUtaW5pdGlhbGl6YXRpb24gb2YgU0RSQU0KKwkgKiB3aGVuIEVNSUZfU0RSQU1fQ09ORklHIHJlZ2lzdGVyIGlzIHdyaXR0ZW4KKwkgKi8KKwlzZXRiaXRzX2xlMzIoJmVtaWYtPmVtaWZfc2RyYW1fcmVmX2N0cmwsIEVNSUZfUkVHX0lOSVRSRUZfRElTX01BU0spOworCisJLyoKKwkgKiBTZXQgdGhlIFNEUkFNX0NPTkZJRyBhbmQgUEhZX0NUUkwgZm9yIHRoZQorCSAqIHVuLWxvY2tlZCBmcmVxdWVuY3kgJiBkZWZhdWx0IFJMCisJICovCisJd3JpdGVsKHJlZ3MtPnNkcmFtX2NvbmZpZ19pbml0LCAmZW1pZi0+ZW1pZl9zZHJhbV9jb25maWcpOworCXdyaXRlbChyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQsICZlbWlmLT5lbWlmX2Rkcl9waHlfY3RybF8xKTsKKworCWRvX2xwZGRyMl9pbml0KGJhc2UsIENTMCk7CisJaWYgKHJlZ3MtPnNkcmFtX2NvbmZpZyAmIEVNSUZfUkVHX0VCQU5LX01BU0spCisJCWRvX2xwZGRyMl9pbml0KGJhc2UsIENTMSk7CisKKwl3cml0ZWwocmVncy0+c2RyYW1fY29uZmlnLCAmZW1pZi0+ZW1pZl9zZHJhbV9jb25maWcpOworCXdyaXRlbChyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xLCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMSk7CisKKwkvKiBFbmFibGUgcmVmcmVzaCBub3cgKi8KKwljbHJiaXRzX2xlMzIoJmVtaWYtPmVtaWZfc2RyYW1fcmVmX2N0cmwsIEVNSUZfUkVHX0lOSVRSRUZfRElTX01BU0spOworCit9CisKK3ZvaWQgZW1pZl91cGRhdGVfdGltaW5ncyh1MzIgYmFzZSwgY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJd3JpdGVsKHJlZ3MtPnJlZl9jdHJsLCAmZW1pZi0+ZW1pZl9zZHJhbV9yZWZfY3RybF9zaGR3KTsKKwl3cml0ZWwocmVncy0+c2RyYW1fdGltMSwgJmVtaWYtPmVtaWZfc2RyYW1fdGltXzFfc2hkdyk7CisJd3JpdGVsKHJlZ3MtPnNkcmFtX3RpbTIsICZlbWlmLT5lbWlmX3NkcmFtX3RpbV8yX3NoZHcpOworCXdyaXRlbChyZWdzLT5zZHJhbV90aW0zLCAmZW1pZi0+ZW1pZl9zZHJhbV90aW1fM19zaGR3KTsKKwlpZiAob21hcF9yZXZpc2lvbigpID09IE9NQVA0NDMwX0VTMV8wKSB7CisJCS8qIEVTMSBidWcgRU1JRiBzaG91bGQgYmUgaW4gZm9yY2UgaWRsZSBkdXJpbmcgZnJlcV91cGRhdGUgKi8KKwkJd3JpdGVsKDAsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmwpOworCX0gZWxzZSB7CisJCXdyaXRlbChFTUlGX1BXUl9NR01UX0NUUkwsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmwpOworCQl3cml0ZWwoRU1JRl9QV1JfTUdNVF9DVFJMX1NIRFcsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmxfc2hkdyk7CisJfQorCXdyaXRlbChyZWdzLT5yZWFkX2lkbGVfY3RybCwgJmVtaWYtPmVtaWZfcmVhZF9pZGxlY3RybF9zaGR3KTsKKwl3cml0ZWwocmVncy0+enFfY29uZmlnLCAmZW1pZi0+ZW1pZl96cV9jb25maWcpOworCXdyaXRlbChyZWdzLT50ZW1wX2FsZXJ0X2NvbmZpZywgJmVtaWYtPmVtaWZfdGVtcF9hbGVydF9jb25maWcpOworCXdyaXRlbChyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xLCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMV9zaGR3KTsKKworCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDU0MzBfRVMxXzApIHsKKwkJd3JpdGVsKEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTVBVXzVfTExfMCwKKwkJCSZlbWlmLT5lbWlmX2wzX2NvbmZpZyk7CisJfSBlbHNlIGlmIChvbWFwX3JldmlzaW9uKCkgPj0gT01BUDQ0NjBfRVMxXzApIHsKKwkJd3JpdGVsKEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTVBVXzNfTExfMCwKKwkJCSZlbWlmLT5lbWlmX2wzX2NvbmZpZyk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTExfMCwKKwkJCSZlbWlmLT5lbWlmX2wzX2NvbmZpZyk7CisJfQorfQorCisjaWZuZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCisjZGVmaW5lIHByaW50X3RpbWluZ19yZWcocmVnKSBkZWJ1ZygjcmVnIiAtIDB4JTA4eFxuIiwgKHJlZykpCisKKy8qCisgKiBPcmdhbml6YXRpb24gYW5kIHJlZnJlc2ggcmVxdWlyZW1lbnRzIGZvciBMUEREUjIgZGV2aWNlcyBvZiBkaWZmZXJlbnQKKyAqIHR5cGVzIGFuZCBkZW5zaXRpZXMuIERlcml2ZWQgZnJvbSBKRVNEMjA5LTIgc2VjdGlvbiAyLjQKKyAqLworY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nIGFkZHJlc3NpbmdfdGFibGVbXSA9IHsKKwkvKiBCYW5rcyB0UkVGSXgxMCAgICAgcm93eDMyLHJvd3gxNiAgICAgIGNvbHgzMixjb2x4MTYJZGVuc2l0eSAqLworCXtCQU5LUzQsIFRfUkVGSV8xNV82LCB7Uk9XXzEyLCBST1dfMTJ9LCB7Q09MXzcsIENPTF84fSB9LC8qNjRNICovCisJe0JBTktTNCwgVF9SRUZJXzE1XzYsIHtST1dfMTIsIFJPV18xMn0sIHtDT0xfOCwgQ09MXzl9IH0sLyoxMjhNICovCisJe0JBTktTNCwgVF9SRUZJXzdfOCwge1JPV18xMywgUk9XXzEzfSwge0NPTF84LCBDT0xfOX0gfSwvKjI1Nk0gKi8KKwl7QkFOS1M0LCBUX1JFRklfN184LCB7Uk9XXzEzLCBST1dfMTN9LCB7Q09MXzksIENPTF8xMH0gfSwvKjUxMk0gKi8KKwl7QkFOS1M4LCBUX1JFRklfN184LCB7Uk9XXzEzLCBST1dfMTN9LCB7Q09MXzksIENPTF8xMH0gfSwvKjFHUzQgKi8KKwl7QkFOS1M4LCBUX1JFRklfM185LCB7Uk9XXzE0LCBST1dfMTR9LCB7Q09MXzksIENPTF8xMH0gfSwvKjJHUzQgKi8KKwl7QkFOS1M4LCBUX1JFRklfM185LCB7Uk9XXzE0LCBST1dfMTR9LCB7Q09MXzEwLCBDT0xfMTF9IH0sLyo0RyAqLworCXtCQU5LUzgsIFRfUkVGSV8zXzksIHtST1dfMTUsIFJPV18xNX0sIHtDT0xfMTAsIENPTF8xMX0gfSwvKjhHICovCisJe0JBTktTNCwgVF9SRUZJXzdfOCwge1JPV18xNCwgUk9XXzE0fSwge0NPTF85LCBDT0xfMTB9IH0sLyoxR1MyICovCisJe0JBTktTNCwgVF9SRUZJXzNfOSwge1JPV18xNSwgUk9XXzE1fSwge0NPTF85LCBDT0xfMTB9IH0sLyoyR1MyICovCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwZGRyMl9kZW5zaXR5XzJfc2l6ZV9pbl9tYnl0ZXNbXSA9IHsKKwk4LAkJCS8qIDY0TWIgKi8KKwkxNiwJCQkvKiAxMjhNYiAqLworCTMyLAkJCS8qIDI1Nk1iICovCisJNjQsCQkJLyogNTEyTWIgKi8KKwkxMjgsCQkJLyogMUdiICAgKi8KKwkyNTYsCQkJLyogMkdiICAgKi8KKwk1MTIsCQkJLyogNEdiICAgKi8KKwkxMDI0LAkJCS8qIDhHYiAgICovCisJMjA0OCwJCQkvKiAxNkdiICAqLworCTQwOTYJCQkvKiAzMkdiICAqLworfTsKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgcGVyaW9kIG9mIEREUiBjbG9jayBmcm9tIGZyZXF1ZW5jeSB2YWx1ZSBhbmQgc2V0IHRoZQorICogZGVub21pbmF0b3IgYW5kIG51bWVyYXRvciBpbiBnbG9iYWwgdmFyaWFibGVzIGZvciBlYXN5IGFjY2VzcyBsYXRlcgorICovCitzdGF0aWMgdm9pZCBzZXRfZGRyX2Nsa19wZXJpb2QodTMyIGZyZXEpCit7CisJLyoKKwkgKiBwZXJpb2QgPSAxL2ZyZXEKKwkgKiBwZXJpb2RfaW5fbnMgPSAxMF45L2ZyZXEKKwkgKi8KKwkqVF9udW0gPSAxMDAwMDAwMDAwOworCSpUX2RlbiA9IGZyZXE7CisJY2FuY2VsX291dChUX251bSwgVF9kZW4sIDIwMCk7CisKK30KKworLyoKKyAqIENvbnZlcnQgdGltZSBpbiBuYW5vIHNlY29uZHMgdG8gbnVtYmVyIG9mIGN5Y2xlcyBvZiBERFIgY2xvY2sKKyAqLworc3RhdGljIGlubGluZSB1MzIgbnNfMl9jeWNsZXModTMyIG5zKQoreworCXJldHVybiAoKG5zICogKCpUX2RlbikpICsgKCpUX251bSkgLSAxKSAvICgqVF9udW0pOworfQorCisvKgorICogbnNfMl9jeWNsZXMgd2l0aCB0aGUgZGlmZmVyZW5jZSB0aGF0IHRoZSB0aW1lIHBhc3NlZCBpcyAyIHRpbWVzIHRoZSBhY3R1YWwKKyAqIHZhbHVlKHRvIGF2b2lkIGZyYWN0aW9ucykuIFRoZSBjeWNsZXMgcmV0dXJuZWQgaXMgZm9yIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZgorICogdGhlIHRpbWluZyBwYXJhbWV0ZXIKKyAqLworc3RhdGljIGlubGluZSB1MzIgbnNfeDJfMl9jeWNsZXModTMyIG5zKQoreworCXJldHVybiAoKG5zICogKCpUX2RlbikpICsgKCpUX251bSkgKiAyIC0gMSkgLyAoKCpUX251bSkgKiAyKTsKK30KKworLyoKKyAqIEZpbmQgYWRkcmVzc2luZyB0YWJsZSBpbmRleCBiYXNlZCBvbiB0aGUgZGV2aWNlJ3MgdHlwZShTMiBvciBTNCkgYW5kCisgKiBkZW5zaXR5CisgKi8KK3M4IGFkZHJlc3NpbmdfdGFibGVfaW5kZXgodTggdHlwZSwgdTggZGVuc2l0eSwgdTggd2lkdGgpCit7CisJdTggaW5kZXg7CisJaWYgKChkZW5zaXR5ID4gTFBERFIyX0RFTlNJVFlfOEdiKSB8fCAod2lkdGggPT0gTFBERFIyX0lPX1dJRFRIXzgpKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIExvb2sgYXQgdGhlIHdheSBBRERSX1RBQkxFX0lOREVYKiB2YWx1ZXMgaGF2ZSBiZWVuIGRlZmluZWQKKwkgKiBpbiBlbWlmLmggY29tcGFyZWQgdG8gTFBERFIyX0RFTlNJVFlfKiB2YWx1ZXMKKwkgKiBUaGUgdGFibGUgaXMgbGF5ZWQgb3V0IGluIHRoZSBpbmNyZWFzaW5nIG9yZGVyIG9mIGRlbnNpdHkKKwkgKiAoaWdub3JpbmcgdHlwZSkuIFRoZSBleGNlcHRpb25zIDFHUzIgYW5kIDJHUzIgaGF2ZSBiZWVuIHBsYWNlZAorCSAqIGF0IHRoZSBlbmQKKwkgKi8KKwlpZiAoKHR5cGUgPT0gTFBERFIyX1RZUEVfUzIpICYmIChkZW5zaXR5ID09IExQRERSMl9ERU5TSVRZXzFHYikpCisJCWluZGV4ID0gQUREUl9UQUJMRV9JTkRFWDFHUzI7CisJZWxzZSBpZiAoKHR5cGUgPT0gTFBERFIyX1RZUEVfUzIpICYmIChkZW5zaXR5ID09IExQRERSMl9ERU5TSVRZXzJHYikpCisJCWluZGV4ID0gQUREUl9UQUJMRV9JTkRFWDJHUzI7CisJZWxzZQorCQlpbmRleCA9IGRlbnNpdHk7CisKKwlkZWJ1ZygiZW1pZjogYWRkcmVzc2luZyB0YWJsZSBpbmRleCAlZFxuIiwgaW5kZXgpOworCisJcmV0dXJuIGluZGV4OworfQorCisvKgorICogRmluZCB0aGUgdGhlIHJpZ2h0IHRpbWluZyB0YWJsZSBmcm9tIHRoZSBhcnJheSBvZiB0aW1pbmcKKyAqIHRhYmxlcyBvZiB0aGUgZGV2aWNlIHVzaW5nIEREUiBjbG9jayBmcmVxdWVuY3kKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqZ2V0X3RpbWluZ3NfdGFibGUoY29uc3Qgc3RydWN0CisJCQlscGRkcjJfYWNfdGltaW5ncyBjb25zdCAqY29uc3QgKmRldmljZV90aW1pbmdzLAorCQkJdTMyIGZyZXEpCit7CisJdTMyIGksIHRlbXAsIGZyZXFfbmVhcmVzdDsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MgPSAwOworCisJZW1pZl9hc3NlcnQoZnJlcSA8PSBNQVhfTFBERFIyX0ZSRVEpOworCWVtaWZfYXNzZXJ0KGRldmljZV90aW1pbmdzKTsKKworCS8qCisJICogU3RhcnQgd2l0aCB0aGUgbWF4aW11bSBhbGxvd2VkIGZyZXF1ZW5jeSAtIHRoYXQgaXMgYWx3YXlzIHNhZmUKKwkgKi8KKwlmcmVxX25lYXJlc3QgPSBNQVhfTFBERFIyX0ZSRVE7CisJLyoKKwkgKiBGaW5kIHRoZSB0aW1pbmdzIHRhYmxlIHRoYXQgaGFzIHRoZSBtYXggZnJlcXVlbmN5IHZhbHVlOgorCSAqICAgaS4gIEFib3ZlIG9yIGVxdWFsIHRvIHRoZSBERFIgZnJlcXVlbmN5IC0gc2FmZQorCSAqICAgaWkuIFRoZSBsb3dlc3QgdGhhdCBzYXRpc2ZpZXMgY29uZGl0aW9uIChpKSAtIG9wdGltYWwKKwkgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IE1BWF9OVU1fU1BFRURCSU5TKSAmJiBkZXZpY2VfdGltaW5nc1tpXTsgaSsrKSB7CisJCXRlbXAgPSBkZXZpY2VfdGltaW5nc1tpXS0+bWF4X2ZyZXE7CisJCWlmICgodGVtcCA+PSBmcmVxKSAmJiAodGVtcCA8PSBmcmVxX25lYXJlc3QpKSB7CisJCQlmcmVxX25lYXJlc3QgPSB0ZW1wOworCQkJdGltaW5ncyA9IGRldmljZV90aW1pbmdzW2ldOworCQl9CisJfQorCWRlYnVnKCJlbWlmOiB0aW1pbmdzIHRhYmxlOiAlZFxuIiwgZnJlcV9uZWFyZXN0KTsKKwlyZXR1cm4gdGltaW5nczsKK30KKworLyoKKyAqIEZpbmRzIHRoZSB2YWx1ZSBvZiBlbWlmX3NkcmFtX2NvbmZpZ19yZWcKKyAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBwcm9ncmFtbWVkIGJhc2VkIG9uIHRoZSBkZXZpY2Ugb24gQ1MwLgorICogSWYgdGhlcmUgaXMgYSBkZXZpY2Ugb24gQ1MxLCBpdCB3aWxsIGJlIHNhbWUgYXMgdGhhdCBvbiBDUzAgb3IKKyAqIGl0IHdpbGwgYmUgTlZNLiBXZSBkb24ndCBzdXBwb3J0IE5WTSB5ZXQuCisgKiBJZiBjczFfZGV2aWNlIHBvaW50ZXIgaXMgTlVMTCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlcmUgaXMgbm8gZGV2aWNlCisgKiBvbiBDUzEKKyAqLworc3RhdGljIHUzMiBnZXRfc2RyYW1fY29uZmlnX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlLAorCQkJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2UsCisJCQkJY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nLAorCQkJCXU4IFJMKQoreworCXUzMiBjb25maWdfcmVnID0gMDsKKworCWNvbmZpZ19yZWcgfD0gIChjczBfZGV2aWNlLT50eXBlICsgNCkgPDwgRU1JRl9SRUdfU0RSQU1fVFlQRV9TSElGVDsKKwljb25maWdfcmVnIHw9ICBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1lfTUFYX0lOVEVSTEVBVklORyA8PAorCQkJRU1JRl9SRUdfSUJBTktfUE9TX1NISUZUOworCisJY29uZmlnX3JlZyB8PSBjczBfZGV2aWNlLT5pb193aWR0aCA8PCBFTUlGX1JFR19OQVJST1dfTU9ERV9TSElGVDsKKworCWNvbmZpZ19yZWcgfD0gUkwgPDwgRU1JRl9SRUdfQ0xfU0hJRlQ7CisKKwljb25maWdfcmVnIHw9IGFkZHJlc3NpbmctPnJvd19zeltjczBfZGV2aWNlLT5pb193aWR0aF0gPDwKKwkJCUVNSUZfUkVHX1JPV1NJWkVfU0hJRlQ7CisKKwljb25maWdfcmVnIHw9IGFkZHJlc3NpbmctPm51bV9iYW5rcyA8PCBFTUlGX1JFR19JQkFOS19TSElGVDsKKworCWNvbmZpZ19yZWcgfD0gKGNzMV9kZXZpY2UgPyBFQkFOS19DUzFfRU4gOiBFQkFOS19DUzFfRElTKSA8PAorCQkJRU1JRl9SRUdfRUJBTktfU0hJRlQ7CisKKwljb25maWdfcmVnIHw9IGFkZHJlc3NpbmctPmNvbF9zeltjczBfZGV2aWNlLT5pb193aWR0aF0gPDwKKwkJCUVNSUZfUkVHX1BBR0VTSVpFX1NISUZUOworCisJcmV0dXJuIGNvbmZpZ19yZWc7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3NkcmFtX3JlZl9jdHJsKHUzMiBmcmVxLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nKQoreworCXUzMiByZWZfY3RybCA9IDAsIHZhbCA9IDAsIGZyZXFfa2h6OworCWZyZXFfa2h6ID0gZnJlcSAvIDEwMDA7CisJLyoKKwkgKiByZWZyZXNoIHJhdGUgdG8gYmUgc2V0IGlzICd0UkVGSSAqIGZyZXEgaW4gTUh6CisJICogZGl2aXNpb24gYnkgMTAwMDAgdG8gYWNjb3VudCBmb3Iga2h6IGFuZCB4MTAgaW4gdF9SRUZJX3VzX3gxMAorCSAqLworCXZhbCA9IGFkZHJlc3NpbmctPnRfUkVGSV91c194MTAgKiBmcmVxX2toeiAvIDEwMDAwOworCXJlZl9jdHJsIHw9IHZhbCA8PCBFTUlGX1JFR19SRUZSRVNIX1JBVEVfU0hJRlQ7CisKKwlyZXR1cm4gcmVmX2N0cmw7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3NkcmFtX3RpbV8xX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZykKK3sKKwl1MzIgdGltMSA9IDAsIHZhbCA9IDA7CisJdmFsID0gbWF4KG1pbl90Y2stPnRXVFIsIG5zX3gyXzJfY3ljbGVzKHRpbWluZ3MtPnRXVFJ4MikpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBFTUlGX1JFR19UX1dUUl9TSElGVDsKKworCWlmIChhZGRyZXNzaW5nLT5udW1fYmFua3MgPT0gQkFOS1M4KQorCQl2YWwgPSAodGltaW5ncy0+dEZBVyAqICgqVF9kZW4pICsgNCAqICgqVF9udW0pIC0gMSkgLworCQkJCQkJCSg0ICogKCpUX251bSkpIC0gMTsKKwllbHNlCisJCXZhbCA9IG1heChtaW5fdGNrLT50UlJELCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UlJEKSkgLSAxOworCisJdGltMSB8PSB2YWwgPDwgRU1JRl9SRUdfVF9SUkRfU0hJRlQ7CisKKwl2YWwgPSBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UkFTbWluICsgdGltaW5ncy0+dFJQYWIpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBFTUlGX1JFR19UX1JDX1NISUZUOworCisJdmFsID0gbWF4KG1pbl90Y2stPnRSQVNfTUlOLCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UkFTbWluKSkgLSAxOworCXRpbTEgfD0gdmFsIDw8IEVNSUZfUkVHX1RfUkFTX1NISUZUOworCisJdmFsID0gbWF4KG1pbl90Y2stPnRXUiwgbnNfMl9jeWNsZXModGltaW5ncy0+dFdSKSkgLSAxOworCXRpbTEgfD0gdmFsIDw8IEVNSUZfUkVHX1RfV1JfU0hJRlQ7CisKKwl2YWwgPSBtYXgobWluX3Rjay0+dFJDRCwgbnNfMl9jeWNsZXModGltaW5ncy0+dFJDRCkpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBFTUlGX1JFR19UX1JDRF9TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50UlBfQUIsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSUGFiKSkgLSAxOworCXRpbTEgfD0gdmFsIDw8IEVNSUZfUkVHX1RfUlBfU0hJRlQ7CisKKwlyZXR1cm4gdGltMTsKK30KKworc3RhdGljIHUzMiBnZXRfc2RyYW1fdGltXzJfcmVnKGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5ncywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2spCit7CisJdTMyIHRpbTIgPSAwLCB2YWwgPSAwOworCXZhbCA9IG1heChtaW5fdGNrLT50Q0tFLCB0aW1pbmdzLT50Q0tFKSAtIDE7CisJdGltMiB8PSB2YWwgPDwgRU1JRl9SRUdfVF9DS0VfU0hJRlQ7CisKKwl2YWwgPSBtYXgobWluX3Rjay0+dFJUUCwgbnNfeDJfMl9jeWNsZXModGltaW5ncy0+dFJUUHgyKSkgLSAxOworCXRpbTIgfD0gdmFsIDw8IEVNSUZfUkVHX1RfUlRQX1NISUZUOworCisJLyoKKwkgKiB0WFNSRCA9IHRSRkNhYiArIDEwIG5zLiBYU1JEIGFuZCBYU05SIHNob3VsZCBoYXZlIHRoZQorCSAqIHNhbWUgdmFsdWUKKwkgKi8KKwl2YWwgPSBuc18yX2N5Y2xlcyh0aW1pbmdzLT50WFNSKSAtIDE7CisJdGltMiB8PSB2YWwgPDwgRU1JRl9SRUdfVF9YU1JEX1NISUZUOworCXRpbTIgfD0gdmFsIDw8IEVNSUZfUkVHX1RfWFNOUl9TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50WFAsIG5zX3gyXzJfY3ljbGVzKHRpbWluZ3MtPnRYUHgyKSkgLSAxOworCXRpbTIgfD0gdmFsIDw8IEVNSUZfUkVHX1RfWFBfU0hJRlQ7CisKKwlyZXR1cm4gdGltMjsKK30KKworc3RhdGljIHUzMiBnZXRfc2RyYW1fdGltXzNfcmVnKGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5ncywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2ssCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nKQoreworCXUzMiB0aW0zID0gMCwgdmFsID0gMDsKKwl2YWwgPSBtaW4odGltaW5ncy0+dFJBU21heCAqIDEwIC8gYWRkcmVzc2luZy0+dF9SRUZJX3VzX3gxMCAtIDEsIDB4Rik7CisJdGltMyB8PSB2YWwgPDwgRU1JRl9SRUdfVF9SQVNfTUFYX1NISUZUOworCisJdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFJGQ2FiKSAtIDE7CisJdGltMyB8PSB2YWwgPDwgRU1JRl9SRUdfVF9SRkNfU0hJRlQ7CisKKwl2YWwgPSBuc194Ml8yX2N5Y2xlcyh0aW1pbmdzLT50RFFTQ0tNQVh4MikgLSAxOworCXRpbTMgfD0gdmFsIDw8IEVNSUZfUkVHX1RfVERRU0NLTUFYX1NISUZUOworCisJdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFpRQ1MpIC0gMTsKKwl0aW0zIHw9IHZhbCA8PCBFTUlGX1JFR19aUV9aUUNTX1NISUZUOworCisJdmFsID0gbWF4KG1pbl90Y2stPnRDS0VTUiwgbnNfMl9jeWNsZXModGltaW5ncy0+dENLRVNSKSkgLSAxOworCXRpbTMgfD0gdmFsIDw8IEVNSUZfUkVHX1RfQ0tFU1JfU0hJRlQ7CisKKwlyZXR1cm4gdGltMzsKK30KKworc3RhdGljIHUzMiBnZXRfenFfY29uZmlnX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcsCisJCQkgICAgIHU4IHZvbHRfcmFtcCkKK3sKKwl1MzIgenEgPSAwLCB2YWwgPSAwOworCWlmICh2b2x0X3JhbXApCisJCXZhbCA9CisJCSAgICBFTUlGX1pRQ1NfSU5URVJWQUxfRFZGU19JTl9VUyAqIDEwIC8KKwkJICAgIGFkZHJlc3NpbmctPnRfUkVGSV91c194MTA7CisJZWxzZQorCQl2YWwgPQorCQkgICAgRU1JRl9aUUNTX0lOVEVSVkFMX05PUk1BTF9JTl9VUyAqIDEwIC8KKwkJICAgIGFkZHJlc3NpbmctPnRfUkVGSV91c194MTA7CisJenEgfD0gdmFsIDw8IEVNSUZfUkVHX1pRX1JFRklOVEVSVkFMX1NISUZUOworCisJenEgfD0gKFJFR19aUV9aUUNMX01VTFQgLSAxKSA8PCBFTUlGX1JFR19aUV9aUUNMX01VTFRfU0hJRlQ7CisKKwl6cSB8PSAoUkVHX1pRX1pRSU5JVF9NVUxUIC0gMSkgPDwgRU1JRl9SRUdfWlFfWlFJTklUX01VTFRfU0hJRlQ7CisKKwl6cSB8PSBSRUdfWlFfU0ZFWElURU5fRU5BQkxFIDw8IEVNSUZfUkVHX1pRX1NGRVhJVEVOX1NISUZUOworCisJLyoKKwkgKiBBc3N1bWluZyB0aGF0IHR3byBjaGlwc2VsZWN0cyBoYXZlIGEgc2luZ2xlIGNhbGlicmF0aW9uIHJlc2lzdG9yCisJICogSWYgdGhlcmUgYXJlIGluZGVlZCB0d28gY2FsaWJyYXRpb24gcmVzaXN0b3JzLCB0aGVuIHRoaXMgZmxhZyBzaG91bGQKKwkgKiBiZSBlbmFibGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIGR1YWwgY2FsaWJyYXRpb24gZmVhdHVyZS4KKwkgKiBUaGlzIGRhdGEgc2hvdWxkIGlkZWFsbHkgY29tZSBmcm9tIGJvYXJkIGZpbGVzLiBCdXQgY29uc2lkZXJpbmcKKwkgKiB0aGF0IG5vbmUgb2YgdGhlIGJvYXJkcyB0b2RheSBoYXZlIGNhbGlicmF0aW9uIHJlc2lzdG9ycyBwZXIgQ1MsCisJICogaXQgd291bGQgYmUgYW4gdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuCisJICovCisJenEgfD0gUkVHX1pRX0RVQUxDQUxFTl9ESVNBQkxFIDw8IEVNSUZfUkVHX1pRX0RVQUxDQUxFTl9TSElGVDsKKworCXpxIHw9IFJFR19aUV9DUzBFTl9FTkFCTEUgPDwgRU1JRl9SRUdfWlFfQ1MwRU5fU0hJRlQ7CisKKwl6cSB8PSAoY3MxX2RldmljZSA/IDEgOiAwKSA8PCBFTUlGX1JFR19aUV9DUzFFTl9TSElGVDsKKworCXJldHVybiB6cTsKK30KKworc3RhdGljIHUzMiBnZXRfdGVtcF9hbGVydF9jb25maWcoY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZSwKKwkJCQkgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nLAorCQkJCSB1OCBpc19kZXJhdGVkKQoreworCXUzMiBhbGVydCA9IDAsIGludGVydmFsOworCWludGVydmFsID0KKwkgICAgVEVNUF9BTEVSVF9QT0xMX0lOVEVSVkFMX01TICogMTAwMDAgLyBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwOworCWlmIChpc19kZXJhdGVkKQorCQlpbnRlcnZhbCAqPSA0OworCWFsZXJ0IHw9IGludGVydmFsIDw8IEVNSUZfUkVHX1RBX1JFRklOVEVSVkFMX1NISUZUOworCisJYWxlcnQgfD0gVEVNUF9BTEVSVF9DT05GSUdfREVWQ1RfMSA8PCBFTUlGX1JFR19UQV9ERVZDTlRfU0hJRlQ7CisKKwlhbGVydCB8PSBURU1QX0FMRVJUX0NPTkZJR19ERVZXRFRfMzIgPDwgRU1JRl9SRUdfVEFfREVWV0RUX1NISUZUOworCisJYWxlcnQgfD0gMSA8PCBFTUlGX1JFR19UQV9TRkVYSVRFTl9TSElGVDsKKworCWFsZXJ0IHw9IDEgPDwgRU1JRl9SRUdfVEFfQ1MwRU5fU0hJRlQ7CisKKwlhbGVydCB8PSAoY3MxX2RldmljZSA/IDEgOiAwKSA8PCBFTUlGX1JFR19UQV9DUzFFTl9TSElGVDsKKworCXJldHVybiBhbGVydDsKK30KKworc3RhdGljIHUzMiBnZXRfcmVhZF9pZGxlX2N0cmxfcmVnKHU4IHZvbHRfcmFtcCkKK3sKKwl1MzIgaWRsZSA9IDAsIHZhbCA9IDA7CisJaWYgKHZvbHRfcmFtcCkKKwkJdmFsID0gbnNfMl9jeWNsZXMoUkVBRF9JRExFX0lOVEVSVkFMX0RWRlMpIC8gNjQgLSAxOworCWVsc2UKKwkJLypNYXhpbXVtIHZhbHVlIGluIG5vcm1hbCBjb25kaXRpb25zIC0gc3VnZ2VzdGVkIGJ5IGh3IHRlYW0gKi8KKwkJdmFsID0gMHgxRkY7CisJaWRsZSB8PSB2YWwgPDwgRU1JRl9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX1NISUZUOworCisJaWRsZSB8PSBFTUlGX1JFR19SRUFEX0lETEVfTEVOX1ZBTCA8PCBFTUlGX1JFR19SRUFEX0lETEVfTEVOX1NISUZUOworCisJcmV0dXJuIGlkbGU7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X2Rkcl9waHlfY3RybF8xKHUzMiBmcmVxLCB1OCBSTCkKK3sKKwl1MzIgcGh5ID0gMCwgdmFsID0gMDsKKworCXBoeSB8PSAoUkwgKyAyKSA8PCBFTUlGX1JFR19SRUFEX0xBVEVOQ1lfU0hJRlQ7CisKKwlpZiAoZnJlcSA8PSAxMDAwMDAwMDApCisJCXZhbCA9IEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzEwMF9NSFpfQU5EX0xFU1M7CisJZWxzZSBpZiAoZnJlcSA8PSAyMDAwMDAwMDApCisJCXZhbCA9IEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzIwMF9NSFo7CisJZWxzZQorCQl2YWwgPSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF80MDBfTUhaOworCXBoeSB8PSB2YWwgPDwgRU1JRl9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX1NISUZUOworCisJLyogT3RoZXIgZmllbGRzIGFyZSBjb25zdGFudCBtYWdpYyB2YWx1ZXMuIEhhcmRjb2RlIHRoZW0gdG9nZXRoZXIgKi8KKwlwaHkgfD0gRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTCA8PAorCQlFTUlGX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfU0hJRlQ7CisKKwlyZXR1cm4gcGh5OworfQorCitzdGF0aWMgdTMyIGdldF9lbWlmX21lbV9zaXplKHN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzICpkZXZpY2VzKQoreworCXUzMiBzaXplX21ieXRlcyA9IDAsIHRlbXA7CisKKwlpZiAoIWRldmljZXMpCisJCXJldHVybiAwOworCisJaWYgKGRldmljZXMtPmNzMF9kZXZpY2VfZGV0YWlscykgeworCQl0ZW1wID0gZGV2aWNlcy0+Y3MwX2RldmljZV9kZXRhaWxzLT5kZW5zaXR5OworCQlzaXplX21ieXRlcyArPSBscGRkcjJfZGVuc2l0eV8yX3NpemVfaW5fbWJ5dGVzW3RlbXBdOworCX0KKworCWlmIChkZXZpY2VzLT5jczFfZGV2aWNlX2RldGFpbHMpIHsKKwkJdGVtcCA9IGRldmljZXMtPmNzMV9kZXZpY2VfZGV0YWlscy0+ZGVuc2l0eTsKKwkJc2l6ZV9tYnl0ZXMgKz0gbHBkZHIyX2RlbnNpdHlfMl9zaXplX2luX21ieXRlc1t0ZW1wXTsKKwl9CisJLyogY29udmVydCB0byBieXRlcyAqLworCXJldHVybiBzaXplX21ieXRlcyA8PCAyMDsKK30KKworLyogR2V0cyB0aGUgZW5jb2RpbmcgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIERNTSBzZWN0aW9uIHNpemUgKi8KK3UzMiBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAodTMyIHNlY3Rpb25fc2l6ZSkKK3sKKwkvKgorCSAqIFNlY3Rpb24gc2l6ZSBtYXBwaW5nOgorCSAqIDB4MDogMTYtTWlCIHNlY3Rpb24KKwkgKiAweDE6IDMyLU1pQiBzZWN0aW9uCisJICogMHgyOiA2NC1NaUIgc2VjdGlvbgorCSAqIDB4MzogMTI4LU1pQiBzZWN0aW9uCisJICogMHg0OiAyNTYtTWlCIHNlY3Rpb24KKwkgKiAweDU6IDUxMi1NaUIgc2VjdGlvbgorCSAqIDB4NjogMS1HaUIgc2VjdGlvbgorCSAqIDB4NzogMi1HaUIgc2VjdGlvbgorCSAqLworCXNlY3Rpb25fc2l6ZSA+Pj0gMjQ7IC8qIGRpdmlkZSBieSAxNiBNQiAqLworCXJldHVybiBsb2dfMl9uX3JvdW5kX2Rvd24oc2VjdGlvbl9zaXplKTsKK30KKworc3RhdGljIHZvaWQgZW1pZl9jYWxjdWxhdGVfcmVncygKKwkJY29uc3Qgc3RydWN0IGVtaWZfZGV2aWNlX2RldGFpbHMgKmVtaWZfZGV2X2RldGFpbHMsCisJCXUzMiBmcmVxLCBzdHJ1Y3QgZW1pZl9yZWdzICpyZWdzKQoreworCXUzMiB0ZW1wLCBzeXNfZnJlcTsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3Npbmc7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzOworCWNvbnN0IHN0cnVjdCBscGRkcjJfbWluX3RjayAqbWluX3RjazsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2X2RldGFpbHMgPQorCQkJCQllbWlmX2Rldl9kZXRhaWxzLT5jczBfZGV2aWNlX2RldGFpbHM7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2Rldl9kZXRhaWxzID0KKwkJCQkJZW1pZl9kZXZfZGV0YWlscy0+Y3MxX2RldmljZV9kZXRhaWxzOworCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKmNzMF9kZXZfdGltaW5ncyA9CisJCQkJCWVtaWZfZGV2X2RldGFpbHMtPmNzMF9kZXZpY2VfdGltaW5nczsKKworCWVtaWZfYXNzZXJ0KGVtaWZfZGV2X2RldGFpbHMpOworCWVtaWZfYXNzZXJ0KHJlZ3MpOworCS8qCisJICogWW91IGNhbiBub3QgaGF2ZSBhIGRldmljZSBvbiBDUzEgd2l0aG91dCBvbmUgb24gQ1MwCisJICogU28gY29uZmlndXJpbmcgRU1JRiB3aXRob3V0IGEgZGV2aWNlIG9uIENTMCBkb2Vzbid0CisJICogbWFrZSBzZW5zZQorCSAqLworCWVtaWZfYXNzZXJ0KGNzMF9kZXZfZGV0YWlscyk7CisJZW1pZl9hc3NlcnQoY3MwX2Rldl9kZXRhaWxzLT50eXBlICE9IExQRERSMl9UWVBFX05WTSk7CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIGRldmljZSBvbiBDUzEgaXQgc2hvdWxkIGJlIHNhbWUgdHlwZSBhcyBDUzAKKwkgKiAob3IgTlZNLiBCdXQgTlZNIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgeWV0KQorCSAqLworCWVtaWZfYXNzZXJ0KChjczFfZGV2X2RldGFpbHMgPT0gTlVMTCkgfHwKKwkJICAgIChjczFfZGV2X2RldGFpbHMtPnR5cGUgPT0gTFBERFIyX1RZUEVfTlZNKSB8fAorCQkgICAgKGNzMF9kZXZfZGV0YWlscy0+dHlwZSA9PSBjczFfZGV2X2RldGFpbHMtPnR5cGUpKTsKKwllbWlmX2Fzc2VydChmcmVxIDw9IE1BWF9MUEREUjJfRlJFUSk7CisKKwlzZXRfZGRyX2Nsa19wZXJpb2QoZnJlcSk7CisKKwkvKgorCSAqIFRoZSBkZXZpY2Ugb24gQ1MwIGlzIHVzZWQgZm9yIGFsbCB0aW1pbmcgY2FsY3VsYXRpb25zCisJICogVGhlcmUgaXMgb25seSBvbmUgc2V0IG9mIHJlZ2lzdGVycyBmb3IgdGltaW5ncyBwZXIgRU1JRi4gU28sIGlmIHRoZQorCSAqIHNlY29uZCBDUyhDUzEpIGhhcyBhIGRldmljZSwgaXQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdGltaW5ncyBhcyB0aGUKKwkgKiBkZXZpY2Ugb24gQ1MwCisJICovCisJdGltaW5ncyA9IGdldF90aW1pbmdzX3RhYmxlKGNzMF9kZXZfdGltaW5ncy0+YWNfdGltaW5ncywgZnJlcSk7CisJZW1pZl9hc3NlcnQodGltaW5ncyk7CisJbWluX3RjayA9IGNzMF9kZXZfdGltaW5ncy0+bWluX3RjazsKKworCXRlbXAgPSBhZGRyZXNzaW5nX3RhYmxlX2luZGV4KGNzMF9kZXZfZGV0YWlscy0+dHlwZSwKKwkJCQkgICAgICBjczBfZGV2X2RldGFpbHMtPmRlbnNpdHksCisJCQkJICAgICAgY3MwX2Rldl9kZXRhaWxzLT5pb193aWR0aCk7CisKKwllbWlmX2Fzc2VydCgodGVtcCA+PSAwKSk7CisJYWRkcmVzc2luZyA9ICYoYWRkcmVzc2luZ190YWJsZVt0ZW1wXSk7CisJZW1pZl9hc3NlcnQoYWRkcmVzc2luZyk7CisKKwlzeXNfZnJlcSA9IGdldF9zeXNfY2xrX2ZyZXEoKTsKKworCXJlZ3MtPnNkcmFtX2NvbmZpZ19pbml0ID0gZ2V0X3NkcmFtX2NvbmZpZ19yZWcoY3MwX2Rldl9kZXRhaWxzLAorCQkJCQkJCWNzMV9kZXZfZGV0YWlscywKKwkJCQkJCQlhZGRyZXNzaW5nLCBSTF9CT09UKTsKKworCXJlZ3MtPnNkcmFtX2NvbmZpZyA9IGdldF9zZHJhbV9jb25maWdfcmVnKGNzMF9kZXZfZGV0YWlscywKKwkJCQkJCWNzMV9kZXZfZGV0YWlscywKKwkJCQkJCWFkZHJlc3NpbmcsIFJMX0ZJTkFMKTsKKworCXJlZ3MtPnJlZl9jdHJsID0gZ2V0X3NkcmFtX3JlZl9jdHJsKGZyZXEsIGFkZHJlc3NpbmcpOworCisJcmVncy0+c2RyYW1fdGltMSA9IGdldF9zZHJhbV90aW1fMV9yZWcodGltaW5ncywgbWluX3RjaywgYWRkcmVzc2luZyk7CisKKwlyZWdzLT5zZHJhbV90aW0yID0gZ2V0X3NkcmFtX3RpbV8yX3JlZyh0aW1pbmdzLCBtaW5fdGNrKTsKKworCXJlZ3MtPnNkcmFtX3RpbTMgPSBnZXRfc2RyYW1fdGltXzNfcmVnKHRpbWluZ3MsIG1pbl90Y2ssIGFkZHJlc3NpbmcpOworCisJcmVncy0+cmVhZF9pZGxlX2N0cmwgPSBnZXRfcmVhZF9pZGxlX2N0cmxfcmVnKExQRERSMl9WT0xUQUdFX1NUQUJMRSk7CisKKwlyZWdzLT50ZW1wX2FsZXJ0X2NvbmZpZyA9CisJICAgIGdldF90ZW1wX2FsZXJ0X2NvbmZpZyhjczFfZGV2X2RldGFpbHMsIGFkZHJlc3NpbmcsIDApOworCisJcmVncy0+enFfY29uZmlnID0gZ2V0X3pxX2NvbmZpZ19yZWcoY3MxX2Rldl9kZXRhaWxzLCBhZGRyZXNzaW5nLAorCQkJCQkgICAgTFBERFIyX1ZPTFRBR0VfU1RBQkxFKTsKKworCXJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzFfaW5pdCA9CisJCQlnZXRfZGRyX3BoeV9jdHJsXzEoc3lzX2ZyZXEgLyAyLCBSTF9CT09UKTsKKworCXJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzEgPQorCQkJZ2V0X2Rkcl9waHlfY3RybF8xKGZyZXEsIFJMX0ZJTkFMKTsKKworCXJlZ3MtPmZyZXEgPSBmcmVxOworCisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV9jb25maWdfaW5pdCk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV9jb25maWcpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+cmVmX2N0cmwpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fdGltMSk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV90aW0yKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnNkcmFtX3RpbTMpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+cmVhZF9pZGxlX2N0cmwpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+dGVtcF9hbGVydF9jb25maWcpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+enFfY29uZmlnKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzEpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUyAqLworCisjaWZkZWYgQ09ORklHX1NZU19BVVRPTUFUSUNfU0RSQU1fREVURUNUSU9OCitjb25zdCBjaGFyICpnZXRfbHBkZHIyX3R5cGUodTggdHlwZV9pZCkKK3sKKwlzd2l0Y2ggKHR5cGVfaWQpIHsKKwljYXNlIExQRERSMl9UWVBFX1M0OgorCQlyZXR1cm4gIkxQRERSMi1TNCI7CisJY2FzZSBMUEREUjJfVFlQRV9TMjoKKwkJcmV0dXJuICJMUEREUjItUzIiOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworY29uc3QgY2hhciAqZ2V0X2xwZGRyMl9pb193aWR0aCh1OCB3aWR0aF9pZCkKK3sKKwlzd2l0Y2ggKHdpZHRoX2lkKSB7CisJY2FzZSBMUEREUjJfSU9fV0lEVEhfODoKKwkJcmV0dXJuICJ4OCI7CisJY2FzZSBMUEREUjJfSU9fV0lEVEhfMTY6CisJCXJldHVybiAieDE2IjsKKwljYXNlIExQRERSMl9JT19XSURUSF8zMjoKKwkJcmV0dXJuICJ4MzIiOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworY29uc3QgY2hhciAqZ2V0X2xwZGRyMl9tYW51ZmFjdHVyZXIodTMyIG1hbnVmYWN0dXJlcikKK3sKKwlzd2l0Y2ggKG1hbnVmYWN0dXJlcikgeworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9TQU1TVU5HOgorCQlyZXR1cm4gIlNhbXN1bmciOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9RSU1PTkRBOgorCQlyZXR1cm4gIlFpbW9uZGEiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9FTFBJREE6CisJCXJldHVybiAiRWxwaWRhIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfRVRST046CisJCXJldHVybiAiRXRyb24iOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9OQU5ZQToKKwkJcmV0dXJuICJOYW55YSI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0hZTklYOgorCQlyZXR1cm4gIkh5bml4IjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfTU9TRUw6CisJCXJldHVybiAiTW9zZWwiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9XSU5CT05EOgorCQlyZXR1cm4gIldpbmJvbmQiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9FU01UOgorCQlyZXR1cm4gIkVTTVQiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9TUEFOU0lPTjoKKwkJcmV0dXJuICJTcGFuc2lvbiI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NTVDoKKwkJcmV0dXJuICJTU1QiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9aTU9TOgorCQlyZXR1cm4gIlpNT1MiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9JTlRFTDoKKwkJcmV0dXJuICJJbnRlbCI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05VTU9OWVg6CisJCXJldHVybiAiTnVtb255eCI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01JQ1JPTjoKKwkJcmV0dXJuICJNaWNyb24iOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgZGlzcGxheV9zZHJhbV9kZXRhaWxzKHUzMiBlbWlmX25yLCB1MzIgY3MsCisJCQkJICBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpkZXZpY2UpCit7CisJY29uc3QgY2hhciAqbWZnX3N0cjsKKwljb25zdCBjaGFyICp0eXBlX3N0cjsKKwljaGFyIGRlbnNpdHlfc3RyWzEwXTsKKwl1MzIgZGVuc2l0eTsKKworCWRlYnVnKCJFTUlGJWQgQ1MlZFx0IiwgZW1pZl9uciwgY3MpOworCisJaWYgKCFkZXZpY2UpIHsKKwkJZGVidWcoIk5vbmVcbiIpOworCQlyZXR1cm47CisJfQorCisJbWZnX3N0ciA9IGdldF9scGRkcjJfbWFudWZhY3R1cmVyKGRldmljZS0+bWFudWZhY3R1cmVyKTsKKwl0eXBlX3N0ciA9IGdldF9scGRkcjJfdHlwZShkZXZpY2UtPnR5cGUpOworCisJZGVuc2l0eSA9IGxwZGRyMl9kZW5zaXR5XzJfc2l6ZV9pbl9tYnl0ZXNbZGV2aWNlLT5kZW5zaXR5XTsKKwlpZiAoKGRlbnNpdHkgLyAxMDI0ICogMTAyNCkgPT0gZGVuc2l0eSkgeworCQlkZW5zaXR5IC89IDEwMjQ7CisJCXNwcmludGYoZGVuc2l0eV9zdHIsICIlZCBHQiIsIGRlbnNpdHkpOworCX0gZWxzZQorCQlzcHJpbnRmKGRlbnNpdHlfc3RyLCAiJWQgTUIiLCBkZW5zaXR5KTsKKwlpZiAobWZnX3N0ciAmJiB0eXBlX3N0cikKKwkJZGVidWcoIiVzXHRcdCVzXHQlc1xuIiwgbWZnX3N0ciwgdHlwZV9zdHIsIGRlbnNpdHlfc3RyKTsKK30KKworc3RhdGljIHU4IGlzX2xwZGRyMl9zZHJhbV9wcmVzZW50KHUzMiBiYXNlLCB1MzIgY3MsCisJCQkJICBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpscGRkcjJfZGV2aWNlKQoreworCXUzMiBtciA9IDAsIHRlbXA7CisKKwltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SMCk7CisJaWYgKG1yID4gMHhGRikgeworCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCisJCXJldHVybiAwOworCX0KKworCXRlbXAgPSAobXIgJiBMUEREUjJfTVIwX0RJX01BU0spID4+IExQRERSMl9NUjBfRElfU0hJRlQ7CisJaWYgKHRlbXApIHsKKwkJLyogTm90IFNEUkFNICovCisJCXJldHVybiAwOworCX0KKwl0ZW1wID0gKG1yICYgTFBERFIyX01SMF9ETlZJX01BU0spID4+IExQRERSMl9NUjBfRE5WSV9TSElGVDsKKworCWlmICh0ZW1wKSB7CisJCS8qIEROViBzdXBwb3J0ZWQgLSBCdXQgRE5WIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBOVk0gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjQpOworCWlmIChtciA+IDB4RkYpIHsKKwkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SNSk7CisJaWYgKG1yID49IDB4RkYpIHsKKwkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdldF9scGRkcjJfbWFudWZhY3R1cmVyKG1yKSkgeworCQkvKiBNYW51ZmFjdHVyZXIgbm90IGlkZW50aWZpZWQgKi8KKwkJcmV0dXJuIDA7CisJfQorCWxwZGRyMl9kZXZpY2UtPm1hbnVmYWN0dXJlciA9IG1yOworCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjYpOworCWlmIChtciA+PSAweEZGKSB7CisJCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjcpOworCWlmIChtciA+PSAweEZGKSB7CisJCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjgpOworCWlmIChtciA+PSAweEZGKSB7CisJCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJdGVtcCA9IChtciAmIE1SOF9UWVBFX01BU0spID4+IE1SOF9UWVBFX1NISUZUOworCWlmICghZ2V0X2xwZGRyMl90eXBlKHRlbXApKSB7CisJCS8qIE5vdCBTRFJBTSAqLworCQlyZXR1cm4gMDsKKwl9CisJbHBkZHIyX2RldmljZS0+dHlwZSA9IHRlbXA7CisKKwl0ZW1wID0gKG1yICYgTVI4X0RFTlNJVFlfTUFTSykgPj4gTVI4X0RFTlNJVFlfU0hJRlQ7CisJaWYgKHRlbXAgPiBMUEREUjJfREVOU0lUWV8zMkdiKSB7CisJCS8qIERlbnNpdHkgbm90IHN1cHBvcnRlZCAqLworCQlyZXR1cm4gMDsKKwl9CisJbHBkZHIyX2RldmljZS0+ZGVuc2l0eSA9IHRlbXA7CisKKwl0ZW1wID0gKG1yICYgTVI4X0lPX1dJRFRIX01BU0spID4+IE1SOF9JT19XSURUSF9TSElGVDsKKwlpZiAoIWdldF9scGRkcjJfaW9fd2lkdGgodGVtcCkpIHsKKwkJLyogSU8gd2lkdGggdW5zdXBwb3J0ZWQgdmFsdWUgKi8KKwkJcmV0dXJuIDA7CisJfQorCWxwZGRyMl9kZXZpY2UtPmlvX3dpZHRoID0gdGVtcDsKKworCS8qCisJICogSWYgYWxsIHRoZSBhYm92ZSB0ZXN0cyBwYXNzIHdlIHNob3VsZAorCSAqIGhhdmUgYSBkZXZpY2Ugb24gdGhpcyBjaGlwLXNlbGVjdAorCSAqLworCXJldHVybiAxOworfQorCitzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICplbWlmX2dldF9kZXZpY2VfZGV0YWlscyh1MzIgZW1pZl9uciwgdTggY3MsCisJCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpscGRkcjJfZGV2X2RldGFpbHMpCit7CisJdTMyIHBoeTsKKwl1MzIgYmFzZSA9IChlbWlmX25yID09IDEpID8gRU1JRjFfQkFTRSA6IEVNSUYyX0JBU0U7CisKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJaWYgKCFscGRkcjJfZGV2X2RldGFpbHMpCisJCXJldHVybiBOVUxMOworCisJLyogRG8gdGhlIG1pbmltdW0gaW5pdCBmb3IgbW9kZSByZWdpc3RlciBhY2Nlc3NlcyAqLworCWlmICghcnVubmluZ19mcm9tX3NkcmFtKCkpIHsKKwkJcGh5ID0gZ2V0X2Rkcl9waHlfY3RybF8xKGdldF9zeXNfY2xrX2ZyZXEoKSAvIDIsIFJMX0JPT1QpOworCQl3cml0ZWwocGh5LCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMSk7CisJfQorCisJaWYgKCEoaXNfbHBkZHIyX3NkcmFtX3ByZXNlbnQoYmFzZSwgY3MsIGxwZGRyMl9kZXZfZGV0YWlscykpKQorCQlyZXR1cm4gTlVMTDsKKworCWRpc3BsYXlfc2RyYW1fZGV0YWlscyhlbWlmX251bShiYXNlKSwgY3MsIGxwZGRyMl9kZXZfZGV0YWlscyk7CisKKwlyZXR1cm4gbHBkZHIyX2Rldl9kZXRhaWxzOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTiAqLworCitzdGF0aWMgdm9pZCBkb19zZHJhbV9pbml0KHUzMiBiYXNlKQoreworCWNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKnJlZ3M7CisJdTMyIGluX3NkcmFtLCBlbWlmX25yOworCisJZGVidWcoIj4+ZG9fc2RyYW1faW5pdCgpICV4XG4iLCBiYXNlKTsKKworCWluX3NkcmFtID0gcnVubmluZ19mcm9tX3NkcmFtKCk7CisJZW1pZl9uciA9IChiYXNlID09IEVNSUYxX0JBU0UpID8gMSA6IDI7CisKKyNpZmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUworCWVtaWZfZ2V0X3JlZ19kdW1wKGVtaWZfbnIsICZyZWdzKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGVidWcoIkVNSUY6IHJlZyBkdW1wIG5vdCBwcm92aWRlZFxuIik7CisJCXJldHVybjsKKwl9CisjZWxzZQorCS8qCisJICogVGhlIHVzZXIgaGFzIG5vdCBwcm92aWRlZCB0aGUgcmVnaXN0ZXIgdmFsdWVzLiBXZSBuZWVkIHRvCisJICogY2FsY3VsYXRlIGl0IGJhc2VkIG9uIHRoZSB0aW1pbmdzIGFuZCB0aGUgRERSIGZyZXF1ZW5jeQorCSAqLworCXN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzIGRldl9kZXRhaWxzOworCXN0cnVjdCBlbWlmX3JlZ3MgY2FsY3VsYXRlZF9yZWdzOworCisJLyoKKwkgKiBHZXQgZGV2aWNlIGRldGFpbHM6CisJICogLSBEaXNjb3ZlcmVkIGlmIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTiBpcyBzZXQKKwkgKiAtIE9idGFpbmVkIGZyb20gdXNlciBvdGhlcndpc2UKKwkgKi8KKwlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIGNzMF9kZXZfZGV0YWlscywgY3MxX2Rldl9kZXRhaWxzOworCWVtaWZfcmVzZXRfcGh5KGJhc2UpOworCWRldl9kZXRhaWxzLmNzMF9kZXZpY2VfZGV0YWlscyA9IGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKGJhc2UsIENTMCwKKwkJCQkJCSZjczBfZGV2X2RldGFpbHMpOworCWRldl9kZXRhaWxzLmNzMV9kZXZpY2VfZGV0YWlscyA9IGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKGJhc2UsIENTMSwKKwkJCQkJCSZjczFfZGV2X2RldGFpbHMpOworCWVtaWZfcmVzZXRfcGh5KGJhc2UpOworCisJLyogUmV0dXJuIGlmIG5vIGRldmljZXMgb24gdGhpcyBFTUlGICovCisJaWYgKCFkZXZfZGV0YWlscy5jczBfZGV2aWNlX2RldGFpbHMgJiYKKwkgICAgIWRldl9kZXRhaWxzLmNzMV9kZXZpY2VfZGV0YWlscykgeworCQllbWlmX3NpemVzW2VtaWZfbnIgLSAxXSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWluX3NkcmFtKQorCQllbWlmX3NpemVzW2VtaWZfbnIgLSAxXSA9IGdldF9lbWlmX21lbV9zaXplKCZkZXZfZGV0YWlscyk7CisKKwkvKgorCSAqIEdldCBkZXZpY2UgdGltaW5nczoKKwkgKiAtIERlZmF1bHQgdGltaW5ncyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGlmCisJICogICBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MgaXMgc2V0CisJICogLSBPYnRhaW5lZCBmcm9tIHVzZXIgb3RoZXJ3aXNlCisJICovCisJZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3MoZW1pZl9uciwgJmRldl9kZXRhaWxzLmNzMF9kZXZpY2VfdGltaW5ncywKKwkJCQkmZGV2X2RldGFpbHMuY3MxX2RldmljZV90aW1pbmdzKTsKKworCS8qIENhbGN1bGF0ZSB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCisJZW1pZl9jYWxjdWxhdGVfcmVncygmZGV2X2RldGFpbHMsIG9tYXBfZGRyX2NsaygpLCAmY2FsY3VsYXRlZF9yZWdzKTsKKwlyZWdzID0gJmNhbGN1bGF0ZWRfcmVnczsKKyNlbmRpZiAvKiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUyAqLworCisJLyoKKwkgKiBJbml0aWFsaXppbmcgdGhlIExQRERSMiBkZXZpY2UgY2FuIG5vdCBoYXBwZW4gZnJvbSBTRFJBTS4KKwkgKiBDaGFuZ2luZyB0aGUgdGltaW5nIHJlZ2lzdGVycyBpbiBFTUlGIGNhbiBoYXBwZW4oZ29pbmcgZnJvbSBvbmUKKwkgKiBPUFAgdG8gYW5vdGhlcikKKwkgKi8KKwlpZiAoIWluX3NkcmFtKQorCQlscGRkcjJfaW5pdChiYXNlLCByZWdzKTsKKworCS8qIFdyaXRlIHRvIHRoZSBzaGFkb3cgcmVnaXN0ZXJzICovCisJZW1pZl91cGRhdGVfdGltaW5ncyhiYXNlLCByZWdzKTsKKworCWRlYnVnKCI8PGRvX3NkcmFtX2luaXQoKSAleFxuIiwgYmFzZSk7Cit9CisKK3ZvaWQgZW1pZl9wb3N0X2luaXRfY29uZmlnKHUzMiBiYXNlKQoreworCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7CisJdTMyIG9tYXBfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCisJaWYgKG9tYXBfcmV2ID09IE9NQVA1NDMwX0VTMV8wKQorCQlyZXR1cm47CisKKwkvKiByZXNldCBwaHkgb24gRVMyLjAgKi8KKwlpZiAob21hcF9yZXYgPT0gT01BUDQ0MzBfRVMyXzApCisJCWVtaWZfcmVzZXRfcGh5KGJhc2UpOworCisJLyogUHV0IEVNSUYgYmFjayBpbiBzbWFydCBpZGxlIG9uIEVTMS4wICovCisJaWYgKG9tYXBfcmV2ID09IE9NQVA0NDMwX0VTMV8wKQorCQl3cml0ZWwoMHg4MDAwMDAwMCwgJmVtaWYtPmVtaWZfcHdyX21nbXRfY3RybCk7Cit9CisKK3ZvaWQgZG1tX2luaXQodTMyIGJhc2UpCit7CisJY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICpsaXNhX21hcF9yZWdzOworCisjaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKKwllbWlmX2dldF9kbW1fcmVncygmbGlzYV9tYXBfcmVncyk7CisjZWxzZQorCXUzMiBlbWlmMV9zaXplLCBlbWlmMl9zaXplLCBtYXBwZWRfc2l6ZSwgc2VjdGlvbl9tYXAgPSAwOworCXUzMiBzZWN0aW9uX2NudCwgc3lzX2FkZHI7CisJc3RydWN0IGRtbV9saXNhX21hcF9yZWdzIGxpc19tYXBfcmVnc19jYWxjdWxhdGVkID0gezB9OworCisJbWFwcGVkX3NpemUgPSAwOworCXNlY3Rpb25fY250ID0gMzsKKwlzeXNfYWRkciA9IENPTkZJR19TWVNfU0RSQU1fQkFTRTsKKwllbWlmMV9zaXplID0gZW1pZl9zaXplc1swXTsKKwllbWlmMl9zaXplID0gZW1pZl9zaXplc1sxXTsKKwlkZWJ1ZygiZW1pZjFfc2l6ZSAweCV4IGVtaWYyX3NpemUgMHgleFxuIiwgZW1pZjFfc2l6ZSwgZW1pZjJfc2l6ZSk7CisKKwlpZiAoIWVtaWYxX3NpemUgJiYgIWVtaWYyX3NpemUpCisJCXJldHVybjsKKworCS8qIHN5bW1ldHJpYyBpbnRlcmxlYXZlZCBzZWN0aW9uICovCisJaWYgKGVtaWYxX3NpemUgJiYgZW1pZjJfc2l6ZSkgeworCQltYXBwZWRfc2l6ZSA9IG1pbihlbWlmMV9zaXplLCBlbWlmMl9zaXplKTsKKwkJc2VjdGlvbl9tYXAgPSBETU1fTElTQV9NQVBfSU5URVJMRUFWRURfQkFTRV9WQUw7CisJCXNlY3Rpb25fbWFwIHw9IDAgPDwgRU1JRl9TRFJDX0FERFJfU0hJRlQ7CisJCS8qIG9ubHkgTVNCICovCisJCXNlY3Rpb25fbWFwIHw9IChzeXNfYWRkciA+PiAyNCkgPDwKKwkJCQlFTUlGX1NZU19BRERSX1NISUZUOworCQlzZWN0aW9uX21hcCB8PSBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAobWFwcGVkX3NpemUgKiAyKQorCQkJCTw8IEVNSUZfU1lTX1NJWkVfU0hJRlQ7CisJCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8zID0gc2VjdGlvbl9tYXA7CisJCWVtaWYxX3NpemUgLT0gbWFwcGVkX3NpemU7CisJCWVtaWYyX3NpemUgLT0gbWFwcGVkX3NpemU7CisJCXN5c19hZGRyICs9IChtYXBwZWRfc2l6ZSAqIDIpOworCQlzZWN0aW9uX2NudC0tOworCX0KKworCS8qCisJICogU2luZ2xlIEVNSUYgc2VjdGlvbih3ZSBjYW4gaGF2ZSBhIG1heGltdW0gb2YgMSBzaW5nbGUgRU1JRgorCSAqIHNlY3Rpb24tIGVpdGhlciBFTUlGMSBvciBFTUlGMiBvciBub25lLCBidXQgbm90IGJvdGgpCisJICovCisJaWYgKGVtaWYxX3NpemUpIHsKKwkJc2VjdGlvbl9tYXAgPSBETU1fTElTQV9NQVBfRU1JRjFfT05MWV9CQVNFX1ZBTDsKKwkJc2VjdGlvbl9tYXAgfD0gZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKGVtaWYxX3NpemUpCisJCQkJPDwgRU1JRl9TWVNfU0laRV9TSElGVDsKKwkJLyogb25seSBNU0IgKi8KKwkJc2VjdGlvbl9tYXAgfD0gKG1hcHBlZF9zaXplID4+IDI0KSA8PAorCQkJCUVNSUZfU0RSQ19BRERSX1NISUZUOworCQkvKiBvbmx5IE1TQiAqLworCQlzZWN0aW9uX21hcCB8PSAoc3lzX2FkZHIgPj4gMjQpIDw8IEVNSUZfU1lTX0FERFJfU0hJRlQ7CisJCXNlY3Rpb25fY250LS07CisJfQorCWlmIChlbWlmMl9zaXplKSB7CisJCXNlY3Rpb25fbWFwID0gRE1NX0xJU0FfTUFQX0VNSUYyX09OTFlfQkFTRV9WQUw7CisJCXNlY3Rpb25fbWFwIHw9IGdldF9kbW1fc2VjdGlvbl9zaXplX21hcChlbWlmMl9zaXplKSA8PAorCQkJCUVNSUZfU1lTX1NJWkVfU0hJRlQ7CisJCS8qIG9ubHkgTVNCICovCisJCXNlY3Rpb25fbWFwIHw9IG1hcHBlZF9zaXplID4+IDI0IDw8IEVNSUZfU0RSQ19BRERSX1NISUZUOworCQkvKiBvbmx5IE1TQiAqLworCQlzZWN0aW9uX21hcCB8PSBzeXNfYWRkciA+PiAyNCA8PCBFTUlGX1NZU19BRERSX1NISUZUOworCQlzZWN0aW9uX2NudC0tOworCX0KKworCWlmIChzZWN0aW9uX2NudCA9PSAyKSB7CisJCS8qIE9ubHkgMSBzZWN0aW9uIC0gZWl0aGVyIHN5bW1ldHJpYyBvciBzaW5nbGUgRU1JRiAqLworCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMyA9IHNlY3Rpb25fbWFwOworCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMiA9IDA7CisJCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8xID0gMDsKKwl9IGVsc2UgeworCQkvKiAyIHNlY3Rpb25zIC0gMSBzeW1tZXRyaWMsIDEgc2luZ2xlIEVNSUYgKi8KKwkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzIgPSBzZWN0aW9uX21hcDsKKwkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzEgPSAwOworCX0KKworCS8qIFRSQVAgZm9yIGludmFsaWQgVElMRVIgbWFwcGluZ3MgaW4gc2VjdGlvbiAwICovCisJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzAgPSBETU1fTElTQV9NQVBfMF9JTlZBTF9BRERSX1RSQVA7CisKKwlsaXNhX21hcF9yZWdzID0gJmxpc19tYXBfcmVnc19jYWxjdWxhdGVkOworI2VuZGlmCisJc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICpod19saXNhX21hcF9yZWdzID0KKwkgICAgKHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqKWJhc2U7CisKKwl3cml0ZWwoMCwgJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zKTsKKwl3cml0ZWwoMCwgJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yKTsKKwl3cml0ZWwoMCwgJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xKTsKKwl3cml0ZWwoMCwgJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wKTsKKworCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMywKKwkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zKTsKKwl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzIsCisJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMik7CisJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xLAorCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzEpOworCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCwKKwkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wKTsKKworCWlmIChvbWFwX3JldmlzaW9uKCkgPj0gT01BUDQ0NjBfRVMxXzApIHsKKwkJaHdfbGlzYV9tYXBfcmVncyA9CisJCSAgICAoc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICopTUFfQkFTRTsKKworCQl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMsCisJCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMpOworCQl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzIsCisJCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzIpOworCQl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzEsCisJCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzEpOworCQl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzAsCisJCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzApOworCX0KK30KKworLyoKKyAqIFNEUkFNIGluaXRpYWxpemF0aW9uOgorICogU0RSQU0gaW5pdGlhbGl6YXRpb24gaGFzIHR3byBwYXJ0czoKKyAqIDEuIENvbmZpZ3VyaW5nIHRoZSBTRFJBTSBkZXZpY2UKKyAqIDIuIFVwZGF0ZSB0aGUgQUMgdGltaW5ncyByZWxhdGVkIHBhcmFtZXRlcnMgaW4gdGhlIEVNSUYgbW9kdWxlCisgKiAoMSkgc2hvdWxkIGJlIGRvbmUgb25seSBvbmNlIGFuZCBzaG91bGQgbm90IGJlIGRvbmUgd2hpbGUgd2UgYXJlCisgKiBydW5uaW5nIGZyb20gU0RSQU0uCisgKiAoMikgY2FuIGFuZCBzaG91bGQgYmUgZG9uZSBtb3JlIHRoYW4gb25jZSBpZiBPUFAgY2hhbmdlcy4KKyAqIFBhcnRpY3VsYXJseSwgdGhpcyBtYXkgYmUgbmVlZGVkIHdoZW4gd2UgYm9vdCB3aXRob3V0IFNQTCBhbmQKKyAqIGFuZCB1c2luZyBDb25maWd1cmF0aW9uIEhlYWRlcihDSCkuIFJPTSBjb2RlIHN1cHBvcnRzIG9ubHkgYXQgNTAlIE9QUAorICogYXQgYm9vdCAobG93IHBvd2VyIGJvb3QpLiBTbyB1LWJvb3QgaGFzIHRvIHN3aXRjaCB0byBPUFAxMDAgYW5kIHVwZGF0ZQorICogdGhlIGZyZXF1ZW5jeS4gU28sCisgKiBEb2luZyAoMSkgYW5kICgyKSBtYWtlcyBzZW5zZSAtIGZpcnN0IHRpbWUgaW5pdGlhbGl6YXRpb24KKyAqIERvaW5nICgyKSBhbmQgbm90ICgxKSBtYWtlcyBzZW5zZSAtIE9QUCBjaGFuZ2UgKHdoZW4gdXNpbmcgQ0gpCisgKiBEb2luZyAoMSkgYW5kIG5vdCAoMikgZG9lbid0IG1ha2Ugc2Vuc2UKKyAqIFNlZSBkb19zZHJhbV9pbml0KCkgZm9yIHRoZSBkZXRhaWxzCisgKi8KK3ZvaWQgc2RyYW1faW5pdCh2b2lkKQoreworCXUzMiBpbl9zZHJhbSwgc2l6ZV9wcm9nLCBzaXplX2RldGVjdDsKKworCWRlYnVnKCI+PnNkcmFtX2luaXQoKVxuIik7CisKKwlpZiAob21hcF9od19pbml0X2NvbnRleHQoKSA9PSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9TUEwpCisJCXJldHVybjsKKworCWluX3NkcmFtID0gcnVubmluZ19mcm9tX3NkcmFtKCk7CisJZGVidWcoImluX3NkcmFtID0gJWRcbiIsIGluX3NkcmFtKTsKKworCWlmICghaW5fc2RyYW0pCisJCWJ5cGFzc19kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfY29yZSk7CisKKworCWRvX3NkcmFtX2luaXQoRU1JRjFfQkFTRSk7CisJZG9fc2RyYW1faW5pdChFTUlGMl9CQVNFKTsKKworCWlmICghaW5fc2RyYW0pIHsKKwkJZG1tX2luaXQoRE1NX0JBU0UpOworCQllbWlmX3Bvc3RfaW5pdF9jb25maWcoRU1JRjFfQkFTRSk7CisJCWVtaWZfcG9zdF9pbml0X2NvbmZpZyhFTUlGMl9CQVNFKTsKKwl9CisKKwkvKiBmb3IgdGhlIHNoYWRvdyByZWdpc3RlcnMgdG8gdGFrZSBlZmZlY3QgKi8KKwlmcmVxX3VwZGF0ZV9jb3JlKCk7CisKKwkvKiBEbyBzb21lIHRlc3RpbmcgYWZ0ZXIgdGhlIGluaXQgKi8KKwlpZiAoIWluX3NkcmFtKSB7CisJCXNpemVfcHJvZyA9IG9tYXBfc2RyYW1fc2l6ZSgpOworCQlzaXplX2RldGVjdCA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKUNPTkZJR19TWVNfU0RSQU1fQkFTRSwKKwkJCQkJCXNpemVfcHJvZyk7CisJCS8qIENvbXBhcmUgd2l0aCB0aGUgc2l6ZSBwcm9ncmFtbWVkICovCisJCWlmIChzaXplX2RldGVjdCAhPSBzaXplX3Byb2cpIHsKKwkJCXByaW50ZigiU0RSQU06IGlkZW50aWZpZWQgc2l6ZSBub3Qgc2FtZSBhcyBleHBlY3RlZCIKKwkJCQkiIHNpemUgaWRlbnRpZmllZDogJXggZXhwZWN0ZWQ6ICV4XG4iLAorCQkJCXNpemVfZGV0ZWN0LAorCQkJCXNpemVfcHJvZyk7CisJCX0gZWxzZQorCQkJZGVidWcoImdldF9yYW1fc2l6ZSgpIHN1Y2Nlc3NmdWwiKTsKKwl9CisKKwlkZWJ1ZygiPDxzZHJhbV9pbml0KClcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL2h3aW5pdC1jb21tb24uYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9od2luaXQtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1NzA1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9od2luaXQtY29tbW9uLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKgorICogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgT01BUDQvNSBiYXNlZCBib2FyZHMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBBdXRob3IgOgorICoJQW5lZXNoIFYJPGFuZWVzaEB0aS5jb20+CisgKglTdGV2ZSBTYWtvbWFuCTxzdGV2ZUBzYWtvbWFuLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL2VtaWYuaD4KKyNpbmNsdWRlIDxhc20vb21hcF9jb21tb24uaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlcgorICogd2FzIGV4ZWN1dGVkIGJ5IHJvbSBjb2RlIHByaW9yIHRvIGNvbnRyb2wgb2YgdHJhbnNmZXIKKyAqIHRvIHRoZSBib290bG9hZGVyLiBTUEwgaXMgcmVzcG9uc2libGUgZm9yIHNhdmluZyBhbmQKKyAqIHBhc3NpbmcgdGhlIGJvb3RfcGFyYW1zIHBvaW50ZXIgdG8gdGhlIHUtYm9vdC4KKyAqLworc3RydWN0IG9tYXBfYm9vdF9wYXJhbWV0ZXJzIGJvb3RfcGFyYW1zIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuZGF0YSIpKSk7CisKKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisvKgorICogV2UgdXNlIHN0YXRpYyB2YXJpYWJsZXMgYmVjYXVzZSBnbG9iYWwgZGF0YSBpcyBub3QgcmVhZHkgeWV0LgorICogSW5pdGlhbGl6ZWQgZGF0YSBpcyBhdmFpbGFibGUgaW4gU1BMIHJpZ2h0IGZyb20gdGhlIGJlZ2lubmluZy4KKyAqIFdlIHdvdWxkIG5vdCB0eXBpY2FsbHkgbmVlZCB0byBzYXZlIHRoZXNlIHBhcmFtZXRlcnMgaW4gcmVndWxhcgorICogVS1Cb290LiBUaGlzIGlzIG5lZWRlZCBvbmx5IGluIFNQTCBhdCB0aGUgbW9tZW50LgorICovCit1MzIgb21hcF9ib290bW9kZSA9IE1NQ1NEX01PREVfRkFUOworCit1MzIgb21hcF9ib290X2RldmljZSh2b2lkKQoreworCXJldHVybiAodTMyKSAoYm9vdF9wYXJhbXMub21hcF9ib290ZGV2aWNlKTsKK30KKwordTMyIG9tYXBfYm9vdF9tb2RlKHZvaWQpCit7CisJcmV0dXJuIG9tYXBfYm9vdG1vZGU7Cit9CisjZW5kaWYKKwordm9pZCBkb19zZXRfbXV4KHUzMiBiYXNlLCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29uc3QgKmFycmF5LCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgKnBhZCA9IChzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgKikgYXJyYXk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwYWQrKykKKwkJd3JpdGV3KHBhZC0+dmFsLCBiYXNlICsgcGFkLT5vZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRfbXV4X2NvbmZfcmVncyh2b2lkKQoreworCXN3aXRjaCAob21hcF9od19pbml0X2NvbnRleHQoKSkgeworCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfU1BMOgorCQlzZXRfbXV4Y29uZl9yZWdzX2Vzc2VudGlhbCgpOworCQlicmVhazsKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX1NQTDoKKyNpZmRlZiBDT05GSUdfU1lTX0VOQUJMRV9QQURTX0FMTAorCQlzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwoKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0ZST01fTk9SOgorCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfQ0g6CisJCXNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKCk7CisjaWZkZWYgQ09ORklHX1NZU19FTkFCTEVfUEFEU19BTEwKKwkJc2V0X211eGNvbmZfcmVnc19ub25fZXNzZW50aWFsKCk7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorfQorCit1MzIgY29ydGV4X3Jldih2b2lkKQoreworCisJdW5zaWduZWQgaW50IHJldjsKKworCS8qIFJlYWQgTWFpbiBJRCBSZWdpc3RlciAoTUlEUikgKi8KKwlhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzAsIGMwLCAwIiA6ICI9ciIgKHJldikpOworCisJcmV0dXJuIHJldjsKK30KKwordm9pZCBvbWFwX3Jldl9zdHJpbmcoY2hhciAqb21hcF9yZXZfc3RyaW5nKQoreworCXUzMiBvbWFwX3JldiA9IG9tYXBfcmV2aXNpb24oKTsKKwl1MzIgb21hcF92YXJpYW50ID0gKG9tYXBfcmV2ICYgMHhGRkZGMDAwMCkgPj4gMTY7CisJdTMyIG1ham9yX3JldiA9IChvbWFwX3JldiAmIDB4MDAwMDBGMDApID4+IDg7CisJdTMyIG1pbm9yX3JldiA9IChvbWFwX3JldiAmIDB4MDAwMDAwRjApID4+IDQ7CisKKwlzcHJpbnRmKG9tYXBfcmV2X3N0cmluZywgIk9NQVAleCBFUyV4LiV4Iiwgb21hcF92YXJpYW50LCBtYWpvcl9yZXYsCisJCW1pbm9yX3Jldik7Cit9CisKKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECitzdGF0aWMgdm9pZCBpbml0X2Jvb3RfcGFyYW1zKHZvaWQpCit7CisJYm9vdF9wYXJhbXNfcHRyID0gKHUzMiAqKSAmYm9vdF9wYXJhbXM7Cit9CisjZW5kaWYKKworLyoKKyAqIFJvdXRpbmU6IHNfaW5pdAorICogRGVzY3JpcHRpb246IERvZXMgZWFybHkgc3lzdGVtIGluaXQgb2Ygd2F0Y2hkb2csIG11eGluZywgIGFuZGNsb2NrcworICogV2F0Y2hkb2cgZGlzYWJsZSBpcyBkb25lIGFsd2F5cy4gRm9yIHRoZSByZXN0IHdoYXQgZ2V0cyBkb25lCisgKiBkZXBlbmRzIG9uIHRoZSBib290IG1vZGUgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZAorICogICAxLiBzX2luaXQgb2YgU1BMIHJ1bm5pbmcgZnJvbSBTUkFNCisgKiAgIDIuIHNfaW5pdCBvZiBVLUJvb3QgcnVubmluZyBmcm9tIEZMQVNICisgKiAgIDMuIHNfaW5pdCBvZiBVLUJvb3QgbG9hZGVkIHRvIFNEUkFNIGJ5IFNQTAorICogICA0LiBzX2luaXQgb2YgVS1Cb290IGxvYWRlZCB0byBTRFJBTSBieSBST00gY29kZSB1c2luZyB0aGUKKyAqCUNvbmZpZ3VyYXRpb24gSGVhZGVyIGZlYXR1cmUKKyAqIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgdG8gc2VlIHdoYXQgZ2V0cworICogZG9uZSBpbiBlYWNoIG9mIHRoZXNlIGNhc2VzCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIFNSQU0gc3RhY2suCisgKi8KK3ZvaWQgc19pbml0KHZvaWQpCit7CisJaW5pdF9vbWFwX3JldmlzaW9uKCk7CisJd2F0Y2hkb2dfaW5pdCgpOworCXNldF9tdXhfY29uZl9yZWdzKCk7CisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorCXNldHVwX2Nsb2Nrc19mb3JfY29uc29sZSgpOworCXByZWxvYWRlcl9jb25zb2xlX2luaXQoKTsKKwlkb19pb19zZXR0aW5ncygpOworI2VuZGlmCisJcHJjbV9pbml0KCk7CisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorCS8qIEZvciByZWd1bGFyIHUtYm9vdCBzZHJhbV9pbml0KCkgaXMgY2FsbGVkIGZyb20gZHJhbV9pbml0KCkgKi8KKwlzZHJhbV9pbml0KCk7CisJaW5pdF9ib290X3BhcmFtcygpOworI2VuZGlmCit9CisKKy8qCisgKiBSb3V0aW5lOiB3YWl0X2Zvcl9jb21tYW5kX2NvbXBsZXRlCisgKiBEZXNjcmlwdGlvbjogV2FpdCBmb3IgcG9zdGluZyB0byBmaW5pc2ggb24gd2F0Y2hkb2cKKyAqLwordm9pZCB3YWl0X2Zvcl9jb21tYW5kX2NvbXBsZXRlKHN0cnVjdCB3YXRjaGRvZyAqd2RfYmFzZSkKK3sKKwlpbnQgcGVuZGluZyA9IDE7CisJZG8geworCQlwZW5kaW5nID0gcmVhZGwoJndkX2Jhc2UtPnd3cHMpOworCX0gd2hpbGUgKHBlbmRpbmcpOworfQorCisvKgorICogUm91dGluZTogd2F0Y2hkb2dfaW5pdAorICogRGVzY3JpcHRpb246IFNodXQgZG93biB3YXRjaCBkb2dzCisgKi8KK3ZvaWQgd2F0Y2hkb2dfaW5pdCh2b2lkKQoreworCXN0cnVjdCB3YXRjaGRvZyAqd2QyX2Jhc2UgPSAoc3RydWN0IHdhdGNoZG9nICopV0RUMl9CQVNFOworCisJd3JpdGVsKFdEX1VOTE9DSzEsICZ3ZDJfYmFzZS0+d3Nwcik7CisJd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZSh3ZDJfYmFzZSk7CisJd3JpdGVsKFdEX1VOTE9DSzIsICZ3ZDJfYmFzZS0+d3Nwcik7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIFNEUkFNIHNpemUgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0KKyAqIGJhc2VkIG9uIERNTSBzZWN0aW9uIGNvbmZpZ3VyYXRpb25zCisgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzaXplIG9mIG1lbW9yeSBpbnN0YWxsZWQgbWF5IGJlCisgKiBkaWZmZXJlbnQgb24gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBib2FyZAorICovCit1MzIgb21hcF9zZHJhbV9zaXplKHZvaWQpCit7CisJdTMyIHNlY3Rpb24sIGksIHRvdGFsX3NpemUgPSAwLCBzaXplLCBhZGRyOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzZWN0aW9uCT0gX19yYXdfcmVhZGwoRE1NX0JBU0UgKyBpKjQpOworCQlhZGRyID0gc2VjdGlvbiAmIEVNSUZfU1lTX0FERFJfTUFTSzsKKwkJLyogU2VlIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkICovCisJCWlmICgoYWRkciA+PSBEUkFNX0FERFJfU1BBQ0VfU1RBUlQpICYmCisJCSAgICAoYWRkciA8IERSQU1fQUREUl9TUEFDRV9FTkQpKSB7CisJCQlzaXplID0gKChzZWN0aW9uICYgRU1JRl9TWVNfU0laRV9NQVNLKSA+PgorCQkJCSAgIEVNSUZfU1lTX1NJWkVfU0hJRlQpOworCQkJc2l6ZSA9IDEgPDwgc2l6ZTsKKwkJCXNpemUgKj0gU1pfMTZNOworCQkJdG90YWxfc2l6ZSArPSBzaXplOworCQl9CisJfQorCisJcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKKworLyoKKyAqIFJvdXRpbmU6IGRyYW1faW5pdAorICogRGVzY3JpcHRpb246IHNldHMgdWJvb3RzIGlkZWEgb2Ygc2RyYW0gc2l6ZQorICovCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJc2RyYW1faW5pdCgpOworCWdkLT5yYW1fc2l6ZSA9IG9tYXBfc2RyYW1fc2l6ZSgpOworCXJldHVybiAwOworfQorCisvKgorICogUHJpbnQgYm9hcmQgaW5mb3JtYXRpb24KKyAqLworaW50IGNoZWNrYm9hcmQodm9pZCkKK3sKKwlwdXRzKHN5c2luZm8uYm9hcmRfc3RyaW5nKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgc3RhcnRfYXJtYm9vdC4gWW91IGNhbiByZWxpYWJseSB1c2Ugc3RhdGljCisqIGRhdGEuIEFueSBib290LXRpbWUgZnVuY3Rpb24gdGhhdCByZXF1aXJlIHN0YXRpYyBkYXRhIHNob3VsZCBiZQorKiBjYWxsZWQgZnJvbSBoZXJlCisqLworaW50IGFyY2hfY3B1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBnZXRfZGV2aWNlX3R5cGUoKTogdGVsbCBpZiBHUC9IUy9FTVUvVFNUCisgKi8KK3UzMiBnZXRfZGV2aWNlX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFByaW50IENQVSBpbmZvcm1hdGlvbgorICovCitpbnQgcHJpbnRfY3B1aW5mbyh2b2lkKQoreworCWNoYXIgcmV2X3N0cmluZ19idWZmZXJbNTBdOworCisJb21hcF9yZXZfc3RyaW5nKHJldl9zdHJpbmdfYnVmZmVyKTsKKwlwcmludGYoIkNQVSAgOiAlc1xuIiwgcmV2X3N0cmluZ19idWZmZXIpOworCisJcmV0dXJuIDA7Cit9CisjaWZuZGVmIENPTkZJR19TWVNfRENBQ0hFX09GRgordm9pZCBlbmFibGVfY2FjaGVzKHZvaWQpCit7CisJLyogRW5hYmxlIEQtY2FjaGUuIEktY2FjaGUgaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YXJ0LlMgKi8KKwlkY2FjaGVfZW5hYmxlKCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9sb3dsZXZlbF9pbml0LlMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vbG93bGV2ZWxfaW5pdC5TCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9sb3dsZXZlbF9pbml0LlMKcmVuYW1lIHRvIGFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9sb3dsZXZlbF9pbml0LlMKaW5kZXggOTE1MjVlYy4uMzVmMzhhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2xvd2xldmVsX2luaXQuUworKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vbG93bGV2ZWxfaW5pdC5TCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxhc20vYXJjaC9vbWFwNC5oPgotI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwLmg+CisKIC5nbG9iYWwgc2F2ZV9ib290X3BhcmFtcwogc2F2ZV9ib290X3BhcmFtczoKIAkvKgpAQCAtNDMsMjEgKzQzLDQwIEBACiAJY21wCXIyLCByMAogCWJsdAkxZgogCi0JLyogU3RvcmUgdGhlIGJvb3QgZGV2aWNlIGluIG9tYXA0X2Jvb3RfZGV2aWNlICovCi0JbGRyICAgICByMiwgW3IwLCAjQk9PVF9ERVZJQ0VfT0ZGU0VUXQlAIHIxIDwtIHZhbHVlIG9mIGJvb3QgZGV2aWNlCisJLyoKKwkgKiBzdG9yZSB0aGUgYm9vdCBwYXJhbXMgcGFzc2VkIGZyb20gcm9tIGNvZGUgb3Igc2F2ZWQKKwkgKiBhbmQgcGFzc2VkIGJ5IFNQTAorCSAqLworCWNtcAlyMCwgIzAKKwliZXEJMWYKKwlsZHIJcjEsID1ib290X3BhcmFtcworCXN0cglyMCwgW3IxXQorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKwkvKiBTdG9yZSB0aGUgYm9vdCBkZXZpY2UgaW4gb21hcF9ib290X2RldmljZSAqLworCWxkcmIJcjIsIFtyMCwgI0JPT1RfREVWSUNFX09GRlNFVF0JQCByMSA8LSB2YWx1ZSBvZiBib290IGRldmljZQogCWFuZAlyMiwgI0JPT1RfREVWSUNFX01BU0sKLQlsZHIJcjMsID1vbWFwNF9ib290X2RldmljZQotCXN0ciAgICAgcjIsIFtyM10JCQlAIG9tYXA0X2Jvb3RfZGV2aWNlIDwtIHIxCisJbGRyCXIzLCA9Ym9vdF9wYXJhbXMKKwlzdHJiCXIyLCBbcjMsICNCT09UX0RFVklDRV9PRkZTRVRdCUAgb21hcF9ib290X2RldmljZSA8LSByMQogCi0JLyogU3RvcmUgdGhlIGJvb3QgbW9kZSAocmF3L0ZBVCkgaW4gb21hcDRfYm9vdF9tb2RlICovCisJLyogYm9vdCBtb2RlIGlzIHBhc3NlZCBvbmx5IGZvciBkZXZpY2VzIHRoYXQgY2FuIHJhdy9mYXQgbW9kZSAqLworCWNtcAlyMiwgIzIKKwlibHQJMmYKKwljbXAJcjIsICM3CisJYmd0CTJmCisJLyogU3RvcmUgdGhlIGJvb3QgbW9kZSAocmF3L0ZBVCkgaW4gb21hcF9ib290X21vZGUgKi8KIAlsZHIJcjIsIFtyMCwgI0RFVl9ERVNDX1BUUl9PRkZTRVRdCUAgZ2V0IHRoZSBkZXZpY2UgZGVzY3JpcHRvciBwdHIKIAlsZHIJcjIsIFtyMiwgI0RFVl9EQVRBX1BUUl9PRkZTRVRdCUAgZ2V0IHRoZSBwRGV2aWNlRGF0YSBwdHIKIAlsZHIJcjIsIFtyMiwgI0JPT1RfTU9ERV9PRkZTRVRdCUAgZ2V0IHRoZSBib290IG1vZGUKLQlsZHIJcjMsID1vbWFwNF9ib290X21vZGUKKwlsZHIJcjMsID1vbWFwX2Jvb3Rtb2RlCiAJc3RyCXIyLCBbcjNdCisjZW5kaWYKKzI6CisJbGRyYglyMiwgW3IwLCAjQ0hfRkxBR1NfT0ZGU0VUXQorCWxkcglyMywgPWJvb3RfcGFyYW1zCisJc3RyYglyMiwgW3IzLCAjQ0hfRkxBR1NfT0ZGU0VUXQogMToKIAlieAlscgotI2VuZGlmCisKIAogLmdsb2JsIGxvd2xldmVsX2luaXQKIGxvd2xldmVsX2luaXQ6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvbWVtLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vbWVtLWNvbW1vbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvbWVtLmMKcmVuYW1lIHRvIGFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9tZW0tY29tbW9uLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9zcGwuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9zcGwuYwppbmRleCAyYzU5ZDJiLi5kNmQ3ZDY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vc3BsLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL3NwbC5jCkBAIC0zOCw2ICszOCw3IEBACiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCit1MzIqIGJvb3RfcGFyYW1zX3B0ciA9IE5VTEw7CiBzdHJ1Y3Qgc3BsX2ltYWdlX2luZm8gc3BsX2ltYWdlOwogCiAvKiBEZWZpbmUgZ2xvYmFsIGRhdGEgc3RydWN0dXJlIHBvaW50ZXIgdG8gaXQqLwpAQCAtOTIsMTIgKzkzLDE2IEBACiAKIHN0YXRpYyB2b2lkIGp1bXBfdG9faW1hZ2Vfbm9fYXJncyh2b2lkKQogewotCXR5cGVkZWYgdm9pZCAoKmltYWdlX2VudHJ5X25vYXJnc190KSh2b2lkKV9fYXR0cmlidXRlX18gKChub3JldHVybikpOworCXR5cGVkZWYgdm9pZCAoKmltYWdlX2VudHJ5X25vYXJnc190KSh1MzIgKilfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKIAlpbWFnZV9lbnRyeV9ub2FyZ3NfdCBpbWFnZV9lbnRyeSA9CiAJCQkoaW1hZ2VfZW50cnlfbm9hcmdzX3QpIHNwbF9pbWFnZS5lbnRyeV9wb2ludDsKIAogCWRlYnVnKCJpbWFnZSBlbnRyeSBwb2ludDogMHglWFxuIiwgc3BsX2ltYWdlLmVudHJ5X3BvaW50KTsKLQlpbWFnZV9lbnRyeSgpOworCS8qIFBhc3MgdGhlIHNhdmVkIGJvb3RfcGFyYW1zIGZyb20gcm9tIGNvZGUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19WSVJUSU8pIHx8IGRlZmluZWQoQ09ORklHX1pFQlUpCisJaW1hZ2VfZW50cnkgPSAweDgwMTAwMDAwOworI2VuZGlmCisJaW1hZ2VfZW50cnkoKHUzMiAqKSZib290X3BhcmFtc19wdHIpOwogfQogCiB2b2lkIGp1bXBfdG9faW1hZ2Vfbm9fYXJncyh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9NYWtlZmlsZQppbmRleCBlN2VlMGI4Li44MzE2MGEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L01ha2VmaWxlCkBAIC0yNSwxNyArMjUsMTAgQEAKIAogTElCCT0gICQob2JqKWxpYiQoU09DKS5vCiAKLVNPQkpTCSs9IGxvd2xldmVsX2luaXQubwotCi1DT0JKUwkrPSBib2FyZC5vCitDT0JKUwkrPSBzZHJhbV9lbHBpZGEubworQ09CSlMJKz0gaHdpbml0Lm8KIENPQkpTCSs9IGNsb2Nrcy5vCiBDT0JKUwkrPSBlbWlmLm8KLUNPQkpTCSs9IHNkcmFtX2VscGlkYS5vCi0KLWlmbmRlZiBDT05GSUdfU1BMX0JVSUxECi1DT0JKUwkrPSBtZW0ubwotQ09CSlMJKz0gc3lzX2luZm8ubwotZW5kaWYKIAogU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvYm9hcmQuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9ib2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDk3ZTNlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9ib2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLS8qCi0gKgotICogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgT01BUDQgYmFzZWQgYm9hcmRzCi0gKgotICogKEMpIENvcHlyaWdodCAyMDEwCi0gKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+Ci0gKgotICogQXV0aG9yIDoKLSAqCUFuZWVzaCBWCTxhbmVlc2hAdGkuY29tPgotICoJU3RldmUgU2Frb21hbgk8c3RldmVAc2Frb21hbi5jb20+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9hcm12Ny5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2VtaWYuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0jaW5jbHVkZSAib21hcDRfbXV4X2RhdGEuaCIKLQotREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KLXUzMiAqY29uc3Qgb21hcDRfcmV2aXNpb24gPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX09NQVA0X1JFVjsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzQ0eHhbNl0gPSB7Ci0JeyAodm9pZCAqKU9NQVA0NFhYX0dQSU8xX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKLQl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzJfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPM19CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyAodm9pZCAqKU9NQVA0NFhYX0dQSU80X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKLQl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzVfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPNl9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCi19OwotCi1jb25zdCBzdHJ1Y3QgZ3Bpb19iYW5rICpjb25zdCBvbWFwX2dwaW9fYmFuayA9IGdwaW9fYmFua180NHh4OwotCi0jaWZkZWYgQ09ORklHX1NQTF9CVUlMRAotLyoKLSAqIFdlIHVzZSBzdGF0aWMgdmFyaWFibGVzIGJlY2F1c2UgZ2xvYmFsIGRhdGEgaXMgbm90IHJlYWR5IHlldC4KLSAqIEluaXRpYWxpemVkIGRhdGEgaXMgYXZhaWxhYmxlIGluIFNQTCByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcuCi0gKiBXZSB3b3VsZCBub3QgdHlwaWNhbGx5IG5lZWQgdG8gc2F2ZSB0aGVzZSBwYXJhbWV0ZXJzIGluIHJlZ3VsYXIKLSAqIFUtQm9vdC4gVGhpcyBpcyBuZWVkZWQgb25seSBpbiBTUEwgYXQgdGhlIG1vbWVudC4KLSAqLwotdTMyIG9tYXA0X2Jvb3RfZGV2aWNlID0gQk9PVF9ERVZJQ0VfTU1DMTsKLXUzMiBvbWFwNF9ib290X21vZGUgPSBNTUNTRF9NT0RFX0ZBVDsKLQotdTMyIG9tYXBfYm9vdF9kZXZpY2Uodm9pZCkKLXsKLQlyZXR1cm4gb21hcDRfYm9vdF9kZXZpY2U7Ci19Ci0KLXUzMiBvbWFwX2Jvb3RfbW9kZSh2b2lkKQotewotCXJldHVybiBvbWFwNF9ib290X21vZGU7Ci19Ci0KLS8qCi0gKiBTb21lIHR1bmluZyBvZiBJT3MgZm9yIG9wdGltYWwgcG93ZXIgYW5kIHBlcmZvcm1hbmNlCi0gKi8KLXN0YXRpYyB2b2lkIGRvX2lvX3NldHRpbmdzKHZvaWQpCi17Ci0JdTMyIGxwZGRyMmlvOwotCXN0cnVjdCBjb250cm9sX2xwZGRyMmlvX3JlZ3MgKmxwZGRyMmlvX3JlZ3MgPQotCQkoc3RydWN0IGNvbnRyb2xfbHBkZHIyaW9fcmVncyAqKUxQRERSMl9JT19SRUdTX0JBU0U7Ci0Jc3RydWN0IG9tYXA0X3N5c19jdHJsX3JlZ3MgKmNvbnN0IGN0cmwgPQotCQkoc3RydWN0IG9tYXA0X3N5c19jdHJsX3JlZ3MgKilTWVNDVFJMX0dFTkVSQUxfQ09SRV9CQVNFOwotCi0JdTMyIG9tYXA0X3JldiA9IG9tYXBfcmV2aXNpb24oKTsKLQotCWlmIChvbWFwNF9yZXYgPT0gT01BUDQ0MzBfRVMxXzApCi0JCWxwZGRyMmlvID0gQ09OVFJPTF9MUEREUjJJT19TTEVXXzEyNVBTX0RSVjhfUFVMTF9ET1dOOwotCWVsc2UgaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzJfMCkKLQkJbHBkZHIyaW8gPSBDT05UUk9MX0xQRERSMklPX1NMRVdfMzI1UFNfRFJWOF9HQVRFX0tFRVBFUjsKLQllbHNlCi0JCWxwZGRyMmlvID0gQ09OVFJPTF9MUEREUjJJT19TTEVXXzMxNVBTX0RSVjEyX1BVTExfRE9XTjsKLQotCS8qIEVNSUYxICovCi0Jd3JpdGVsKGxwZGRyMmlvLCAmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzFfMCk7Ci0Jd3JpdGVsKGxwZGRyMmlvLCAmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzFfMSk7Ci0JLyogTm8gcHVsbCBmb3IgR1IxMCBhcyBwZXIgaHcgdGVhbSdzIHJlY29tbWVuZGF0aW9uICovCi0Jd3JpdGVsKGxwZGRyMmlvICYgfkxQRERSMklPX0dSMTBfV0RfTUFTSywKLQkJJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzIpOwotCXdyaXRlbChDT05UUk9MX0xQRERSMklPXzNfVkFMLCAmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzFfMyk7Ci0KLQkvKiBFTUlGMiAqLwotCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8yXzApOwotCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8yXzEpOwotCS8qIE5vIHB1bGwgZm9yIEdSMTAgYXMgcGVyIGh3IHRlYW0ncyByZWNvbW1lbmRhdGlvbiAqLwotCXdyaXRlbChscGRkcjJpbyAmIH5MUEREUjJJT19HUjEwX1dEX01BU0ssCi0JCSZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMl8yKTsKLQl3cml0ZWwoQ09OVFJPTF9MUEREUjJJT18zX1ZBTCwgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8yXzMpOwotCi0JLyoKLQkgKiBTb21lIG9mIHRoZXNlIHNldHRpbmdzIChUUklNIHZhbHVlcykgY29tZSBmcm9tIGVGdXNlIGFuZCBhcmUKLQkgKiBpbiB0dXJuIHByb2dyYW1tZWQgaW4gdGhlIGVGdXNlIGF0IG1hbnVmYWN0dXJpbmcgdGltZSBhZnRlcgotCSAqIGNhbGlicmF0aW9uIG9mIHRoZSBkZXZpY2UuIERvIHRoZSBzb2Z0d2FyZSBvdmVyLXJpZGUgb25seSBpZgotCSAqIHRoZSBkZXZpY2UgaXMgbm90IGNvcnJlY3RseSB0cmltbWVkCi0JICovCi0JaWYgKCEocmVhZGwoJmN0cmwtPmNvbnRyb2xfc3RkX2Z1c2Vfb3BwX2JnYXApICYgMHhGRkZGKSkgewotCi0JCXdyaXRlbChMRE9TUkFNX1ZPTFRfQ1RSTF9PVkVSUklERSwKLQkJCSZjdHJsLT5jb250cm9sX2xkb3NyYW1faXZhX3ZvbHRhZ2VfY3RybCk7Ci0KLQkJd3JpdGVsKExET1NSQU1fVk9MVF9DVFJMX09WRVJSSURFLAotCQkJJmN0cmwtPmNvbnRyb2xfbGRvc3JhbV9tcHVfdm9sdGFnZV9jdHJsKTsKLQotCQl3cml0ZWwoTERPU1JBTV9WT0xUX0NUUkxfT1ZFUlJJREUsCi0JCQkmY3RybC0+Y29udHJvbF9sZG9zcmFtX2NvcmVfdm9sdGFnZV9jdHJsKTsKLQl9Ci0KLQlpZiAoIXJlYWRsKCZjdHJsLT5jb250cm9sX2VmdXNlXzEpKQotCQl3cml0ZWwoQ09OVFJPTF9FRlVTRV8xX09WRVJSSURFLCAmY3RybC0+Y29udHJvbF9lZnVzZV8xKTsKLQotCWlmICghcmVhZGwoJmN0cmwtPmNvbnRyb2xfZWZ1c2VfMikpCi0JCXdyaXRlbChDT05UUk9MX0VGVVNFXzJfT1ZFUlJJREUsICZjdHJsLT5jb250cm9sX2VmdXNlXzIpOwotfQotI2VuZGlmCi0KLXZvaWQgZG9fc2V0X211eCh1MzIgYmFzZSwgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvbnN0ICphcnJheSwgaW50IHNpemUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHBhZF9jb25mX2VudHJ5ICpwYWQgPSAoc3RydWN0IHBhZF9jb25mX2VudHJ5ICopIGFycmF5OwotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKywgcGFkKyspCi0JCXdyaXRldyhwYWQtPnZhbCwgYmFzZSArIHBhZC0+b2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X211eGNvbmZfcmVnc19lc3NlbnRpYWwodm9pZCkKLXsKLQlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9DT1JFLCBjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsLAotCQkgICBzaXplb2YoY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCkgLwotCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7Ci0KLQlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9XS1VQLCB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsLAotCQkgICBzaXplb2Yod2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCkgLwotCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7Ci0KLQlpZiAob21hcF9yZXZpc2lvbigpID49IE9NQVA0NDYwX0VTMV8wKQotCQlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9XS1VQLAotCQkJCSB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsXzQ0NjAsCi0JCQkJIHNpemVvZih3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsXzQ0NjApIC8KLQkJCQkgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfbXV4X2NvbmZfcmVncyh2b2lkKQotewotCXN3aXRjaCAob21hcDRfaHdfaW5pdF9jb250ZXh0KCkpIHsKLQljYXNlIE9NQVBfSU5JVF9DT05URVhUX1NQTDoKLQkJc2V0X211eGNvbmZfcmVnc19lc3NlbnRpYWwoKTsKLQkJYnJlYWs7Ci0JY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9TUEw6Ci0JCXNldF9tdXhjb25mX3JlZ3Nfbm9uX2Vzc2VudGlhbCgpOwotCQlicmVhazsKLQljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0ZST01fTk9SOgotCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfQ0g6Ci0JCXNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKCk7Ci0JCXNldF9tdXhjb25mX3JlZ3Nfbm9uX2Vzc2VudGlhbCgpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB1MzIgY29ydGV4X2E5X3Jldih2b2lkKQotewotCi0JdW5zaWduZWQgaW50IHJldjsKLQotCS8qIFJlYWQgTWFpbiBJRCBSZWdpc3RlciAoTUlEUikgKi8KLQlhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzAsIGMwLCAwIiA6ICI9ciIgKHJldikpOwotCi0JcmV0dXJuIHJldjsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9vbWFwNF9yZXZpc2lvbih2b2lkKQotewotCS8qCi0JICogRm9yIHNvbWUgb2YgdGhlIEVTMi9FUzEgYm9hcmRzIElEX0NPREUgaXMgbm90IHJlbGlhYmxlOgotCSAqIEFsc28sIEVTMSBhbmQgRVMyIGhhdmUgZGlmZmVyZW50IEFSTSByZXZpc2lvbnMKLQkgKiBTbyB1c2UgQVJNIHJldmlzaW9uIGZvciBpZGVudGlmaWNhdGlvbgotCSAqLwotCXVuc2lnbmVkIGludCBhcm1fcmV2ID0gY29ydGV4X2E5X3JldigpOwotCi0Jc3dpdGNoIChhcm1fcmV2KSB7Ci0JY2FzZSBNSURSX0NPUlRFWF9BOV9SMFAxOgotCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzFfMDsKLQkJYnJlYWs7Ci0JY2FzZSBNSURSX0NPUlRFWF9BOV9SMVAyOgotCQlzd2l0Y2ggKHJlYWRsKENPTlRST0xfSURfQ09ERSkpIHsKLQkJY2FzZSBPTUFQNDQzMF9DT05UUk9MX0lEX0NPREVfRVMyXzA6Ci0JCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMDsKLQkJCWJyZWFrOwotCQljYXNlIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMToKLQkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX0VTMl8xOwotCQkJYnJlYWs7Ci0JCWNhc2UgT01BUDQ0MzBfQ09OVFJPTF9JRF9DT0RFX0VTMl8yOgotCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX0VTMl8wOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBNSURSX0NPUlRFWF9BOV9SMVAzOgotCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMzsKLQkJYnJlYWs7Ci0JY2FzZSBNSURSX0NPUlRFWF9BOV9SMlAxMDoKLQkJc3dpdGNoIChyZWFkbChDT05UUk9MX0lEX0NPREUpKSB7Ci0JCWNhc2UgT01BUDQ0NjBfQ09OVFJPTF9JRF9DT0RFX0VTMV8wOgotCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0NjBfRVMxXzA7Ci0JCQlicmVhazsKLQkJY2FzZSBPTUFQNDQ2MF9DT05UUk9MX0lEX0NPREVfRVMxXzE6Ci0JCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQ2MF9FUzFfMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0NjBfRVMxXzA7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9TSUxJQ09OX0lEX0lOVkFMSUQ7Ci0JCWJyZWFrOwotCX0KLX0KLQotdm9pZCBvbWFwX3Jldl9zdHJpbmcoY2hhciAqb21hcDRfcmV2X3N0cmluZykKLXsKLQl1MzIgb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOwotCXUzMiBvbWFwNF92YXJpYW50ID0gKG9tYXA0X3JldiAmIDB4RkZGRjAwMDApID4+IDE2OwotCXUzMiBtYWpvcl9yZXYgPSAob21hcDRfcmV2ICYgMHgwMDAwMEYwMCkgPj4gODsKLQl1MzIgbWlub3JfcmV2ID0gKG9tYXA0X3JldiAmIDB4MDAwMDAwRjApID4+IDQ7Ci0KLQlzcHJpbnRmKG9tYXA0X3Jldl9zdHJpbmcsICJPTUFQJXggRVMleC4leCIsIG9tYXA0X3ZhcmlhbnQsIG1ham9yX3JldiwKLQkJbWlub3JfcmV2KTsKLX0KLQotLyoKLSAqIFJvdXRpbmU6IHNfaW5pdAotICogRGVzY3JpcHRpb246IERvZXMgZWFybHkgc3lzdGVtIGluaXQgb2Ygd2F0Y2hkb2csIG11eGluZywgIGFuZGNsb2NrcwotICogV2F0Y2hkb2cgZGlzYWJsZSBpcyBkb25lIGFsd2F5cy4gRm9yIHRoZSByZXN0IHdoYXQgZ2V0cyBkb25lCi0gKiBkZXBlbmRzIG9uIHRoZSBib290IG1vZGUgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZAotICogICAxLiBzX2luaXQgb2YgU1BMIHJ1bm5pbmcgZnJvbSBTUkFNCi0gKiAgIDIuIHNfaW5pdCBvZiBVLUJvb3QgcnVubmluZyBmcm9tIEZMQVNICi0gKiAgIDMuIHNfaW5pdCBvZiBVLUJvb3QgbG9hZGVkIHRvIFNEUkFNIGJ5IFNQTAotICogICA0LiBzX2luaXQgb2YgVS1Cb290IGxvYWRlZCB0byBTRFJBTSBieSBST00gY29kZSB1c2luZyB0aGUKLSAqCUNvbmZpZ3VyYXRpb24gSGVhZGVyIGZlYXR1cmUKLSAqIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgdG8gc2VlIHdoYXQgZ2V0cwotICogZG9uZSBpbiBlYWNoIG9mIHRoZXNlIGNhc2VzCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIFNSQU0gc3RhY2suCi0gKi8KLXZvaWQgc19pbml0KHZvaWQpCi17Ci0JaW5pdF9vbWFwNF9yZXZpc2lvbigpOwotCXdhdGNoZG9nX2luaXQoKTsKLQlzZXRfbXV4X2NvbmZfcmVncygpOwotI2lmZGVmIENPTkZJR19TUExfQlVJTEQKLQlzZXR1cF9jbG9ja3NfZm9yX2NvbnNvbGUoKTsKLQlwcmVsb2FkZXJfY29uc29sZV9pbml0KCk7Ci0JZG9faW9fc2V0dGluZ3MoKTsKLSNlbmRpZgotCXByY21faW5pdCgpOwotI2lmZGVmIENPTkZJR19TUExfQlVJTEQKLQkvKiBGb3IgcmVndWxhciB1LWJvb3Qgc2RyYW1faW5pdCgpIGlzIGNhbGxlZCBmcm9tIGRyYW1faW5pdCgpICovCi0Jc2RyYW1faW5pdCgpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBSb3V0aW5lOiB3YWl0X2Zvcl9jb21tYW5kX2NvbXBsZXRlCi0gKiBEZXNjcmlwdGlvbjogV2FpdCBmb3IgcG9zdGluZyB0byBmaW5pc2ggb24gd2F0Y2hkb2cKLSAqLwotdm9pZCB3YWl0X2Zvcl9jb21tYW5kX2NvbXBsZXRlKHN0cnVjdCB3YXRjaGRvZyAqd2RfYmFzZSkKLXsKLQlpbnQgcGVuZGluZyA9IDE7Ci0JZG8gewotCQlwZW5kaW5nID0gcmVhZGwoJndkX2Jhc2UtPnd3cHMpOwotCX0gd2hpbGUgKHBlbmRpbmcpOwotfQotCi0vKgotICogUm91dGluZTogd2F0Y2hkb2dfaW5pdAotICogRGVzY3JpcHRpb246IFNodXQgZG93biB3YXRjaCBkb2dzCi0gKi8KLXZvaWQgd2F0Y2hkb2dfaW5pdCh2b2lkKQotewotCXN0cnVjdCB3YXRjaGRvZyAqd2QyX2Jhc2UgPSAoc3RydWN0IHdhdGNoZG9nICopV0RUMl9CQVNFOwotCi0Jd3JpdGVsKFdEX1VOTE9DSzEsICZ3ZDJfYmFzZS0+d3Nwcik7Ci0Jd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZSh3ZDJfYmFzZSk7Ci0Jd3JpdGVsKFdEX1VOTE9DSzIsICZ3ZDJfYmFzZS0+d3Nwcik7Ci19Ci0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIFNEUkFNIHNpemUgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0KLSAqIGJhc2VkIG9uIERNTSBzZWN0aW9uIGNvbmZpZ3VyYXRpb25zCi0gKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzaXplIG9mIG1lbW9yeSBpbnN0YWxsZWQgbWF5IGJlCi0gKiBkaWZmZXJlbnQgb24gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBib2FyZAotICovCi11MzIgb21hcDRfc2RyYW1fc2l6ZSh2b2lkKQotewotCXUzMiBzZWN0aW9uLCBpLCB0b3RhbF9zaXplID0gMCwgc2l6ZSwgYWRkcjsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXNlY3Rpb24JPSBfX3Jhd19yZWFkbChPTUFQNDRYWF9ETU1fTElTQV9NQVBfQkFTRSArIGkqNCk7Ci0JCWFkZHIgPSBzZWN0aW9uICYgT01BUDQ0WFhfU1lTX0FERFJfTUFTSzsKLQkJLyogU2VlIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkICovCi0JCWlmICgoYWRkciA+PSBPTUFQNDRYWF9EUkFNX0FERFJfU1BBQ0VfU1RBUlQpICYmCi0JCSAgICAoYWRkciA8IE9NQVA0NFhYX0RSQU1fQUREUl9TUEFDRV9FTkQpKSB7Ci0JCQlzaXplCT0gKChzZWN0aW9uICYgT01BUDQ0WFhfU1lTX1NJWkVfTUFTSykgPj4KLQkJCQkgICBPTUFQNDRYWF9TWVNfU0laRV9TSElGVCk7Ci0JCQlzaXplCT0gMSA8PCBzaXplOwotCQkJc2l6ZQkqPSBTWl8xNk07Ci0JCQl0b3RhbF9zaXplICs9IHNpemU7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLQotLyoKLSAqIFJvdXRpbmU6IGRyYW1faW5pdAotICogRGVzY3JpcHRpb246IHNldHMgdWJvb3RzIGlkZWEgb2Ygc2RyYW0gc2l6ZQotICovCi1pbnQgZHJhbV9pbml0KHZvaWQpCi17Ci0Jc2RyYW1faW5pdCgpOwotCWdkLT5yYW1fc2l6ZSA9IG9tYXA0X3NkcmFtX3NpemUoKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUHJpbnQgYm9hcmQgaW5mb3JtYXRpb24KLSAqLwotaW50IGNoZWNrYm9hcmQodm9pZCkKLXsKLQlwdXRzKHN5c2luZm8uYm9hcmRfc3RyaW5nKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgc3RhcnRfYXJtYm9vdC4gWW91IGNhbiByZWxpYWJseSB1c2Ugc3RhdGljCi0qIGRhdGEuIEFueSBib290LXRpbWUgZnVuY3Rpb24gdGhhdCByZXF1aXJlIHN0YXRpYyBkYXRhIHNob3VsZCBiZQotKiBjYWxsZWQgZnJvbSBoZXJlCi0qLwotaW50IGFyY2hfY3B1X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2lmbmRlZiBDT05GSUdfU1lTX0wyQ0FDSEVfT0ZGCi12b2lkIHY3X291dGVyX2NhY2hlX2VuYWJsZSh2b2lkKQotewotCXNldF9wbDMxMF9jdHJsX3JlZygxKTsKLX0KLQotdm9pZCB2N19vdXRlcl9jYWNoZV9kaXNhYmxlKHZvaWQpCi17Ci0Jc2V0X3BsMzEwX2N0cmxfcmVnKDApOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX1NZU19EQ0FDSEVfT0ZGCi12b2lkIGVuYWJsZV9jYWNoZXModm9pZCkKLXsKLQkvKiBFbmFibGUgRC1jYWNoZS4gSS1jYWNoZSBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3RhcnQuUyAqLwotCWRjYWNoZV9lbmFibGUoKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2Nsb2Nrcy5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2Nsb2Nrcy5jCmluZGV4IDA5NWJhMzkuLjA4ODZmOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9jbG9ja3MuYworKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvY2xvY2tzLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogc3RydWN0IG9tYXA0X3ByY21fcmVncyAqY29uc3QgcHJjbSA9IChzdHJ1Y3Qgb21hcDRfcHJjbV9yZWdzICopMHg0QTAwNDEwMDsKIAotc3RhdGljIGNvbnN0IHUzMiBzeXNfY2xrX2FycmF5WzhdID0geworY29uc3QgdTMyIHN5c19jbGtfYXJyYXlbOF0gPSB7CiAJMTIwMDAwMDAsCSAgICAgICAvKiAxMiBNSHogKi8KIAkxMzAwMDAwMCwJICAgICAgIC8qIDEzIE1IeiAqLwogCTE2ODAwMDAwLAkgICAgICAgLyogMTYuOCBNSHogKi8KQEAgLTc5LDE0ICs3OSwxNCBAQAogfTsKIAogLyogZHBsbCBsb2NrZWQgYXQgMTU4NCBNSHogLSBNUFUgY2xrIGF0IDc5MiBNSHooT1BQIFR1cmJvIDQ0MzApICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIG1wdV9kcGxsX3BhcmFtc18xNTg0bWh6W05VTV9TWVNfQ0xLU10gPSB7Ci0JezY2LCAwLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkJLyogMTIgTUh6ICAgKi8KLQl7NzkyLCAxMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KLQl7MzMwLCA2LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxNi44IE1IeiAqLwotCXsxNjUsIDMsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCi0JezM5NiwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI2IE1IeiAgICovCi0Jezg4LCAyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkJLyogMjcgTUh6ICAgKi8KLQl7MTY1LCA3LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9CQkvKiAzOC40IE1IeiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBtcHVfZHBsbF9wYXJhbXNfMTYwMG1oeltOVU1fU1lTX0NMS1NdID0geworCXsyMDAsIDIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEyIE1IeiAgICovCisJezgwMCwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezYxOSwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezEyNSwgMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTkuMiBNSHogKi8KKwl7NDAwLCAxMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7ODAwLCAyNiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7MTI1LCA1LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9CQkvKiAzOC40IE1IeiAqLwogfTsKIAogLyogZHBsbCBsb2NrZWQgYXQgMTIwMCBNSHogLSBNUFUgY2xrIGF0IDYwMCBNSHogKi8KQEAgLTE2OCw3ICsxNjgsNiBAQAogCTc1MCwgMCwgMSwgMSwgLTEsIC0xLCAtMSwgLTEKIH07CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyB1c2JfZHBsbF9wYXJhbXNfMTkyMG1oeltOVU1fU1lTX0NMS1NdID0gewogCXs4MCwgMCwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJCS8qIDEyIE1IeiAgICovCiAJezk2MCwgMTIsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCkBAIC0xNzksOTggKzE3OCwxMCBAQAogCXsyNSwgMCwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfQkJLyogMzguNCBNSHogKi8KIH07CiAKLXN0YXRpYyBpbmxpbmUgdTMyIF9fZ2V0X3N5c19jbGtfaW5kZXgodm9pZCkKLXsKLQl1MzIgaW5kOwotCS8qCi0JICogRm9yIEVTMSB0aGUgUk9NIGNvZGUgY2FsaWJyYXRpb24gb2Ygc3lzIGNsb2NrIGlzIG5vdCByZWxpYWJsZQotCSAqIGR1ZSB0byBodyBpc3N1ZS4gU28sIHVzZSBoYXJkLWNvZGVkIHZhbHVlLiBJZiB0aGlzIHZhbHVlIGlzIG5vdAotCSAqIGNvcnJlY3QgZm9yIGFueSBib2FyZCBvdmVyLXJpZGUgdGhpcyBmdW5jdGlvbiBpbiBib2FyZCBmaWxlCi0JICogRnJvbSBFUzIuMCBvbndhcmRzIHlvdSB3aWxsIGdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20KLQkgKiBDTV9TWVNfQ0xLU0VMCi0JICovCi0JaWYgKG9tYXBfcmV2aXNpb24oKSA9PSBPTUFQNDQzMF9FUzFfMCkKLQkJaW5kID0gT01BUF9TWVNfQ0xLX0lORF8zOF80X01IWjsKLQllbHNlIHsKLQkJLyogU1lTX0NMS1NFTCAtIDEgdG8gbWF0Y2ggdGhlIGRwbGwgcGFyYW0gYXJyYXkgaW5kaWNlcyAqLwotCQlpbmQgPSAocmVhZGwoJnByY20tPmNtX3N5c19jbGtzZWwpICYKLQkJCUNNX1NZU19DTEtTRUxfU1lTX0NMS1NFTF9NQVNLKSAtIDE7Ci0JfQotCXJldHVybiBpbmQ7Ci19Ci0KLXUzMiBnZXRfc3lzX2Nsa19pbmRleCh2b2lkKQotCV9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiX19nZXRfc3lzX2Nsa19pbmRleCIpKSk7Ci0KLXUzMiBnZXRfc3lzX2Nsa19mcmVxKHZvaWQpCi17Ci0JdTggaW5kZXggPSBnZXRfc3lzX2Nsa19pbmRleCgpOwotCXJldHVybiBzeXNfY2xrX2FycmF5W2luZGV4XTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRvX2J5cGFzc19kcGxsKHUzMiAqY29uc3QgYmFzZSkKLXsKLQlzdHJ1Y3QgZHBsbF9yZWdzICpkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7Ci0KLQljbHJzZXRiaXRzX2xlMzIoJmRwbGxfcmVncy0+Y21fY2xrbW9kZV9kcGxsLAotCQkJQ01fQ0xLTU9ERV9EUExMX0RQTExfRU5fTUFTSywKLQkJCURQTExfRU5fRkFTVF9SRUxPQ0tfQllQQVNTIDw8Ci0JCQlDTV9DTEtNT0RFX0RQTExfRU5fU0hJRlQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfYnlwYXNzKHUzMiAqY29uc3QgYmFzZSkKK3ZvaWQgc2V0dXBfcG9zdF9kaXZpZGVycyh1MzIgKmNvbnN0IGJhc2UsIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKIAotCWlmICghd2FpdF9vbl92YWx1ZShTVF9EUExMX0NMS19NQVNLLCAwLCAmZHBsbF9yZWdzLT5jbV9pZGxlc3RfZHBsbCwKLQkJCQlMREVMQVkpKSB7Ci0JCXByaW50ZigiQnlwYXNzaW5nIERQTEwgZmFpbGVkICVwXG4iLCBiYXNlKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19sb2NrX2RwbGwodTMyICpjb25zdCBiYXNlKQotewotCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKLQotCWNscnNldGJpdHNfbGUzMigmZHBsbF9yZWdzLT5jbV9jbGttb2RlX2RwbGwsCi0JCSAgICAgIENNX0NMS01PREVfRFBMTF9EUExMX0VOX01BU0ssCi0JCSAgICAgIERQTExfRU5fTE9DSyA8PCBDTV9DTEtNT0RFX0RQTExfRU5fU0hJRlQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfbG9jayh1MzIgKmNvbnN0IGJhc2UpCi17Ci0Jc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOwotCi0JaWYgKCF3YWl0X29uX3ZhbHVlKFNUX0RQTExfQ0xLX01BU0ssIFNUX0RQTExfQ0xLX01BU0ssCi0JCSZkcGxsX3JlZ3MtPmNtX2lkbGVzdF9kcGxsLCBMREVMQVkpKSB7Ci0JCXByaW50ZigiRFBMTCBsb2NraW5nIGZhaWxlZCBmb3IgJXBcbiIsIGJhc2UpOwotCQloYW5nKCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19zZXR1cF9kcGxsKHUzMiAqY29uc3QgYmFzZSwgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXMsCi0JCQkJdTggbG9jaykKLXsKLQl1MzIgdGVtcDsKLQlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7Ci0KLQlieXBhc3NfZHBsbChiYXNlKTsKLQotCS8qIFNldCBNICYgTiAqLwotCXRlbXAgPSByZWFkbCgmZHBsbF9yZWdzLT5jbV9jbGtzZWxfZHBsbCk7Ci0KLQl0ZW1wICY9IH5DTV9DTEtTRUxfRFBMTF9NX01BU0s7Ci0JdGVtcCB8PSAocGFyYW1zLT5tIDw8IENNX0NMS1NFTF9EUExMX01fU0hJRlQpICYgQ01fQ0xLU0VMX0RQTExfTV9NQVNLOwotCi0JdGVtcCAmPSB+Q01fQ0xLU0VMX0RQTExfTl9NQVNLOwotCXRlbXAgfD0gKHBhcmFtcy0+biA8PCBDTV9DTEtTRUxfRFBMTF9OX1NISUZUKSAmIENNX0NMS1NFTF9EUExMX05fTUFTSzsKLQotCXdyaXRlbCh0ZW1wLCAmZHBsbF9yZWdzLT5jbV9jbGtzZWxfZHBsbCk7Ci0KLQkvKiBMb2NrICovCi0JaWYgKGxvY2spCi0JCWRvX2xvY2tfZHBsbChiYXNlKTsKLQogCS8qIFNldHVwIHBvc3QtZGl2aWRlcnMgKi8KIAlpZiAocGFyYW1zLT5tMiA+PSAwKQogCQl3cml0ZWwocGFyYW1zLT5tMiwgJmRwbGxfcmVncy0+Y21fZGl2X20yX2RwbGwpOwpAQCAtMjg0LDEwICsxOTUsMjkgQEAKIAkJd3JpdGVsKHBhcmFtcy0+bTYsICZkcGxsX3JlZ3MtPmNtX2Rpdl9tNl9kcGxsKTsKIAlpZiAocGFyYW1zLT5tNyA+PSAwKQogCQl3cml0ZWwocGFyYW1zLT5tNywgJmRwbGxfcmVncy0+Y21fZGl2X203X2RwbGwpOworfQogCi0JLyogV2FpdCB0aWxsIHRoZSBEUExMIGxvY2tzICovCi0JaWYgKGxvY2spCi0JCXdhaXRfZm9yX2xvY2soYmFzZSk7CisvKgorICogTG9jayBNUFUgZHBsbAorICoKKyAqIFJlc3VsdGluZyBNUFUgZnJlcXVlbmNpZXM6CisgKiA0NDMwIEVTMS4wCTogNjAwIE1IegorICogNDQzMCBFUzIueAk6IDc5MiBNSHogKE9QUCBUdXJibykKKyAqIDQ0NjAJCTogOTIwIE1IeiAoT1BQIFR1cmJvKSAtIERDQyBkaXNhYmxlZAorICovCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9tcHVfZHBsbF9wYXJhbXModm9pZCkKK3sKKwl1MzIgb21hcF9yZXYsIHN5c2Nsa19pbmQ7CisKKwlvbWFwX3JldiA9IG9tYXBfcmV2aXNpb24oKTsKKwlzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKworCWlmIChvbWFwX3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJcmV0dXJuICZtcHVfZHBsbF9wYXJhbXNfMTIwMG1oeltzeXNjbGtfaW5kXTsKKwllbHNlIGlmIChvbWFwX3JldiA8IE9NQVA0NDYwX0VTMV8wKQorCQlyZXR1cm4gJm1wdV9kcGxsX3BhcmFtc18xNjAwbWh6W3N5c2Nsa19pbmRdOworCWVsc2UKKwkJcmV0dXJuICZtcHVfZHBsbF9wYXJhbXNfMTg0MG1oeltzeXNjbGtfaW5kXTsKIH0KIAogY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfY29yZV9kcGxsX3BhcmFtcyh2b2lkKQpAQCAtMzA2LDIyOCArMjM2LDMzIEBACiAJfQogfQogCi11MzIgb21hcDRfZGRyX2Nsayh2b2lkKQorCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9wZXJfZHBsbF9wYXJhbXModm9pZCkKIHsKLQl1MzIgZGRyX2Nsaywgc3lzX2Nsa19raHo7Ci0JY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpjb3JlX2RwbGxfcGFyYW1zOwotCi0Jc3lzX2Nsa19raHogPSBnZXRfc3lzX2Nsa19mcmVxKCkgLyAxMDAwOwotCi0JY29yZV9kcGxsX3BhcmFtcyA9IGdldF9jb3JlX2RwbGxfcGFyYW1zKCk7Ci0KLQlkZWJ1Zygic3lzX2NsayAlZFxuICIsIHN5c19jbGtfa2h6ICogMTAwMCk7Ci0KLQkvKiBGaW5kIENvcmUgRFBMTCBsb2NrZWQgZnJlcXVlbmN5IGZpcnN0ICovCi0JZGRyX2NsayA9IHN5c19jbGtfa2h6ICogMiAqIGNvcmVfZHBsbF9wYXJhbXMtPm0gLwotCQkJKGNvcmVfZHBsbF9wYXJhbXMtPm4gKyAxKTsKLQkvKgotCSAqIEREUiBmcmVxdWVuY3kgaXMgUEhZX1JPT1RfQ0xLLzIKLQkgKiBQSFlfUk9PVF9DTEsgPSBGZHBsbC8yL00yCi0JICovCi0JZGRyX2NsayA9IGRkcl9jbGsgLyA0IC8gY29yZV9kcGxsX3BhcmFtcy0+bTI7Ci0KLQlkZHJfY2xrICo9IDEwMDA7CS8qIGNvbnZlcnQgdG8gSHogKi8KLQlkZWJ1ZygiZGRyX2NsayAlZFxuICIsIGRkcl9jbGspOwotCi0JcmV0dXJuIGRkcl9jbGs7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmcGVyX2RwbGxfcGFyYW1zXzE1MzZtaHpbc3lzY2xrX2luZF07CiB9CiAKLS8qCi0gKiBMb2NrIE1QVSBkcGxsCi0gKgotICogUmVzdWx0aW5nIE1QVSBmcmVxdWVuY2llczoKLSAqIDQ0MzAgRVMxLjAJOiA2MDAgTUh6Ci0gKiA0NDMwIEVTMi54CTogNzkyIE1IeiAoT1BQIFR1cmJvKQotICogNDQ2MAkJOiA5MjAgTUh6IChPUFAgVHVyYm8pIC0gRENDIGRpc2FibGVkCi0gKi8KLXZvaWQgY29uZmlndXJlX21wdV9kcGxsKHZvaWQpCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9pdmFfZHBsbF9wYXJhbXModm9pZCkKIHsKLQljb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKnBhcmFtczsKLQlzdHJ1Y3QgZHBsbF9yZWdzICptcHVfZHBsbF9yZWdzOwotCXUzMiBvbWFwNF9yZXYsIHN5c2Nsa19pbmQ7Ci0KLQlvbWFwNF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7Ci0Jc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7Ci0KLQlpZiAob21hcDRfcmV2ID09IE9NQVA0NDMwX0VTMV8wKQotCQlwYXJhbXMgPSAmbXB1X2RwbGxfcGFyYW1zXzEyMDBtaHpbc3lzY2xrX2luZF07Ci0JZWxzZSBpZiAob21hcDRfcmV2IDwgT01BUDQ0NjBfRVMxXzApCi0JCXBhcmFtcyA9ICZtcHVfZHBsbF9wYXJhbXNfMTU4NG1oeltzeXNjbGtfaW5kXTsKLQllbHNlCi0JCXBhcmFtcyA9ICZtcHVfZHBsbF9wYXJhbXNfMTg0MG1oeltzeXNjbGtfaW5kXTsKLQotCS8qIERDQyBhbmQgY2xvY2sgZGl2aWRlciBzZXR0aW5ncyBmb3IgNDQ2MCAqLwotCWlmIChvbWFwNF9yZXYgPj0gT01BUDQ0NjBfRVMxXzApIHsKLQkJbXB1X2RwbGxfcmVncyA9Ci0JCQkoc3RydWN0IGRwbGxfcmVncyAqKSZwcmNtLT5jbV9jbGttb2RlX2RwbGxfbXB1OwotCQlieXBhc3NfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX21wdSk7Ci0JCWNscmJpdHNfbGUzMigmcHJjbS0+Y21fbXB1X21wdV9jbGtjdHJsLAotCQkJTVBVX0NMS0NUUkxfQ0xLU0VMX0VNSUZfRElWX01PREVfTUFTSyk7Ci0JCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fbXB1X21wdV9jbGtjdHJsLAotCQkJTVBVX0NMS0NUUkxfQ0xLU0VMX0FCRV9ESVZfTU9ERV9NQVNLKTsKLQkJY2xyYml0c19sZTMyKCZtcHVfZHBsbF9yZWdzLT5jbV9jbGtzZWxfZHBsbCwKLQkJCUNNX0NMS1NFTF9EQ0NfRU5fTUFTSyk7Ci0JfQotCi0JZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX21wdSwgcGFyYW1zLCBEUExMX0xPQ0spOwotCWRlYnVnKCJNUFUgRFBMTCBsb2NrZWRcbiIpOworCXUzMiBzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlyZXR1cm4gJml2YV9kcGxsX3BhcmFtc18xODYybWh6W3N5c2Nsa19pbmRdOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9kcGxscyh2b2lkKQorY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfdXNiX2RwbGxfcGFyYW1zKHZvaWQpCiB7Ci0JdTMyIHN5c2Nsa19pbmQsIHRlbXA7Ci0JY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7Ci0JZGVidWcoInNldHVwX2RwbGxzXG4iKTsKLQotCXN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOwotCi0JLyogQ09SRSBkcGxsICovCi0JcGFyYW1zID0gZ2V0X2NvcmVfZHBsbF9wYXJhbXMoKTsJLyogZGVmYXVsdCAtIHNhZmVzdCAqLwotCS8qCi0JICogRG8gbm90IGxvY2sgdGhlIGNvcmUgRFBMTCBub3cuIEp1c3Qgc2V0IGl0IHVwLgotCSAqIENvcmUgRFBMTCB3aWxsIGJlIGxvY2tlZCBhZnRlciBzZXR0aW5nIHVwIEVNSUYKLQkgKiB1c2luZyB0aGUgRlJFUV9VUERBVEUgbWV0aG9kKGZyZXFfdXBkYXRlX2NvcmUoKSkKLQkgKi8KLQlkb19zZXR1cF9kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfY29yZSwgcGFyYW1zLCBEUExMX05PX0xPQ0spOwotCS8qIFNldCB0aGUgcmF0aW9zIGZvciBDT1JFX0NMSywgTDNfQ0xLLCBMNF9DTEsgKi8KLQl0ZW1wID0gKENMS1NFTF9DT1JFX1gyX0RJVl8xIDw8IENMS1NFTF9DT1JFX1NISUZUKSB8Ci0JICAgIChDTEtTRUxfTDNfQ09SRV9ESVZfMiA8PCBDTEtTRUxfTDNfU0hJRlQpIHwKLQkgICAgKENMS1NFTF9MNF9MM19ESVZfMiA8PCBDTEtTRUxfTDRfU0hJRlQpOwotCXdyaXRlbCh0ZW1wLCAmcHJjbS0+Y21fY2xrc2VsX2NvcmUpOwotCWRlYnVnKCJDb3JlIERQTEwgY29uZmlndXJlZFxuIik7Ci0KLQkvKiBsb2NrIFBFUiBkcGxsICovCi0JZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX3BlciwKLQkJCSZwZXJfZHBsbF9wYXJhbXNfMTUzNm1oeltzeXNjbGtfaW5kXSwgRFBMTF9MT0NLKTsKLQlkZWJ1ZygiUEVSIERQTEwgbG9ja2VkXG4iKTsKLQotCS8qIE1QVSBkcGxsICovCi0JY29uZmlndXJlX21wdV9kcGxsKCk7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmdXNiX2RwbGxfcGFyYW1zXzE5MjBtaHpbc3lzY2xrX2luZF07CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwX25vbl9lc3NlbnRpYWxfZHBsbHModm9pZCkKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X2FiZV9kcGxsX3BhcmFtcyh2b2lkKQogewotCXUzMiBzeXNfY2xrX2toeiwgYWJlX3JlZl9jbGs7Ci0JdTMyIHN5c2Nsa19pbmQsIHNkX2RpdiwgbnVtLCBkZW47Ci0JY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7Ci0KLQlzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKLQlzeXNfY2xrX2toeiA9IGdldF9zeXNfY2xrX2ZyZXEoKSAvIDEwMDA7Ci0KLQkvKiBJVkEgKi8KLQljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2J5cGNsa19kcGxsX2l2YSwKLQkJQ01fQllQQ0xLX0RQTExfSVZBX0NMS1NFTF9NQVNLLCBEUExMX0lWQV9DTEtTRUxfQ09SRV9YMl9ESVZfMik7Ci0KLQlkb19zZXR1cF9kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfaXZhLAotCQkJJml2YV9kcGxsX3BhcmFtc18xODYybWh6W3N5c2Nsa19pbmRdLCBEUExMX0xPQ0spOwotCi0JLyoKLQkgKiBVU0I6Ci0JICogVVNCIGRwbGwgaXMgSi10eXBlLiBOZWVkIHRvIHNldCBEUExMX1NEX0RJViBmb3Igaml0dGVyIGNvcnJlY3Rpb24KLQkgKiBEUExMX1NEX0RJViA9IENFSUxJTkcgKFtEUExMX01VTFQvKERQTExfRElWKzEpXSogQ0xLSU5QIC8gMjUwKQotCSAqICAgICAgLSB3aGVyZSBDTEtJTlAgaXMgc3lzX2NsayBpbiBNSHoKLQkgKiBVc2UgQ0xLSU5QIGluIEtIeiBhbmQgYWRqdXN0IHRoZSBkZW5vbWluYXRvciBhY2NvcmRpbmdseSBzbwotCSAqIHRoYXQgd2UgaGF2ZSBlbm91Z2ggYWNjdXJhY3kgYW5kIGF0IHRoZSBzYW1lIHRpbWUgbm8gb3ZlcmZsb3cKLQkgKi8KLQlwYXJhbXMgPSAmdXNiX2RwbGxfcGFyYW1zXzE5MjBtaHpbc3lzY2xrX2luZF07Ci0JbnVtID0gcGFyYW1zLT5tICogc3lzX2Nsa19raHo7Ci0JZGVuID0gKHBhcmFtcy0+biArIDEpICogMjUwICogMTAwMDsKLQludW0gKz0gZGVuIC0gMTsKLQlzZF9kaXYgPSBudW0gLyBkZW47Ci0JY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jbGtzZWxfZHBsbF91c2IsCi0JCQlDTV9DTEtTRUxfRFBMTF9EUExMX1NEX0RJVl9NQVNLLAotCQkJc2RfZGl2IDw8IENNX0NMS1NFTF9EUExMX0RQTExfU0RfRElWX1NISUZUKTsKLQotCS8qIE5vdyBzZXR1cCB0aGUgZHBsbCB3aXRoIHRoZSByZWd1bGFyIGZ1bmN0aW9uICovCi0JZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX3VzYiwgcGFyYW1zLCBEUExMX0xPQ0spOwotCi0jaWZkZWYgQ09ORklHX1NZU19PTUFQNF9BQkVfU1lTQ0sKLQlwYXJhbXMgPSAmYWJlX2RwbGxfcGFyYW1zX3N5c2Nsa18xOTY2MDhraHpbc3lzY2xrX2luZF07Ci0JYWJlX3JlZl9jbGsgPSBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX1NZU0NMSzsKKyNpZmRlZiBDT05GSUdfU1lTX09NQVBfQUJFX1NZU0NLCisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmYWJlX2RwbGxfcGFyYW1zX3N5c2Nsa18xOTY2MDhraHpbc3lzY2xrX2luZF07CiAjZWxzZQotCXBhcmFtcyA9ICZhYmVfZHBsbF9wYXJhbXNfMzJrXzE5NjYwOGtoejsKLQlhYmVfcmVmX2NsayA9IENNX0FCRV9QTExfUkVGX0NMS1NFTF9DTEtTRUxfMzJLQ0xLOwotCS8qCi0JICogV2UgbmVlZCB0byBlbmFibGUgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWNoaWV2ZQotCSAqIDE5Ni42MDhNSHogZnJvbSAzMjc2OCBIegotCSAqLwotCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2FiZSwKLQkJCUNNX0NMS01PREVfRFBMTF9EUklGVEdVQVJEX0VOX01BU0t8Ci0JCQlDTV9DTEtNT0RFX0RQTExfUkVMT0NLX1JBTVBfRU5fTUFTS3wKLQkJCUNNX0NMS01PREVfRFBMTF9MUE1PREVfRU5fTUFTS3wKLQkJCUNNX0NMS01PREVfRFBMTF9SRUdNNFhFTl9NQVNLKTsKLQkvKiBTcGVuZCA0IFJFRkNMSyBjeWNsZXMgYXQgZWFjaCBzdGFnZSAqLwotCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2FiZSwKLQkJCUNNX0NMS01PREVfRFBMTF9SQU1QX1JBVEVfTUFTSywKLQkJCTEgPDwgQ01fQ0xLTU9ERV9EUExMX1JBTVBfUkFURV9TSElGVCk7CisJcmV0dXJuICZhYmVfZHBsbF9wYXJhbXNfMzJrXzE5NjYwOGtoejsKICNlbmRpZgotCi0JLyogU2VsZWN0IHRoZSByaWdodCByZWZlcmVuY2UgY2xrICovCi0JY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9hYmVfcGxsX3JlZl9jbGtzZWwsCi0JCQlDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX01BU0ssCi0JCQlhYmVfcmVmX2NsayA8PCBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX1NISUZUKTsKLQkvKiBMb2NrIHRoZSBkcGxsICovCi0JZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2FiZSwgcGFyYW1zLCBEUExMX0xPQ0spOwotfQotCi1zdGF0aWMgdm9pZCBkb19zY2FsZV90cHM2MjM2MSh1MzIgcmVnLCB1MzIgdm9sdF9tdikKLXsKLQl1MzIgdGVtcCwgc3RlcDsKLQotCXN0ZXAgPSB2b2x0X212IC0gVFBTNjIzNjFfQkFTRV9WT0xUX01WOwotCXN0ZXAgLz0gMTA7Ci0KLQkvKgotCSAqIFNlbGVjdCBTRVQxIGluIFRQUzYyMzYxOgotCSAqIFZTRUwxIGlzIGdyb3VuZGVkIG9uIGJvYXJkLiBTbyB0aGUgZm9sbG93aW5nIHNlbGVjdHMKLQkgKiBWU0VMMSA9IDAgYW5kIFZTRUwwID0gMQotCSAqLwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChUUFM2MjM2MV9WU0VMMF9HUElPLCAwKTsKLQlncGlvX3NldF92YWx1ZShUUFM2MjM2MV9WU0VMMF9HUElPLCAxKTsKLQotCXRlbXAgPSBUUFM2MjM2MV9JMkNfU0xBVkVfQUREUiB8Ci0JICAgIChyZWcgPDwgUFJNX1ZDX1ZBTF9CWVBBU1NfUkVHQUREUl9TSElGVCkgfAotCSAgICAoc3RlcCA8PCBQUk1fVkNfVkFMX0JZUEFTU19EQVRBX1NISUZUKSB8Ci0JICAgIFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVDsKLQlkZWJ1ZygiZG9fc2NhbGVfdHBzNjIzNjE6IHZvbHQgLSAlZCBzdGVwIC0gMHgleFxuIiwgdm9sdF9tdiwgc3RlcCk7Ci0KLQl3cml0ZWwodGVtcCwgJnByY20tPnBybV92Y192YWxfYnlwYXNzKTsKLQlpZiAoIXdhaXRfb25fdmFsdWUoUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklULCAwLAotCQkJCSZwcmNtLT5wcm1fdmNfdmFsX2J5cGFzcywgTERFTEFZKSkgewotCQlwdXRzKCJTY2FsaW5nIHZvbHRhZ2UgZmFpbGVkIGZvciB2ZGRfbXB1IGZyb20gVFBTXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3NjYWxlX3Zjb3JlKHUzMiB2Y29yZV9yZWcsIHUzMiB2b2x0X212KQotewotCXUzMiB0ZW1wLCBvZmZzZXRfY29kZTsKLQl1MzIgc3RlcCA9IDEyNjYwOyAvKiAxMi42NiBtViByZXByZXNlbnRlZCBpbiB1ViAqLwotCXUzMiBvZmZzZXQgPSB2b2x0X212OwotCi0JLyogY29udmVydCB0byB1ViBmb3IgYmV0dGVyIGFjY3VyYWN5IGluIHRoZSBjYWxjdWxhdGlvbnMgKi8KLQlvZmZzZXQgKj0gMTAwMDsKLQotCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDQ0MzBfRVMxXzApCi0JCW9mZnNldCAtPSBQSE9FTklYX1NNUFNfQkFTRV9WT0xUX1NURF9NT0RFX1VWOwotCWVsc2UKLQkJb2Zmc2V0IC09IFBIT0VOSVhfU01QU19CQVNFX1ZPTFRfU1REX01PREVfV0lUSF9PRkZTRVRfVVY7Ci0KLQlvZmZzZXRfY29kZSA9IChvZmZzZXQgKyBzdGVwIC0gMSkgLyBzdGVwOwotCS8qIFRoZSBjb2RlIHN0YXJ0cyBhdCAxIG5vdCAwICovCi0Jb2Zmc2V0X2NvZGUrKzsKLQotCWRlYnVnKCJkb19zY2FsZV92Y29yZTogdm9sdCAtICVkIG9mZnNldF9jb2RlIC0gMHgleFxuIiwgdm9sdF9tdiwKLQkJb2Zmc2V0X2NvZGUpOwotCi0JdGVtcCA9IFNNUFNfSTJDX1NMQVZFX0FERFIgfAotCSAgICAodmNvcmVfcmVnIDw8IFBSTV9WQ19WQUxfQllQQVNTX1JFR0FERFJfU0hJRlQpIHwKLQkgICAgKG9mZnNldF9jb2RlIDw8IFBSTV9WQ19WQUxfQllQQVNTX0RBVEFfU0hJRlQpIHwKLQkgICAgUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklUOwotCXdyaXRlbCh0ZW1wLCAmcHJjbS0+cHJtX3ZjX3ZhbF9ieXBhc3MpOwotCWlmICghd2FpdF9vbl92YWx1ZShQUk1fVkNfVkFMX0JZUEFTU19WQUxJRF9CSVQsIDAsCi0JCQkJJnByY20tPnBybV92Y192YWxfYnlwYXNzLCBMREVMQVkpKSB7Ci0JCXByaW50ZigiU2NhbGluZyB2b2x0YWdlIGZhaWxlZCBmb3IgMHgleFxuIiwgdmNvcmVfcmVnKTsKLQl9CiB9CiAKIC8qCkBAIC01MzYsMzIgKzI3MSwxNiBAQAogICogZW5hYmxlZCBpbiBib290bG9hZGVyLiBWb2x0YWdlIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwgd2lsbCBzZXQKICAqIHRoZXNlIHRvIHRoZSBub21pbmFsIHZhbHVlcyBhZnRlciBlbmFibGluZyBTbWFydC1SZWZsZXgKICAqLwotc3RhdGljIHZvaWQgc2NhbGVfdmNvcmVzKHZvaWQpCit2b2lkIHNjYWxlX3Zjb3Jlcyh2b2lkKQogewotCXUzMiB2b2x0LCBzeXNfY2xrX2toeiwgY3ljbGVzX2hpLCBjeWNsZXNfbG93LCB0ZW1wLCBvbWFwNF9yZXY7CisJdTMyIHZvbHQsIG9tYXBfcmV2OwogCi0Jc3lzX2Nsa19raHogPSBnZXRfc3lzX2Nsa19mcmVxKCkgLyAxMDAwOworCXNldHVwX3NyaTJjKCk7CiAKLQkvKgotCSAqIFNldHVwIHRoZSBkZWRpY2F0ZWQgSTJDIGNvbnRyb2xsZXIgZm9yIFZvbHRhZ2UgQ29udHJvbAotCSAqIEkyQyBjbGsgLSBoaWdoIHBlcmlvZCA0MCUgbG93IHBlcmlvZCA2MCUKLQkgKi8KLQljeWNsZXNfaGkgPSBzeXNfY2xrX2toeiAqIDQgLyBQUk1fVkNfSTJDX0NIQU5ORUxfRlJFUV9LSFogLyAxMDsKLQljeWNsZXNfbG93ID0gc3lzX2Nsa19raHogKiA2IC8gUFJNX1ZDX0kyQ19DSEFOTkVMX0ZSRVFfS0haIC8gMTA7Ci0JLyogdmFsdWVzIHRvIGJlIHNldCBpbiByZWdpc3RlciAtIGxlc3MgYnkgNSAmIDcgcmVzcGVjdGl2ZWx5ICovCi0JY3ljbGVzX2hpIC09IDU7Ci0JY3ljbGVzX2xvdyAtPSA3OwotCXRlbXAgPSAoY3ljbGVzX2hpIDw8IFBSTV9WQ19DRkdfSTJDX0NMS19TQ0xIX1NISUZUKSB8Ci0JICAgICAgIChjeWNsZXNfbG93IDw8IFBSTV9WQ19DRkdfSTJDX0NMS19TQ0xMX1NISUZUKTsKLQl3cml0ZWwodGVtcCwgJnByY20tPnBybV92Y19jZmdfaTJjX2Nsayk7Ci0KLQkvKiBEaXNhYmxlIGhpZ2ggc3BlZWQgbW9kZSBhbmQgYWxsIGFkdmFuY2VkIGZlYXR1cmVzICovCi0Jd3JpdGVsKDB4MCwgJnByY20tPnBybV92Y19jZmdfaTJjX21vZGUpOwotCi0Jb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCW9tYXBfcmV2ID0gb21hcF9yZXZpc2lvbigpOwogCS8qIFRQUyAtIHN1cHBsaWVzIHZkZF9tcHUgb24gNDQ2MCAqLwotCWlmIChvbWFwNF9yZXYgPj0gT01BUDQ0NjBfRVMxXzApIHsKLQkJdm9sdCA9IDE0MzA7CisJaWYgKG9tYXBfcmV2ID49IE9NQVA0NDYwX0VTMV8wKSB7CisJCXZvbHQgPSAxMzEzOwogCQlkb19zY2FsZV90cHM2MjM2MShUUFM2MjM2MV9SRUdfQUREUl9TRVQxLCB2b2x0KTsKIAl9CiAKQEAgLTU3Niw4ICsyOTUsOCBAQAogCSAqCiAJICogNDQ2MCA6IHN1cHBsaWVzIHZkZF9jb3JlCiAJICovCi0JaWYgKG9tYXA0X3JldiA8IE9NQVA0NDYwX0VTMV8wKSB7Ci0JCXZvbHQgPSAxNDE3OworCWlmIChvbWFwX3JldiA8IE9NQVA0NDYwX0VTMV8wKSB7CisJCXZvbHQgPSAxMzI1OwogCQlkb19zY2FsZV92Y29yZShTTVBTX1JFR19BRERSX1ZDT1JFMSwgdm9sdCk7CiAJfSBlbHNlIHsKIAkJdm9sdCA9IDEyMDA7CkBAIC01OTMsNTUgKzMxMiwxOCBAQAogCSAqIDQ0MzAgOiBzdXBwbGllcyB2ZGRfY29yZQogCSAqIDQ0NjAgOiBub3QgY29ubmVjdGVkCiAJICovCi0JaWYgKG9tYXA0X3JldiA8IE9NQVA0NDYwX0VTMV8wKSB7CisJaWYgKG9tYXBfcmV2IDwgT01BUDQ0NjBfRVMxXzApIHsKIAkJdm9sdCA9IDEyMDA7CiAJCWRvX3NjYWxlX3Zjb3JlKFNNUFNfUkVHX0FERFJfVkNPUkUzLCB2b2x0KTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY2xvY2tfZG9tYWluKHUzMiAqY29uc3QgY2xrY3RybF9yZWcsIHUzMiBlbmFibGVfbW9kZSkKLXsKLQljbHJzZXRiaXRzX2xlMzIoY2xrY3RybF9yZWcsIENEX0NMS0NUUkxfQ0xLVFJDVFJMX01BU0ssCi0JCQllbmFibGVfbW9kZSA8PCBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TSElGVCk7Ci0JZGVidWcoIkVuYWJsZSBjbG9jayBkb21haW4gLSAlcFxuIiwgY2xrY3RybF9yZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfY2xrX2VuYWJsZSh1MzIgKmNsa2N0cmxfYWRkcikKLXsKLQl1MzIgY2xrY3RybCwgaWRsZXN0ID0gTU9EVUxFX0NMS0NUUkxfSURMRVNUX0RJU0FCTEVEOwotCXUzMiBib3VuZCA9IExERUxBWTsKLQotCXdoaWxlICgoaWRsZXN0ID09IE1PRFVMRV9DTEtDVFJMX0lETEVTVF9ESVNBQkxFRCkgfHwKLQkJKGlkbGVzdCA9PSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfVFJBTlNJVElPTklORykpIHsKLQotCQljbGtjdHJsID0gcmVhZGwoY2xrY3RybF9hZGRyKTsKLQkJaWRsZXN0ID0gKGNsa2N0cmwgJiBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfTUFTSykgPj4KLQkJCSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfU0hJRlQ7Ci0JCWlmICgtLWJvdW5kID09IDApIHsKLQkJCXByaW50ZigiQ2xvY2sgZW5hYmxlIGZhaWxlZCBmb3IgMHglcCBpZGxlc3QgMHgleFxuIiwKLQkJCQljbGtjdHJsX2FkZHIsIGNsa2N0cmwpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Nsb2NrX21vZHVsZSh1MzIgKmNvbnN0IGNsa2N0cmxfYWRkciwgdTMyIGVuYWJsZV9tb2RlLAotCQkJCXUzMiB3YWl0X2Zvcl9lbmFibGUpCi17Ci0JY2xyc2V0Yml0c19sZTMyKGNsa2N0cmxfYWRkciwgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAotCQkJZW5hYmxlX21vZGUgPDwgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7Ci0JZGVidWcoIkVuYWJsZSBjbG9jayBtb2R1bGUgLSAlcFxuIiwgY2xrY3RybF9hZGRyKTsKLQlpZiAod2FpdF9mb3JfZW5hYmxlKQotCQl3YWl0X2Zvcl9jbGtfZW5hYmxlKGNsa2N0cmxfYWRkcik7Ci19Ci0KIC8qCiAgKiBFbmFibGUgZXNzZW50aWFsIGNsb2NrIGRvbWFpbnMsIG1vZHVsZXMgYW5kCiAgKiBkbyBzb21lIGFkZGl0aW9uYWwgc3BlY2lhbCBzZXR0aW5ncyBuZWVkZWQKICAqLwotc3RhdGljIHZvaWQgZW5hYmxlX2Jhc2ljX2Nsb2Nrcyh2b2lkKQordm9pZCBlbmFibGVfYmFzaWNfY2xvY2tzKHZvaWQpCiB7Ci0JdTMyIGksIG1heCA9IDEwMCwgd2FpdF9mb3JfZW5hYmxlID0gMTsKIAl1MzIgKmNvbnN0IGNsa19kb21haW5zX2Vzc2VudGlhbFtdID0gewogCQkmcHJjbS0+Y21fbDRwZXJfY2xrc3RjdHJsLAogCQkmcHJjbS0+Y21fbDNpbml0X2Nsa3N0Y3RybCwKQEAgLTY1MSwzMCArMzMzLDIzIEBACiAJfTsKIAogCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtX21lbWlmX2VtaWZfMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbWVtaWZfZW1pZl8yX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNGNmZ19sNF9jZmdfY2xrY3RybCwKIAkJJnByY20tPmNtX3drdXBfZ3BpbzFfY2xrY3RybCwKIAkJJnByY20tPmNtX2w0cGVyX2dwaW8yX2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV9sNHBlcl9ncGlvM19jbGtjdHJsLAogCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzRfY2xrY3RybCwKIAkJJnByY20tPmNtX2w0cGVyX2dwaW81X2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV9sNHBlcl9ncGlvNl9jbGtjdHJsLAotCQkmcHJjbS0+Y21fbWVtaWZfZW1pZl8xX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV9tZW1pZl9lbWlmXzJfY2xrY3RybCwKLQkJJnByY20tPmNtX2wzaW5pdF9oc3VzYm90Z19jbGtjdHJsLAotCQkmcHJjbS0+Y21fbDNpbml0X3VzYnBoeV9jbGtjdHJsLAotCQkmcHJjbS0+Y21fbDRjZmdfbDRfY2ZnX2Nsa2N0cmwsCiAJCTAKIAl9OwogCiAJdTMyICpjb25zdCBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9lc3NlbnRpYWxbXSA9IHsKLQkJJnByY20tPmNtX2w0cGVyX2dwdGltZXIyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV93a3VwX2dwdGltZXIxX2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV9sM2luaXRfaHNtbWMxX2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV9sM2luaXRfaHNtbWMyX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV9sNHBlcl9tY3NwaTFfY2xrY3RybCwKLQkJJnByY20tPmNtX3drdXBfZ3B0aW1lcjFfY2xrY3RybCwKLQkJJnByY20tPmNtX2w0cGVyX2kyYzFfY2xrY3RybCwKLQkJJnByY20tPmNtX2w0cGVyX2kyYzJfY2xrY3RybCwKLQkJJnByY20tPmNtX2w0cGVyX2kyYzNfY2xrY3RybCwKLQkJJnByY20tPmNtX2w0cGVyX2kyYzRfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwdGltZXIyX2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV93a3VwX3dkdGltZXIyX2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV9sNHBlcl91YXJ0M19jbGtjdHJsLAogCQkwCkBAIC02OTgsNDAgKzM3Myw0NSBAQAogCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDNpbml0X3VzYnBoeV9jbGtjdHJsLAogCQkJVVNCUEhZX0NMS0NUUkxfT1BURkNMS0VOX1BIWV80OE1fTUFTSyk7CiAKLQkvKiBQdXQgdGhlIGNsb2NrIGRvbWFpbnMgaW4gU1dfV0tVUCBtb2RlICovCi0JZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19kb21haW5zX2Vzc2VudGlhbFtpXTsgaSsrKSB7Ci0JCWVuYWJsZV9jbG9ja19kb21haW4oY2xrX2RvbWFpbnNfZXNzZW50aWFsW2ldLAotCQkJCSAgICBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19XS1VQKTsKLQl9CisJZG9fZW5hYmxlX2Nsb2NrcyhjbGtfZG9tYWluc19lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsLAorCQkJIDEpOworfQogCi0JLyogQ2xvY2sgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgcHV0IGluIEhXX0FVVE8gKi8KLQlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWxbaV07IGkrKykgewotCQllbmFibGVfY2xvY2tfbW9kdWxlKGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsW2ldLAotCQkJCSAgICBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX0hXX0FVVE8sCi0JCQkJICAgIHdhaXRfZm9yX2VuYWJsZSk7Cit2b2lkIGVuYWJsZV9iYXNpY191Ym9vdF9jbG9ja3Modm9pZCkKK3sKKwl1MzIgKmNvbnN0IGNsa19kb21haW5zX2Vzc2VudGlhbFtdID0geworCQkwCiAJfTsKIAotCS8qIENsb2NrIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIHB1dCBpbiBTV19FWFBMSUNJVF9FTiBtb2RlICovCi0JZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbFtpXTsgaSsrKSB7Ci0JCWVuYWJsZV9jbG9ja19tb2R1bGUoY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsW2ldLAotCQkJCSAgICBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOLAotCQkJCSAgICB3YWl0X2Zvcl9lbmFibGUpOworCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtX2wzaW5pdF9oc3VzYm90Z19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X3VzYnBoeV9jbGtjdHJsLAorCQkwCiAJfTsKIAotCS8qIFB1dCB0aGUgY2xvY2sgZG9tYWlucyBpbiBIV19BVVRPIG1vZGUgbm93ICovCi0JZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19kb21haW5zX2Vzc2VudGlhbFtpXTsgaSsrKSB7Ci0JCWVuYWJsZV9jbG9ja19kb21haW4oY2xrX2RvbWFpbnNfZXNzZW50aWFsW2ldLAotCQkJCSAgICBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9IV19BVVRPKTsKLQl9CisJdTMyICpjb25zdCBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtX2w0cGVyX21jc3BpMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjNF9jbGtjdHJsLAorCQkwCisJfTsKKworCWRvX2VuYWJsZV9jbG9ja3MoY2xrX2RvbWFpbnNfZXNzZW50aWFsLAorCQkJIGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsLAorCQkJIGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbCwKKwkJCSAxKTsKIH0KIAogLyoKICAqIEVuYWJsZSBub24tZXNzZW50aWFsIGNsb2NrIGRvbWFpbnMsIG1vZHVsZXMgYW5kCiAgKiBkbyBzb21lIGFkZGl0aW9uYWwgc3BlY2lhbCBzZXR0aW5ncyBuZWVkZWQKICAqLwotc3RhdGljIHZvaWQgZW5hYmxlX25vbl9lc3NlbnRpYWxfY2xvY2tzKHZvaWQpCit2b2lkIGVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2Nrcyh2b2lkKQogewotCXUzMiBpLCBtYXggPSAxMDAsIHdhaXRfZm9yX2VuYWJsZSA9IDA7CiAJdTMyICpjb25zdCBjbGtfZG9tYWluc19ub25fZXNzZW50aWFsW10gPSB7CiAJCSZwcmNtLT5jbV9tcHVfbTNfY2xrc3RjdHJsLAogCQkmcHJjbS0+Y21faXZhaGRfY2xrc3RjdHJsLApAQCAtODA3LDEzNSArNDg3LDEzIEBACiAJLyogRW5hYmxlIGFsbCBvcHRpb25hbCBmdW5jdGlvbmFsIGNsb2NrcyBvZiBEU1MgKi8KIAlzZXRiaXRzX2xlMzIoJnByY20tPmNtX2Rzc19kc3NfY2xrY3RybCwgRFNTX0NMS0NUUkxfT1BURkNMS0VOX01BU0spOwogCi0KLQkvKiBQdXQgdGhlIGNsb2NrIGRvbWFpbnMgaW4gU1dfV0tVUCBtb2RlICovCi0JZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19kb21haW5zX25vbl9lc3NlbnRpYWxbaV07IGkrKykgewotCQllbmFibGVfY2xvY2tfZG9tYWluKGNsa19kb21haW5zX25vbl9lc3NlbnRpYWxbaV0sCi0JCQkJICAgIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1dLVVApOwotCX0KLQotCS8qIENsb2NrIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIHB1dCBpbiBIV19BVVRPICovCi0JZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19tb2R1bGVzX2h3X2F1dG9fbm9uX2Vzc2VudGlhbFtpXTsgaSsrKSB7Ci0JCWVuYWJsZV9jbG9ja19tb2R1bGUoY2xrX21vZHVsZXNfaHdfYXV0b19ub25fZXNzZW50aWFsW2ldLAotCQkJCSAgICBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX0hXX0FVVE8sCi0JCQkJICAgIHdhaXRfZm9yX2VuYWJsZSk7Ci0JfTsKLQotCS8qIENsb2NrIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIHB1dCBpbiBTV19FWFBMSUNJVF9FTiBtb2RlICovCi0JZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX25vbl9lc3NlbnRpYWxbaV07Ci0JICAgICBpKyspIHsKLQkJZW5hYmxlX2Nsb2NrX21vZHVsZShjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9ub25fZXNzZW50aWFsW2ldLAotCQkJCSAgICBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOLAotCQkJCSAgICB3YWl0X2Zvcl9lbmFibGUpOwotCX07Ci0KLQkvKiBQdXQgdGhlIGNsb2NrIGRvbWFpbnMgaW4gSFdfQVVUTyBtb2RlIG5vdyAqLwotCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfZG9tYWluc19ub25fZXNzZW50aWFsW2ldOyBpKyspIHsKLQkJZW5hYmxlX2Nsb2NrX2RvbWFpbihjbGtfZG9tYWluc19ub25fZXNzZW50aWFsW2ldLAotCQkJCSAgICBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9IV19BVVRPKTsKLQl9CisJZG9fZW5hYmxlX2Nsb2NrcyhjbGtfZG9tYWluc19ub25fZXNzZW50aWFsLAorCQkJIGNsa19tb2R1bGVzX2h3X2F1dG9fbm9uX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9ub25fZXNzZW50aWFsLAorCQkJIDApOwogCiAJLyogUHV0IGNhbWVyYSBtb2R1bGUgaW4gbm8gc2xlZXAgbW9kZSAqLwogCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2FtX2Nsa3N0Y3RybCwgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAogCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTk9fU0xFRVAgPDwKIAkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOwogfQotCi0KLXZvaWQgZnJlcV91cGRhdGVfY29yZSh2b2lkKQotewotCXUzMiBmcmVxX2NvbmZpZzEgPSAwOwotCWNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqY29yZV9kcGxsX3BhcmFtczsKLQotCWNvcmVfZHBsbF9wYXJhbXMgPSBnZXRfY29yZV9kcGxsX3BhcmFtcygpOwotCS8qIFB1dCBFTUlGIGNsb2NrIGRvbWFpbiBpbiBzdyB3YWtldXAgbW9kZSAqLwotCWVuYWJsZV9jbG9ja19kb21haW4oJnByY20tPmNtX21lbWlmX2Nsa3N0Y3RybCwKLQkJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19XS1VQKTsKLQl3YWl0X2Zvcl9jbGtfZW5hYmxlKCZwcmNtLT5jbV9tZW1pZl9lbWlmXzFfY2xrY3RybCk7Ci0Jd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8yX2Nsa2N0cmwpOwotCi0JZnJlcV9jb25maWcxID0gU0hBRE9XX0ZSRVFfQ09ORklHMV9GUkVRX1VQREFURV9NQVNLIHwKLQkgICAgU0hBRE9XX0ZSRVFfQ09ORklHMV9ETExfUkVTRVRfTUFTSzsKLQotCWZyZXFfY29uZmlnMSB8PSAoRFBMTF9FTl9MT0NLIDw8IFNIQURPV19GUkVRX0NPTkZJRzFfRFBMTF9FTl9TSElGVCkgJgotCQkJCVNIQURPV19GUkVRX0NPTkZJRzFfRFBMTF9FTl9NQVNLOwotCi0JZnJlcV9jb25maWcxIHw9IChjb3JlX2RwbGxfcGFyYW1zLT5tMiA8PAotCQkJU0hBRE9XX0ZSRVFfQ09ORklHMV9NMl9ESVZfU0hJRlQpICYKLQkJCVNIQURPV19GUkVRX0NPTkZJRzFfTTJfRElWX01BU0s7Ci0KLQl3cml0ZWwoZnJlcV9jb25maWcxLCAmcHJjbS0+Y21fc2hhZG93X2ZyZXFfY29uZmlnMSk7Ci0JaWYgKCF3YWl0X29uX3ZhbHVlKFNIQURPV19GUkVRX0NPTkZJRzFfRlJFUV9VUERBVEVfTUFTSywgMCwKLQkJCQkmcHJjbS0+Y21fc2hhZG93X2ZyZXFfY29uZmlnMSwgTERFTEFZKSkgewotCQlwdXRzKCJGUkVRIFVQREFURSBwcm9jZWR1cmUgZmFpbGVkISEiKTsKLQkJaGFuZygpOwotCX0KLQotCS8qIFB1dCBFTUlGIGNsb2NrIGRvbWFpbiBiYWNrIGluIGh3IGF1dG8gbW9kZSAqLwotCWVuYWJsZV9jbG9ja19kb21haW4oJnByY20tPmNtX21lbWlmX2Nsa3N0Y3RybCwKLQkJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9IV19BVVRPKTsKLQl3YWl0X2Zvcl9jbGtfZW5hYmxlKCZwcmNtLT5jbV9tZW1pZl9lbWlmXzFfY2xrY3RybCk7Ci0Jd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8yX2Nsa2N0cmwpOwotfQotCi12b2lkIGJ5cGFzc19kcGxsKHUzMiAqY29uc3QgYmFzZSkKLXsKLQlkb19ieXBhc3NfZHBsbChiYXNlKTsKLQl3YWl0X2Zvcl9ieXBhc3MoYmFzZSk7Ci19Ci0KLXZvaWQgbG9ja19kcGxsKHUzMiAqY29uc3QgYmFzZSkKLXsKLQlkb19sb2NrX2RwbGwoYmFzZSk7Ci0Jd2FpdF9mb3JfbG9jayhiYXNlKTsKLX0KLQotdm9pZCBzZXR1cF9jbG9ja3NfZm9yX2NvbnNvbGUodm9pZCkKLXsKLQkvKiBEbyBub3QgYWRkIGFueSBzcGxfZGVidWcgcHJpbnRzIGluIHRoaXMgZnVuY3Rpb24gKi8KLQljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX2Nsa3N0Y3RybCwgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTUFTSywKLQkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1dLVVAgPDwKLQkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX1NISUZUKTsKLQotCS8qIEVuYWJsZSBhbGwgVUFSVHMgLSBjb25zb2xlIHdpbGwgYmUgb24gb25lIG9mIHRoZW0gKi8KLQljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX3VhcnQxX2Nsa2N0cmwsCi0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCi0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOIDw8Ci0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKLQotCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfdWFydDJfY2xrY3RybCwKLQkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKLQkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4gPDwKLQkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOwotCi0JY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0M19jbGtjdHJsLAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7Ci0KLQljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX3VhcnQzX2Nsa2N0cmwsCi0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCi0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOIDw8Ci0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKLQotCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfY2xrc3RjdHJsLCBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9NQVNLLAotCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTyA8PAotCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU0hJRlQpOwotfQotCi12b2lkIHByY21faW5pdCh2b2lkKQotewotCXN3aXRjaCAob21hcDRfaHdfaW5pdF9jb250ZXh0KCkpIHsKLQljYXNlIE9NQVBfSU5JVF9DT05URVhUX1NQTDoKLQljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0ZST01fTk9SOgotCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfQ0g6Ci0JCWVuYWJsZV9iYXNpY19jbG9ja3MoKTsKLQkJc2NhbGVfdmNvcmVzKCk7Ci0JCXNldHVwX2RwbGxzKCk7Ci0JCXNldHVwX25vbl9lc3NlbnRpYWxfZHBsbHMoKTsKLQkJZW5hYmxlX25vbl9lc3NlbnRpYWxfY2xvY2tzKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9lbWlmLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvZW1pZi5jCmluZGV4IDk4OGIyMDUuLmNhNDgyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9lbWlmLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2VtaWYuYwpAQCAtMjYsNjQ1ICsyNiwxNSBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9lbWlmLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8YXNtL2VtaWYuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vb21hcF9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vdXRpbHMuaD4KIAotc3RhdGljIGlubGluZSB1MzIgZW1pZl9udW0odTMyIGJhc2UpCi17Ci0JaWYgKGJhc2UgPT0gT01BUDQ0WFhfRU1JRjEpCi0JCXJldHVybiAxOwotCWVsc2UgaWYgKGJhc2UgPT0gT01BUDQ0WFhfRU1JRjIpCi0JCXJldHVybiAyOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9tcih1MzIgYmFzZSwgdTMyIGNzLCB1MzIgbXJfYWRkcikKLXsKLQl1MzIgbXI7Ci0Jc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKLQotCW1yX2FkZHIgfD0gY3MgPDwgT01BUDQ0WFhfUkVHX0NTX1NISUZUOwotCXdyaXRlbChtcl9hZGRyLCAmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfY2ZnKTsKLQlpZiAob21hcF9yZXZpc2lvbigpID09IE9NQVA0NDMwX0VTMl8wKQotCQltciA9IHJlYWRsKCZlbWlmLT5lbWlmX2xwZGRyMl9tb2RlX3JlZ19kYXRhX2VzMik7Ci0JZWxzZQotCQltciA9IHJlYWRsKCZlbWlmLT5lbWlmX2xwZGRyMl9tb2RlX3JlZ19kYXRhKTsKLQlkZWJ1ZygiZ2V0X21yOiBFTUlGJWQgY3MgJWQgbXIgJTA4eCB2YWwgMHgleFxuIiwgZW1pZl9udW0oYmFzZSksCi0JICAgICAgY3MsIG1yX2FkZHIsIG1yKTsKLQlyZXR1cm4gbXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbXIodTMyIGJhc2UsIHUzMiBjcywgdTMyIG1yX2FkZHIsIHUzMiBtcl92YWwpCi17Ci0Jc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKLQotCW1yX2FkZHIgfD0gY3MgPDwgT01BUDQ0WFhfUkVHX0NTX1NISUZUOwotCXdyaXRlbChtcl9hZGRyLCAmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfY2ZnKTsKLQl3cml0ZWwobXJfdmFsLCAmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YSk7Ci19Ci0KLXZvaWQgZW1pZl9yZXNldF9waHkodTMyIGJhc2UpCi17Ci0Jc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKLQl1MzIgaW9kZnQ7Ci0KLQlpb2RmdCA9IHJlYWRsKCZlbWlmLT5lbWlmX2lvZGZ0X3RsZ2MpOwotCWlvZGZ0IHw9IE9NQVA0NFhYX1JFR19SRVNFVF9QSFlfTUFTSzsKLQl3cml0ZWwoaW9kZnQsICZlbWlmLT5lbWlmX2lvZGZ0X3RsZ2MpOwotfQotCi1zdGF0aWMgdm9pZCBkb19scGRkcjJfaW5pdCh1MzIgYmFzZSwgdTMyIGNzKQotewotCXUzMiBtcl9hZGRyOwotCi0JLyogV2FpdCB0aWxsIGRldmljZSBhdXRvIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlICovCi0Jd2hpbGUgKGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SMCkgJiBMUEREUjJfTVIwX0RBSV9NQVNLKQotCQk7Ci0Jc2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIxMCwgTVIxMF9aUV9aUUlOSVQpOwotCS8qCi0JICogdFpRSU5JVCA9IDEgdXMKLQkgKiBFbm91Z2ggbG9vcHMgYXNzdW1pbmcgYSBtYXhpbXVtIG9mIDJHSHoKLQkgKi8KLQlzZGVsYXkoMjAwMCk7Ci0Jc2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIxLCBNUjFfQkxfOF9CVF9TRVFfV1JBUF9FTl9OV1JfMyk7Ci0Jc2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIxNiwgTVIxNl9SRUZfRlVMTF9BUlJBWSk7Ci0JLyoKLQkgKiBFbmFibGUgcmVmcmVzaCBhbG9uZyB3aXRoIHdyaXRpbmcgTVIyCi0JICogRW5jb2Rpbmcgb2YgUkwgaW4gTVIyIGlzIChSTCAtIDIpCi0JICovCi0JbXJfYWRkciA9IExQRERSMl9NUjIgfCBPTUFQNDRYWF9SRUdfUkVGUkVTSF9FTl9NQVNLOwotCXNldF9tcihiYXNlLCBjcywgbXJfYWRkciwgUkxfRklOQUwgLSAyKTsKLX0KLQotc3RhdGljIHZvaWQgbHBkZHIyX2luaXQodTMyIGJhc2UsIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKLQotCS8qIE5vdCBOVk0gKi8KLQljbHJiaXRzX2xlMzIoJmVtaWYtPmVtaWZfbHBkZHIyX252bV9jb25maWcsIE9NQVA0NFhYX1JFR19DUzFOVk1FTl9NQVNLKTsKLQotCS8qCi0JICogS2VlcCBSRUdfSU5JVFJFRl9ESVMgPSAxIHRvIHByZXZlbnQgcmUtaW5pdGlhbGl6YXRpb24gb2YgU0RSQU0KLQkgKiB3aGVuIEVNSUZfU0RSQU1fQ09ORklHIHJlZ2lzdGVyIGlzIHdyaXR0ZW4KLQkgKi8KLQlzZXRiaXRzX2xlMzIoJmVtaWYtPmVtaWZfc2RyYW1fcmVmX2N0cmwsIE9NQVA0NFhYX1JFR19JTklUUkVGX0RJU19NQVNLKTsKLQotCS8qCi0JICogU2V0IHRoZSBTRFJBTV9DT05GSUcgYW5kIFBIWV9DVFJMIGZvciB0aGUKLQkgKiB1bi1sb2NrZWQgZnJlcXVlbmN5ICYgZGVmYXVsdCBSTAotCSAqLwotCXdyaXRlbChyZWdzLT5zZHJhbV9jb25maWdfaW5pdCwgJmVtaWYtPmVtaWZfc2RyYW1fY29uZmlnKTsKLQl3cml0ZWwocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0LCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMSk7Ci0KLQlkb19scGRkcjJfaW5pdChiYXNlLCBDUzApOwotCWlmIChyZWdzLT5zZHJhbV9jb25maWcgJiBPTUFQNDRYWF9SRUdfRUJBTktfTUFTSykKLQkJZG9fbHBkZHIyX2luaXQoYmFzZSwgQ1MxKTsKLQotCXdyaXRlbChyZWdzLT5zZHJhbV9jb25maWcsICZlbWlmLT5lbWlmX3NkcmFtX2NvbmZpZyk7Ci0Jd3JpdGVsKHJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzEsICZlbWlmLT5lbWlmX2Rkcl9waHlfY3RybF8xKTsKLQotCS8qIEVuYWJsZSByZWZyZXNoIG5vdyAqLwotCWNscmJpdHNfbGUzMigmZW1pZi0+ZW1pZl9zZHJhbV9yZWZfY3RybCwgT01BUDQ0WFhfUkVHX0lOSVRSRUZfRElTX01BU0spOwotCi19Ci0KLXN0YXRpYyB2b2lkIGVtaWZfdXBkYXRlX3RpbWluZ3ModTMyIGJhc2UsIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKLQotCXdyaXRlbChyZWdzLT5yZWZfY3RybCwgJmVtaWYtPmVtaWZfc2RyYW1fcmVmX2N0cmxfc2hkdyk7Ci0Jd3JpdGVsKHJlZ3MtPnNkcmFtX3RpbTEsICZlbWlmLT5lbWlmX3NkcmFtX3RpbV8xX3NoZHcpOwotCXdyaXRlbChyZWdzLT5zZHJhbV90aW0yLCAmZW1pZi0+ZW1pZl9zZHJhbV90aW1fMl9zaGR3KTsKLQl3cml0ZWwocmVncy0+c2RyYW1fdGltMywgJmVtaWYtPmVtaWZfc2RyYW1fdGltXzNfc2hkdyk7Ci0JaWYgKG9tYXBfcmV2aXNpb24oKSA9PSBPTUFQNDQzMF9FUzFfMCkgewotCQkvKiBFUzEgYnVnIEVNSUYgc2hvdWxkIGJlIGluIGZvcmNlIGlkbGUgZHVyaW5nIGZyZXFfdXBkYXRlICovCi0JCXdyaXRlbCgwLCAmZW1pZi0+ZW1pZl9wd3JfbWdtdF9jdHJsKTsKLQl9IGVsc2UgewotCQl3cml0ZWwoRU1JRl9QV1JfTUdNVF9DVFJMLCAmZW1pZi0+ZW1pZl9wd3JfbWdtdF9jdHJsKTsKLQkJd3JpdGVsKEVNSUZfUFdSX01HTVRfQ1RSTF9TSERXLCAmZW1pZi0+ZW1pZl9wd3JfbWdtdF9jdHJsX3NoZHcpOwotCX0KLQl3cml0ZWwocmVncy0+cmVhZF9pZGxlX2N0cmwsICZlbWlmLT5lbWlmX3JlYWRfaWRsZWN0cmxfc2hkdyk7Ci0Jd3JpdGVsKHJlZ3MtPnpxX2NvbmZpZywgJmVtaWYtPmVtaWZfenFfY29uZmlnKTsKLQl3cml0ZWwocmVncy0+dGVtcF9hbGVydF9jb25maWcsICZlbWlmLT5lbWlmX3RlbXBfYWxlcnRfY29uZmlnKTsKLQl3cml0ZWwocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMSwgJmVtaWYtPmVtaWZfZGRyX3BoeV9jdHJsXzFfc2hkdyk7Ci0KLQlpZiAob21hcF9yZXZpc2lvbigpID49IE9NQVA0NDYwX0VTMV8wKSB7Ci0JCXdyaXRlbChFTUlGX0wzX0NPTkZJR19WQUxfU1lTXzEwX01QVV8zX0xMXzAsCi0JCQkmZW1pZi0+ZW1pZl9sM19jb25maWcpOwotCX0gZWxzZSB7Ci0JCXdyaXRlbChFTUlGX0wzX0NPTkZJR19WQUxfU1lTXzEwX0xMXzAsCi0JCQkmZW1pZi0+ZW1pZl9sM19jb25maWcpOwotCX0KLX0KLQogI2lmbmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUwotI2RlZmluZSBwcmludF90aW1pbmdfcmVnKHJlZykgZGVidWcoI3JlZyIgLSAweCUwOHhcbiIsIChyZWcpKQotCi1zdGF0aWMgdTMyICpjb25zdCBUX251bSA9ICh1MzIgKilPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9UX05VTTsKLXN0YXRpYyB1MzIgKmNvbnN0IFRfZGVuID0gKHUzMiAqKU9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1RfREVOOwotc3RhdGljIHUzMiAqY29uc3QgZW1pZl9zaXplcyA9ICh1MzIgKilPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9TSVpFOwotCi0vKgotICogT3JnYW5pemF0aW9uIGFuZCByZWZyZXNoIHJlcXVpcmVtZW50cyBmb3IgTFBERFIyIGRldmljZXMgb2YgZGlmZmVyZW50Ci0gKiB0eXBlcyBhbmQgZGVuc2l0aWVzLiBEZXJpdmVkIGZyb20gSkVTRDIwOS0yIHNlY3Rpb24gMi40Ci0gKi8KLWNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyBhZGRyZXNzaW5nX3RhYmxlW10gPSB7Ci0JLyogQmFua3MgdFJFRkl4MTAgICAgIHJvd3gzMixyb3d4MTYgICAgICBjb2x4MzIsY29seDE2CWRlbnNpdHkgKi8KLQl7QkFOS1M0LCBUX1JFRklfMTVfNiwge1JPV18xMiwgUk9XXzEyfSwge0NPTF83LCBDT0xfOH0gfSwvKjY0TSAqLwotCXtCQU5LUzQsIFRfUkVGSV8xNV82LCB7Uk9XXzEyLCBST1dfMTJ9LCB7Q09MXzgsIENPTF85fSB9LC8qMTI4TSAqLwotCXtCQU5LUzQsIFRfUkVGSV83XzgsIHtST1dfMTMsIFJPV18xM30sIHtDT0xfOCwgQ09MXzl9IH0sLyoyNTZNICovCi0Je0JBTktTNCwgVF9SRUZJXzdfOCwge1JPV18xMywgUk9XXzEzfSwge0NPTF85LCBDT0xfMTB9IH0sLyo1MTJNICovCi0Je0JBTktTOCwgVF9SRUZJXzdfOCwge1JPV18xMywgUk9XXzEzfSwge0NPTF85LCBDT0xfMTB9IH0sLyoxR1M0ICovCi0Je0JBTktTOCwgVF9SRUZJXzNfOSwge1JPV18xNCwgUk9XXzE0fSwge0NPTF85LCBDT0xfMTB9IH0sLyoyR1M0ICovCi0Je0JBTktTOCwgVF9SRUZJXzNfOSwge1JPV18xNCwgUk9XXzE0fSwge0NPTF8xMCwgQ09MXzExfSB9LC8qNEcgKi8KLQl7QkFOS1M4LCBUX1JFRklfM185LCB7Uk9XXzE1LCBST1dfMTV9LCB7Q09MXzEwLCBDT0xfMTF9IH0sLyo4RyAqLwotCXtCQU5LUzQsIFRfUkVGSV83XzgsIHtST1dfMTQsIFJPV18xNH0sIHtDT0xfOSwgQ09MXzEwfSB9LC8qMUdTMiAqLwotCXtCQU5LUzQsIFRfUkVGSV8zXzksIHtST1dfMTUsIFJPV18xNX0sIHtDT0xfOSwgQ09MXzEwfSB9LC8qMkdTMiAqLwotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBscGRkcjJfZGVuc2l0eV8yX3NpemVfaW5fbWJ5dGVzW10gPSB7Ci0JOCwJCQkvKiA2NE1iICovCi0JMTYsCQkJLyogMTI4TWIgKi8KLQkzMiwJCQkvKiAyNTZNYiAqLwotCTY0LAkJCS8qIDUxMk1iICovCi0JMTI4LAkJCS8qIDFHYiAgICovCi0JMjU2LAkJCS8qIDJHYiAgICovCi0JNTEyLAkJCS8qIDRHYiAgICovCi0JMTAyNCwJCQkvKiA4R2IgICAqLwotCTIwNDgsCQkJLyogMTZHYiAgKi8KLQk0MDk2CQkJLyogMzJHYiAgKi8KLX07Ci0KLS8qCi0gKiBDYWxjdWxhdGUgdGhlIHBlcmlvZCBvZiBERFIgY2xvY2sgZnJvbSBmcmVxdWVuY3kgdmFsdWUgYW5kIHNldCB0aGUKLSAqIGRlbm9taW5hdG9yIGFuZCBudW1lcmF0b3IgaW4gZ2xvYmFsIHZhcmlhYmxlcyBmb3IgZWFzeSBhY2Nlc3MgbGF0ZXIKLSAqLwotc3RhdGljIHZvaWQgc2V0X2Rkcl9jbGtfcGVyaW9kKHUzMiBmcmVxKQotewotCS8qCi0JICogcGVyaW9kID0gMS9mcmVxCi0JICogcGVyaW9kX2luX25zID0gMTBeOS9mcmVxCi0JICovCi0JKlRfbnVtID0gMTAwMDAwMDAwMDsKLQkqVF9kZW4gPSBmcmVxOwotCWNhbmNlbF9vdXQoVF9udW0sIFRfZGVuLCAyMDApOwotCi19Ci0KLS8qCi0gKiBDb252ZXJ0IHRpbWUgaW4gbmFubyBzZWNvbmRzIHRvIG51bWJlciBvZiBjeWNsZXMgb2YgRERSIGNsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIG5zXzJfY3ljbGVzKHUzMiBucykKLXsKLQlyZXR1cm4gKChucyAqICgqVF9kZW4pKSArICgqVF9udW0pIC0gMSkgLyAoKlRfbnVtKTsKLX0KLQotLyoKLSAqIG5zXzJfY3ljbGVzIHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCB0aGUgdGltZSBwYXNzZWQgaXMgMiB0aW1lcyB0aGUgYWN0dWFsCi0gKiB2YWx1ZSh0byBhdm9pZCBmcmFjdGlvbnMpLiBUaGUgY3ljbGVzIHJldHVybmVkIGlzIGZvciB0aGUgb3JpZ2luYWwgdmFsdWUgb2YKLSAqIHRoZSB0aW1pbmcgcGFyYW1ldGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIG5zX3gyXzJfY3ljbGVzKHUzMiBucykKLXsKLQlyZXR1cm4gKChucyAqICgqVF9kZW4pKSArICgqVF9udW0pICogMiAtIDEpIC8gKCgqVF9udW0pICogMik7Ci19Ci0KLS8qCi0gKiBGaW5kIGFkZHJlc3NpbmcgdGFibGUgaW5kZXggYmFzZWQgb24gdGhlIGRldmljZSdzIHR5cGUoUzIgb3IgUzQpIGFuZAotICogZGVuc2l0eQotICovCi1zOCBhZGRyZXNzaW5nX3RhYmxlX2luZGV4KHU4IHR5cGUsIHU4IGRlbnNpdHksIHU4IHdpZHRoKQotewotCXU4IGluZGV4OwotCWlmICgoZGVuc2l0eSA+IExQRERSMl9ERU5TSVRZXzhHYikgfHwgKHdpZHRoID09IExQRERSMl9JT19XSURUSF84KSkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBMb29rIGF0IHRoZSB3YXkgQUREUl9UQUJMRV9JTkRFWCogdmFsdWVzIGhhdmUgYmVlbiBkZWZpbmVkCi0JICogaW4gZW1pZi5oIGNvbXBhcmVkIHRvIExQRERSMl9ERU5TSVRZXyogdmFsdWVzCi0JICogVGhlIHRhYmxlIGlzIGxheWVkIG91dCBpbiB0aGUgaW5jcmVhc2luZyBvcmRlciBvZiBkZW5zaXR5Ci0JICogKGlnbm9yaW5nIHR5cGUpLiBUaGUgZXhjZXB0aW9ucyAxR1MyIGFuZCAyR1MyIGhhdmUgYmVlbiBwbGFjZWQKLQkgKiBhdCB0aGUgZW5kCi0JICovCi0JaWYgKCh0eXBlID09IExQRERSMl9UWVBFX1MyKSAmJiAoZGVuc2l0eSA9PSBMUEREUjJfREVOU0lUWV8xR2IpKQotCQlpbmRleCA9IEFERFJfVEFCTEVfSU5ERVgxR1MyOwotCWVsc2UgaWYgKCh0eXBlID09IExQRERSMl9UWVBFX1MyKSAmJiAoZGVuc2l0eSA9PSBMUEREUjJfREVOU0lUWV8yR2IpKQotCQlpbmRleCA9IEFERFJfVEFCTEVfSU5ERVgyR1MyOwotCWVsc2UKLQkJaW5kZXggPSBkZW5zaXR5OwotCi0JZGVidWcoImVtaWY6IGFkZHJlc3NpbmcgdGFibGUgaW5kZXggJWRcbiIsIGluZGV4KTsKLQotCXJldHVybiBpbmRleDsKLX0KLQotLyoKLSAqIEZpbmQgdGhlIHRoZSByaWdodCB0aW1pbmcgdGFibGUgZnJvbSB0aGUgYXJyYXkgb2YgdGltaW5nCi0gKiB0YWJsZXMgb2YgdGhlIGRldmljZSB1c2luZyBERFIgY2xvY2sgZnJlcXVlbmN5Ci0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKmdldF90aW1pbmdzX3RhYmxlKGNvbnN0IHN0cnVjdAotCQkJbHBkZHIyX2FjX3RpbWluZ3MgY29uc3QgKmNvbnN0ICpkZXZpY2VfdGltaW5ncywKLQkJCXUzMiBmcmVxKQotewotCXUzMiBpLCB0ZW1wLCBmcmVxX25lYXJlc3Q7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzID0gMDsKLQotCWVtaWZfYXNzZXJ0KGZyZXEgPD0gTUFYX0xQRERSMl9GUkVRKTsKLQllbWlmX2Fzc2VydChkZXZpY2VfdGltaW5ncyk7Ci0KLQkvKgotCSAqIFN0YXJ0IHdpdGggdGhlIG1heGltdW0gYWxsb3dlZCBmcmVxdWVuY3kgLSB0aGF0IGlzIGFsd2F5cyBzYWZlCi0JICovCi0JZnJlcV9uZWFyZXN0ID0gTUFYX0xQRERSMl9GUkVROwotCS8qCi0JICogRmluZCB0aGUgdGltaW5ncyB0YWJsZSB0aGF0IGhhcyB0aGUgbWF4IGZyZXF1ZW5jeSB2YWx1ZToKLQkgKiAgIGkuICBBYm92ZSBvciBlcXVhbCB0byB0aGUgRERSIGZyZXF1ZW5jeSAtIHNhZmUKLQkgKiAgIGlpLiBUaGUgbG93ZXN0IHRoYXQgc2F0aXNmaWVzIGNvbmRpdGlvbiAoaSkgLSBvcHRpbWFsCi0JICovCi0JZm9yIChpID0gMDsgKGkgPCBNQVhfTlVNX1NQRUVEQklOUykgJiYgZGV2aWNlX3RpbWluZ3NbaV07IGkrKykgewotCQl0ZW1wID0gZGV2aWNlX3RpbWluZ3NbaV0tPm1heF9mcmVxOwotCQlpZiAoKHRlbXAgPj0gZnJlcSkgJiYgKHRlbXAgPD0gZnJlcV9uZWFyZXN0KSkgewotCQkJZnJlcV9uZWFyZXN0ID0gdGVtcDsKLQkJCXRpbWluZ3MgPSBkZXZpY2VfdGltaW5nc1tpXTsKLQkJfQotCX0KLQlkZWJ1ZygiZW1pZjogdGltaW5ncyB0YWJsZTogJWRcbiIsIGZyZXFfbmVhcmVzdCk7Ci0JcmV0dXJuIHRpbWluZ3M7Ci19Ci0KLS8qCi0gKiBGaW5kcyB0aGUgdmFsdWUgb2YgZW1pZl9zZHJhbV9jb25maWdfcmVnCi0gKiBBbGwgcGFyYW1ldGVycyBhcmUgcHJvZ3JhbW1lZCBiYXNlZCBvbiB0aGUgZGV2aWNlIG9uIENTMC4KLSAqIElmIHRoZXJlIGlzIGEgZGV2aWNlIG9uIENTMSwgaXQgd2lsbCBiZSBzYW1lIGFzIHRoYXQgb24gQ1MwIG9yCi0gKiBpdCB3aWxsIGJlIE5WTS4gV2UgZG9uJ3Qgc3VwcG9ydCBOVk0geWV0LgotICogSWYgY3MxX2RldmljZSBwb2ludGVyIGlzIE5VTEwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG5vIGRldmljZQotICogb24gQ1MxCi0gKi8KLXN0YXRpYyB1MzIgZ2V0X3NkcmFtX2NvbmZpZ19yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZSwKLQkJCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlLAotCQkJCWNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZywKLQkJCQl1OCBSTCkKLXsKLQl1MzIgY29uZmlnX3JlZyA9IDA7Ci0KLQljb25maWdfcmVnIHw9ICAoY3MwX2RldmljZS0+dHlwZSArIDQpIDw8IE9NQVA0NFhYX1JFR19TRFJBTV9UWVBFX1NISUZUOwotCWNvbmZpZ19yZWcgfD0gIEVNSUZfSU5URVJMRUFWSU5HX1BPTElDWV9NQVhfSU5URVJMRUFWSU5HIDw8Ci0JCQlPTUFQNDRYWF9SRUdfSUJBTktfUE9TX1NISUZUOwotCi0JY29uZmlnX3JlZyB8PSBjczBfZGV2aWNlLT5pb193aWR0aCA8PCBPTUFQNDRYWF9SRUdfTkFSUk9XX01PREVfU0hJRlQ7Ci0KLQljb25maWdfcmVnIHw9IFJMIDw8IE9NQVA0NFhYX1JFR19DTF9TSElGVDsKLQotCWNvbmZpZ19yZWcgfD0gYWRkcmVzc2luZy0+cm93X3N6W2NzMF9kZXZpY2UtPmlvX3dpZHRoXSA8PAotCQkJT01BUDQ0WFhfUkVHX1JPV1NJWkVfU0hJRlQ7Ci0KLQljb25maWdfcmVnIHw9IGFkZHJlc3NpbmctPm51bV9iYW5rcyA8PCBPTUFQNDRYWF9SRUdfSUJBTktfU0hJRlQ7Ci0KLQljb25maWdfcmVnIHw9IChjczFfZGV2aWNlID8gRUJBTktfQ1MxX0VOIDogRUJBTktfQ1MxX0RJUykgPDwKLQkJCU9NQVA0NFhYX1JFR19FQkFOS19TSElGVDsKLQotCWNvbmZpZ19yZWcgfD0gYWRkcmVzc2luZy0+Y29sX3N6W2NzMF9kZXZpY2UtPmlvX3dpZHRoXSA8PAotCQkJT01BUDQ0WFhfUkVHX1BBR0VTSVpFX1NISUZUOwotCi0JcmV0dXJuIGNvbmZpZ19yZWc7Ci19Ci0KLXN0YXRpYyB1MzIgZ2V0X3NkcmFtX3JlZl9jdHJsKHUzMiBmcmVxLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nKQotewotCXUzMiByZWZfY3RybCA9IDAsIHZhbCA9IDAsIGZyZXFfa2h6OwotCWZyZXFfa2h6ID0gZnJlcSAvIDEwMDA7Ci0JLyoKLQkgKiByZWZyZXNoIHJhdGUgdG8gYmUgc2V0IGlzICd0UkVGSSAqIGZyZXEgaW4gTUh6Ci0JICogZGl2aXNpb24gYnkgMTAwMDAgdG8gYWNjb3VudCBmb3Iga2h6IGFuZCB4MTAgaW4gdF9SRUZJX3VzX3gxMAotCSAqLwotCXZhbCA9IGFkZHJlc3NpbmctPnRfUkVGSV91c194MTAgKiBmcmVxX2toeiAvIDEwMDAwOwotCXJlZl9jdHJsIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfUkVGUkVTSF9SQVRFX1NISUZUOwotCi0JcmV0dXJuIHJlZl9jdHJsOwotfQotCi1zdGF0aWMgdTMyIGdldF9zZHJhbV90aW1fMV9yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfbWluX3RjayAqbWluX3RjaywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcpCi17Ci0JdTMyIHRpbTEgPSAwLCB2YWwgPSAwOwotCXZhbCA9IG1heChtaW5fdGNrLT50V1RSLCBuc194Ml8yX2N5Y2xlcyh0aW1pbmdzLT50V1RSeDIpKSAtIDE7Ci0JdGltMSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfV1RSX1NISUZUOwotCi0JaWYgKGFkZHJlc3NpbmctPm51bV9iYW5rcyA9PSBCQU5LUzgpCi0JCXZhbCA9ICh0aW1pbmdzLT50RkFXICogKCpUX2RlbikgKyA0ICogKCpUX251bSkgLSAxKSAvCi0JCQkJCQkJKDQgKiAoKlRfbnVtKSkgLSAxOwotCWVsc2UKLQkJdmFsID0gbWF4KG1pbl90Y2stPnRSUkQsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSUkQpKSAtIDE7Ci0KLQl0aW0xIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SUkRfU0hJRlQ7Ci0KLQl2YWwgPSBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UkFTbWluICsgdGltaW5ncy0+dFJQYWIpIC0gMTsKLQl0aW0xIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SQ19TSElGVDsKLQotCXZhbCA9IG1heChtaW5fdGNrLT50UkFTX01JTiwgbnNfMl9jeWNsZXModGltaW5ncy0+dFJBU21pbikpIC0gMTsKLQl0aW0xIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SQVNfU0hJRlQ7Ci0KLQl2YWwgPSBtYXgobWluX3Rjay0+dFdSLCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50V1IpKSAtIDE7Ci0JdGltMSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfV1JfU0hJRlQ7Ci0KLQl2YWwgPSBtYXgobWluX3Rjay0+dFJDRCwgbnNfMl9jeWNsZXModGltaW5ncy0+dFJDRCkpIC0gMTsKLQl0aW0xIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SQ0RfU0hJRlQ7Ci0KLQl2YWwgPSBtYXgobWluX3Rjay0+dFJQX0FCLCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UlBhYikpIC0gMTsKLQl0aW0xIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SUF9TSElGVDsKLQotCXJldHVybiB0aW0xOwotfQotCi1zdGF0aWMgdTMyIGdldF9zZHJhbV90aW1fMl9yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfbWluX3RjayAqbWluX3RjaykKLXsKLQl1MzIgdGltMiA9IDAsIHZhbCA9IDA7Ci0JdmFsID0gbWF4KG1pbl90Y2stPnRDS0UsIHRpbWluZ3MtPnRDS0UpIC0gMTsKLQl0aW0yIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9DS0VfU0hJRlQ7Ci0KLQl2YWwgPSBtYXgobWluX3Rjay0+dFJUUCwgbnNfeDJfMl9jeWNsZXModGltaW5ncy0+dFJUUHgyKSkgLSAxOwotCXRpbTIgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JUUF9TSElGVDsKLQotCS8qCi0JICogdFhTUkQgPSB0UkZDYWIgKyAxMCBucy4gWFNSRCBhbmQgWFNOUiBzaG91bGQgaGF2ZSB0aGUKLQkgKiBzYW1lIHZhbHVlCi0JICovCi0JdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFhTUikgLSAxOwotCXRpbTIgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1hTUkRfU0hJRlQ7Ci0JdGltMiB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfWFNOUl9TSElGVDsKLQotCXZhbCA9IG1heChtaW5fdGNrLT50WFAsIG5zX3gyXzJfY3ljbGVzKHRpbWluZ3MtPnRYUHgyKSkgLSAxOwotCXRpbTIgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1hQX1NISUZUOwotCi0JcmV0dXJuIHRpbTI7Ci19Ci0KLXN0YXRpYyB1MzIgZ2V0X3NkcmFtX3RpbV8zX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZykKLXsKLQl1MzIgdGltMyA9IDAsIHZhbCA9IDA7Ci0JdmFsID0gbWluKHRpbWluZ3MtPnRSQVNtYXggKiAxMCAvIGFkZHJlc3NpbmctPnRfUkVGSV91c194MTAgLSAxLCAweEYpOwotCXRpbTMgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JBU19NQVhfU0hJRlQ7Ci0KLQl2YWwgPSBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UkZDYWIpIC0gMTsKLQl0aW0zIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SRkNfU0hJRlQ7Ci0KLQl2YWwgPSBuc194Ml8yX2N5Y2xlcyh0aW1pbmdzLT50RFFTQ0tNQVh4MikgLSAxOwotCXRpbTMgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1REUVNDS01BWF9TSElGVDsKLQotCXZhbCA9IG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRaUUNTKSAtIDE7Ci0JdGltMyB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1pRX1pRQ1NfU0hJRlQ7Ci0KLQl2YWwgPSBtYXgobWluX3Rjay0+dENLRVNSLCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50Q0tFU1IpKSAtIDE7Ci0JdGltMyB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfQ0tFU1JfU0hJRlQ7Ci0KLQlyZXR1cm4gdGltMzsKLX0KLQotc3RhdGljIHUzMiBnZXRfenFfY29uZmlnX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcsCi0JCQkgICAgIHU4IHZvbHRfcmFtcCkKLXsKLQl1MzIgenEgPSAwLCB2YWwgPSAwOwotCWlmICh2b2x0X3JhbXApCi0JCXZhbCA9Ci0JCSAgICBFTUlGX1pRQ1NfSU5URVJWQUxfRFZGU19JTl9VUyAqIDEwIC8KLQkJICAgIGFkZHJlc3NpbmctPnRfUkVGSV91c194MTA7Ci0JZWxzZQotCQl2YWwgPQotCQkgICAgRU1JRl9aUUNTX0lOVEVSVkFMX05PUk1BTF9JTl9VUyAqIDEwIC8KLQkJICAgIGFkZHJlc3NpbmctPnRfUkVGSV91c194MTA7Ci0JenEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19aUV9SRUZJTlRFUlZBTF9TSElGVDsKLQotCXpxIHw9IChSRUdfWlFfWlFDTF9NVUxUIC0gMSkgPDwgT01BUDQ0WFhfUkVHX1pRX1pRQ0xfTVVMVF9TSElGVDsKLQotCXpxIHw9IChSRUdfWlFfWlFJTklUX01VTFQgLSAxKSA8PCBPTUFQNDRYWF9SRUdfWlFfWlFJTklUX01VTFRfU0hJRlQ7Ci0KLQl6cSB8PSBSRUdfWlFfU0ZFWElURU5fRU5BQkxFIDw8IE9NQVA0NFhYX1JFR19aUV9TRkVYSVRFTl9TSElGVDsKLQotCS8qCi0JICogQXNzdW1pbmcgdGhhdCB0d28gY2hpcHNlbGVjdHMgaGF2ZSBhIHNpbmdsZSBjYWxpYnJhdGlvbiByZXNpc3RvcgotCSAqIElmIHRoZXJlIGFyZSBpbmRlZWQgdHdvIGNhbGlicmF0aW9uIHJlc2lzdG9ycywgdGhlbiB0aGlzIGZsYWcgc2hvdWxkCi0JICogYmUgZW5hYmxlZCB0byB0YWtlIGFkdmFudGFnZSBvZiBkdWFsIGNhbGlicmF0aW9uIGZlYXR1cmUuCi0JICogVGhpcyBkYXRhIHNob3VsZCBpZGVhbGx5IGNvbWUgZnJvbSBib2FyZCBmaWxlcy4gQnV0IGNvbnNpZGVyaW5nCi0JICogdGhhdCBub25lIG9mIHRoZSBib2FyZHMgdG9kYXkgaGF2ZSBjYWxpYnJhdGlvbiByZXNpc3RvcnMgcGVyIENTLAotCSAqIGl0IHdvdWxkIGJlIGFuIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgotCSAqLwotCXpxIHw9IFJFR19aUV9EVUFMQ0FMRU5fRElTQUJMRSA8PCBPTUFQNDRYWF9SRUdfWlFfRFVBTENBTEVOX1NISUZUOwotCi0JenEgfD0gUkVHX1pRX0NTMEVOX0VOQUJMRSA8PCBPTUFQNDRYWF9SRUdfWlFfQ1MwRU5fU0hJRlQ7Ci0KLQl6cSB8PSAoY3MxX2RldmljZSA/IDEgOiAwKSA8PCBPTUFQNDRYWF9SRUdfWlFfQ1MxRU5fU0hJRlQ7Ci0KLQlyZXR1cm4genE7Ci19Ci0KLXN0YXRpYyB1MzIgZ2V0X3RlbXBfYWxlcnRfY29uZmlnKGNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2UsCi0JCQkJIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZywKLQkJCQkgdTggaXNfZGVyYXRlZCkKLXsKLQl1MzIgYWxlcnQgPSAwLCBpbnRlcnZhbDsKLQlpbnRlcnZhbCA9Ci0JICAgIFRFTVBfQUxFUlRfUE9MTF9JTlRFUlZBTF9NUyAqIDEwMDAwIC8gYWRkcmVzc2luZy0+dF9SRUZJX3VzX3gxMDsKLQlpZiAoaXNfZGVyYXRlZCkKLQkJaW50ZXJ2YWwgKj0gNDsKLQlhbGVydCB8PSBpbnRlcnZhbCA8PCBPTUFQNDRYWF9SRUdfVEFfUkVGSU5URVJWQUxfU0hJRlQ7Ci0KLQlhbGVydCB8PSBURU1QX0FMRVJUX0NPTkZJR19ERVZDVF8xIDw8IE9NQVA0NFhYX1JFR19UQV9ERVZDTlRfU0hJRlQ7Ci0KLQlhbGVydCB8PSBURU1QX0FMRVJUX0NPTkZJR19ERVZXRFRfMzIgPDwgT01BUDQ0WFhfUkVHX1RBX0RFVldEVF9TSElGVDsKLQotCWFsZXJ0IHw9IDEgPDwgT01BUDQ0WFhfUkVHX1RBX1NGRVhJVEVOX1NISUZUOwotCi0JYWxlcnQgfD0gMSA8PCBPTUFQNDRYWF9SRUdfVEFfQ1MwRU5fU0hJRlQ7Ci0KLQlhbGVydCB8PSAoY3MxX2RldmljZSA/IDEgOiAwKSA8PCBPTUFQNDRYWF9SRUdfVEFfQ1MxRU5fU0hJRlQ7Ci0KLQlyZXR1cm4gYWxlcnQ7Ci19Ci0KLXN0YXRpYyB1MzIgZ2V0X3JlYWRfaWRsZV9jdHJsX3JlZyh1OCB2b2x0X3JhbXApCi17Ci0JdTMyIGlkbGUgPSAwLCB2YWwgPSAwOwotCWlmICh2b2x0X3JhbXApCi0JCXZhbCA9IG5zXzJfY3ljbGVzKFJFQURfSURMRV9JTlRFUlZBTF9EVkZTKSAvIDY0IC0gMTsKLQllbHNlCi0JCS8qTWF4aW11bSB2YWx1ZSBpbiBub3JtYWwgY29uZGl0aW9ucyAtIHN1Z2dlc3RlZCBieSBodyB0ZWFtICovCi0JCXZhbCA9IDB4MUZGOwotCWlkbGUgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hJRlQ7Ci0KLQlpZGxlIHw9IEVNSUZfUkVHX1JFQURfSURMRV9MRU5fVkFMIDw8IE9NQVA0NFhYX1JFR19SRUFEX0lETEVfTEVOX1NISUZUOwotCi0JcmV0dXJuIGlkbGU7Ci19Ci0KLXN0YXRpYyB1MzIgZ2V0X2Rkcl9waHlfY3RybF8xKHUzMiBmcmVxLCB1OCBSTCkKLXsKLQl1MzIgcGh5ID0gMCwgdmFsID0gMDsKLQotCXBoeSB8PSAoUkwgKyAyKSA8PCBPTUFQNDRYWF9SRUdfUkVBRF9MQVRFTkNZX1NISUZUOwotCi0JaWYgKGZyZXEgPD0gMTAwMDAwMDAwKQotCQl2YWwgPSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8xMDBfTUhaX0FORF9MRVNTOwotCWVsc2UgaWYgKGZyZXEgPD0gMjAwMDAwMDAwKQotCQl2YWwgPSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8yMDBfTUhaOwotCWVsc2UKLQkJdmFsID0gRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfNDAwX01IWjsKLQlwaHkgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hJRlQ7Ci0KLQkvKiBPdGhlciBmaWVsZHMgYXJlIGNvbnN0YW50IG1hZ2ljIHZhbHVlcy4gSGFyZGNvZGUgdGhlbSB0b2dldGhlciAqLwotCXBoeSB8PSBFTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMIDw8Ci0JCU9NQVA0NFhYX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfU0hJRlQ7Ci0KLQlyZXR1cm4gcGh5OwotfQotCi1zdGF0aWMgdTMyIGdldF9lbWlmX21lbV9zaXplKHN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzICpkZXZpY2VzKQotewotCXUzMiBzaXplX21ieXRlcyA9IDAsIHRlbXA7Ci0KLQlpZiAoIWRldmljZXMpCi0JCXJldHVybiAwOwotCi0JaWYgKGRldmljZXMtPmNzMF9kZXZpY2VfZGV0YWlscykgewotCQl0ZW1wID0gZGV2aWNlcy0+Y3MwX2RldmljZV9kZXRhaWxzLT5kZW5zaXR5OwotCQlzaXplX21ieXRlcyArPSBscGRkcjJfZGVuc2l0eV8yX3NpemVfaW5fbWJ5dGVzW3RlbXBdOwotCX0KLQotCWlmIChkZXZpY2VzLT5jczFfZGV2aWNlX2RldGFpbHMpIHsKLQkJdGVtcCA9IGRldmljZXMtPmNzMV9kZXZpY2VfZGV0YWlscy0+ZGVuc2l0eTsKLQkJc2l6ZV9tYnl0ZXMgKz0gbHBkZHIyX2RlbnNpdHlfMl9zaXplX2luX21ieXRlc1t0ZW1wXTsKLQl9Ci0JLyogY29udmVydCB0byBieXRlcyAqLwotCXJldHVybiBzaXplX21ieXRlcyA8PCAyMDsKLX0KLQotLyogR2V0cyB0aGUgZW5jb2RpbmcgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIERNTSBzZWN0aW9uIHNpemUgKi8KLXUzMiBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAodTMyIHNlY3Rpb25fc2l6ZSkKLXsKLQkvKgotCSAqIFNlY3Rpb24gc2l6ZSBtYXBwaW5nOgotCSAqIDB4MDogMTYtTWlCIHNlY3Rpb24KLQkgKiAweDE6IDMyLU1pQiBzZWN0aW9uCi0JICogMHgyOiA2NC1NaUIgc2VjdGlvbgotCSAqIDB4MzogMTI4LU1pQiBzZWN0aW9uCi0JICogMHg0OiAyNTYtTWlCIHNlY3Rpb24KLQkgKiAweDU6IDUxMi1NaUIgc2VjdGlvbgotCSAqIDB4NjogMS1HaUIgc2VjdGlvbgotCSAqIDB4NzogMi1HaUIgc2VjdGlvbgotCSAqLwotCXNlY3Rpb25fc2l6ZSA+Pj0gMjQ7IC8qIGRpdmlkZSBieSAxNiBNQiAqLwotCXJldHVybiBsb2dfMl9uX3JvdW5kX2Rvd24oc2VjdGlvbl9zaXplKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pZl9jYWxjdWxhdGVfcmVncygKLQkJY29uc3Qgc3RydWN0IGVtaWZfZGV2aWNlX2RldGFpbHMgKmVtaWZfZGV2X2RldGFpbHMsCi0JCXUzMiBmcmVxLCBzdHJ1Y3QgZW1pZl9yZWdzICpyZWdzKQotewotCXUzMiB0ZW1wLCBzeXNfZnJlcTsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3Npbmc7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzOwotCWNvbnN0IHN0cnVjdCBscGRkcjJfbWluX3RjayAqbWluX3RjazsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2X2RldGFpbHMgPQotCQkJCQllbWlmX2Rldl9kZXRhaWxzLT5jczBfZGV2aWNlX2RldGFpbHM7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2Rldl9kZXRhaWxzID0KLQkJCQkJZW1pZl9kZXZfZGV0YWlscy0+Y3MxX2RldmljZV9kZXRhaWxzOwotCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKmNzMF9kZXZfdGltaW5ncyA9Ci0JCQkJCWVtaWZfZGV2X2RldGFpbHMtPmNzMF9kZXZpY2VfdGltaW5nczsKLQotCWVtaWZfYXNzZXJ0KGVtaWZfZGV2X2RldGFpbHMpOwotCWVtaWZfYXNzZXJ0KHJlZ3MpOwotCS8qCi0JICogWW91IGNhbiBub3QgaGF2ZSBhIGRldmljZSBvbiBDUzEgd2l0aG91dCBvbmUgb24gQ1MwCi0JICogU28gY29uZmlndXJpbmcgRU1JRiB3aXRob3V0IGEgZGV2aWNlIG9uIENTMCBkb2Vzbid0Ci0JICogbWFrZSBzZW5zZQotCSAqLwotCWVtaWZfYXNzZXJ0KGNzMF9kZXZfZGV0YWlscyk7Ci0JZW1pZl9hc3NlcnQoY3MwX2Rldl9kZXRhaWxzLT50eXBlICE9IExQRERSMl9UWVBFX05WTSk7Ci0JLyoKLQkgKiBJZiB0aGVyZSBpcyBhIGRldmljZSBvbiBDUzEgaXQgc2hvdWxkIGJlIHNhbWUgdHlwZSBhcyBDUzAKLQkgKiAob3IgTlZNLiBCdXQgTlZNIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgeWV0KQotCSAqLwotCWVtaWZfYXNzZXJ0KChjczFfZGV2X2RldGFpbHMgPT0gTlVMTCkgfHwKLQkJICAgIChjczFfZGV2X2RldGFpbHMtPnR5cGUgPT0gTFBERFIyX1RZUEVfTlZNKSB8fAotCQkgICAgKGNzMF9kZXZfZGV0YWlscy0+dHlwZSA9PSBjczFfZGV2X2RldGFpbHMtPnR5cGUpKTsKLQllbWlmX2Fzc2VydChmcmVxIDw9IE1BWF9MUEREUjJfRlJFUSk7Ci0KLQlzZXRfZGRyX2Nsa19wZXJpb2QoZnJlcSk7Ci0KLQkvKgotCSAqIFRoZSBkZXZpY2Ugb24gQ1MwIGlzIHVzZWQgZm9yIGFsbCB0aW1pbmcgY2FsY3VsYXRpb25zCi0JICogVGhlcmUgaXMgb25seSBvbmUgc2V0IG9mIHJlZ2lzdGVycyBmb3IgdGltaW5ncyBwZXIgRU1JRi4gU28sIGlmIHRoZQotCSAqIHNlY29uZCBDUyhDUzEpIGhhcyBhIGRldmljZSwgaXQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdGltaW5ncyBhcyB0aGUKLQkgKiBkZXZpY2Ugb24gQ1MwCi0JICovCi0JdGltaW5ncyA9IGdldF90aW1pbmdzX3RhYmxlKGNzMF9kZXZfdGltaW5ncy0+YWNfdGltaW5ncywgZnJlcSk7Ci0JZW1pZl9hc3NlcnQodGltaW5ncyk7Ci0JbWluX3RjayA9IGNzMF9kZXZfdGltaW5ncy0+bWluX3RjazsKLQotCXRlbXAgPSBhZGRyZXNzaW5nX3RhYmxlX2luZGV4KGNzMF9kZXZfZGV0YWlscy0+dHlwZSwKLQkJCQkgICAgICBjczBfZGV2X2RldGFpbHMtPmRlbnNpdHksCi0JCQkJICAgICAgY3MwX2Rldl9kZXRhaWxzLT5pb193aWR0aCk7Ci0KLQllbWlmX2Fzc2VydCgodGVtcCA+PSAwKSk7Ci0JYWRkcmVzc2luZyA9ICYoYWRkcmVzc2luZ190YWJsZVt0ZW1wXSk7Ci0JZW1pZl9hc3NlcnQoYWRkcmVzc2luZyk7Ci0KLQlzeXNfZnJlcSA9IGdldF9zeXNfY2xrX2ZyZXEoKTsKLQotCXJlZ3MtPnNkcmFtX2NvbmZpZ19pbml0ID0gZ2V0X3NkcmFtX2NvbmZpZ19yZWcoY3MwX2Rldl9kZXRhaWxzLAotCQkJCQkJCWNzMV9kZXZfZGV0YWlscywKLQkJCQkJCQlhZGRyZXNzaW5nLCBSTF9CT09UKTsKLQotCXJlZ3MtPnNkcmFtX2NvbmZpZyA9IGdldF9zZHJhbV9jb25maWdfcmVnKGNzMF9kZXZfZGV0YWlscywKLQkJCQkJCWNzMV9kZXZfZGV0YWlscywKLQkJCQkJCWFkZHJlc3NpbmcsIFJMX0ZJTkFMKTsKLQotCXJlZ3MtPnJlZl9jdHJsID0gZ2V0X3NkcmFtX3JlZl9jdHJsKGZyZXEsIGFkZHJlc3NpbmcpOwotCi0JcmVncy0+c2RyYW1fdGltMSA9IGdldF9zZHJhbV90aW1fMV9yZWcodGltaW5ncywgbWluX3RjaywgYWRkcmVzc2luZyk7Ci0KLQlyZWdzLT5zZHJhbV90aW0yID0gZ2V0X3NkcmFtX3RpbV8yX3JlZyh0aW1pbmdzLCBtaW5fdGNrKTsKLQotCXJlZ3MtPnNkcmFtX3RpbTMgPSBnZXRfc2RyYW1fdGltXzNfcmVnKHRpbWluZ3MsIG1pbl90Y2ssIGFkZHJlc3NpbmcpOwotCi0JcmVncy0+cmVhZF9pZGxlX2N0cmwgPSBnZXRfcmVhZF9pZGxlX2N0cmxfcmVnKExQRERSMl9WT0xUQUdFX1NUQUJMRSk7Ci0KLQlyZWdzLT50ZW1wX2FsZXJ0X2NvbmZpZyA9Ci0JICAgIGdldF90ZW1wX2FsZXJ0X2NvbmZpZyhjczFfZGV2X2RldGFpbHMsIGFkZHJlc3NpbmcsIDApOwotCi0JcmVncy0+enFfY29uZmlnID0gZ2V0X3pxX2NvbmZpZ19yZWcoY3MxX2Rldl9kZXRhaWxzLCBhZGRyZXNzaW5nLAotCQkJCQkgICAgTFBERFIyX1ZPTFRBR0VfU1RBQkxFKTsKLQotCXJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzFfaW5pdCA9Ci0JCQlnZXRfZGRyX3BoeV9jdHJsXzEoc3lzX2ZyZXEgLyAyLCBSTF9CT09UKTsKLQotCXJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzEgPQotCQkJZ2V0X2Rkcl9waHlfY3RybF8xKGZyZXEsIFJMX0ZJTkFMKTsKLQotCXJlZ3MtPmZyZXEgPSBmcmVxOwotCi0JcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV9jb25maWdfaW5pdCk7Ci0JcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV9jb25maWcpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+cmVmX2N0cmwpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fdGltMSk7Ci0JcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV90aW0yKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnNkcmFtX3RpbTMpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+cmVhZF9pZGxlX2N0cmwpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+dGVtcF9hbGVydF9jb25maWcpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+enFfY29uZmlnKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzEpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0KTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUyAqLwordTMyICpjb25zdCBUX251bSA9ICh1MzIgKilPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9UX05VTTsKK3UzMiAqY29uc3QgVF9kZW4gPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfVF9ERU47Cit1MzIgKmNvbnN0IGVtaWZfc2l6ZXMgPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfU0laRTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTCiAvKiBCYXNlIEFDIFRpbWluZyB2YWx1ZXMgc3BlY2lmaWVkIGJ5IEpFU0QyMDktMiBmb3IgNDAwTUh6IG9wZXJhdGlvbiAqLwpAQCAtNjkxLDMwICs2MSw2IEBACiAJLnRGQVcgPSA1MAogfTsKIAotLyogQmFzZSBBQyBUaW1pbmcgdmFsdWVzIHNwZWNpZmllZCBieSBKRVNEMjA5LTIgZm9yIDMzMyBNSHogb3BlcmF0aW9uICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHRpbWluZ3NfamVkZWNfMzMzX21oeiA9IHsKLQkubWF4X2ZyZXEgPSAzMzMwMDAwMDAsCi0JLlJMID0gNSwKLQkudFJQYWIgPSAyMSwKLQkudFJDRCA9IDE4LAotCS50V1IgPSAxNSwKLQkudFJBU21pbiA9IDQyLAotCS50UlJEID0gMTAsCi0JLnRXVFJ4MiA9IDE1LAotCS50WFNSID0gMTQwLAotCS50WFB4MiA9IDE1LAotCS50UkZDYWIgPSAxMzAsCi0JLnRSVFB4MiA9IDE1LAotCS50Q0tFID0gMywKLQkudENLRVNSID0gMTUsCi0JLnRaUUNTID0gOTAsCi0JLnRaUUNMID0gMzYwLAotCS50WlFJTklUID0gMTAwMCwKLQkudERRU0NLTUFYeDIgPSAxMSwKLQkudFJBU21heCA9IDcwLAotCS50RkFXID0gNTAKLX07Ci0KIC8qIEJhc2UgQUMgVGltaW5nIHZhbHVlcyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGZvciAyMDAgTUh6IG9wZXJhdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyB0aW1pbmdzX2plZGVjXzIwMF9taHogPSB7CiAJLm1heF9mcmVxID0gMjAwMDAwMDAwLApAQCAtNzY0LDcgKzExMCw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIGNvbnN0KgogCQkJamVkZWNfYWNfdGltaW5nc1tNQVhfTlVNX1NQRUVEQklOU10gPSB7CiAJJnRpbWluZ3NfamVkZWNfMjAwX21oeiwKLQkmdGltaW5nc19qZWRlY18zMzNfbWh6LAogCSZ0aW1pbmdzX2plZGVjXzQwMF9taHoKIH07CiAKQEAgLTc4Miw0NzMgKzEyNywzIEBACiAJKmNzMV9kZXZpY2VfdGltaW5ncyA9ICZqZWRlY19kZWZhdWx0X3RpbWluZ3M7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTICovCi0KLSNpZmRlZiBDT05GSUdfU1lTX0FVVE9NQVRJQ19TRFJBTV9ERVRFQ1RJT04KLWNvbnN0IGNoYXIgKmdldF9scGRkcjJfdHlwZSh1OCB0eXBlX2lkKQotewotCXN3aXRjaCAodHlwZV9pZCkgewotCWNhc2UgTFBERFIyX1RZUEVfUzQ6Ci0JCXJldHVybiAiTFBERFIyLVM0IjsKLQljYXNlIExQRERSMl9UWVBFX1MyOgotCQlyZXR1cm4gIkxQRERSMi1TMiI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotCi1jb25zdCBjaGFyICpnZXRfbHBkZHIyX2lvX3dpZHRoKHU4IHdpZHRoX2lkKQotewotCXN3aXRjaCAod2lkdGhfaWQpIHsKLQljYXNlIExQRERSMl9JT19XSURUSF84OgotCQlyZXR1cm4gIng4IjsKLQljYXNlIExQRERSMl9JT19XSURUSF8xNjoKLQkJcmV0dXJuICJ4MTYiOwotCWNhc2UgTFBERFIyX0lPX1dJRFRIXzMyOgotCQlyZXR1cm4gIngzMiI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotCi1jb25zdCBjaGFyICpnZXRfbHBkZHIyX21hbnVmYWN0dXJlcih1MzIgbWFudWZhY3R1cmVyKQotewotCXN3aXRjaCAobWFudWZhY3R1cmVyKSB7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NBTVNVTkc6Ci0JCXJldHVybiAiU2Ftc3VuZyI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1FJTU9OREE6Ci0JCXJldHVybiAiUWltb25kYSI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VMUElEQToKLQkJcmV0dXJuICJFbHBpZGEiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9FVFJPTjoKLQkJcmV0dXJuICJFdHJvbiI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05BTllBOgotCQlyZXR1cm4gIk5hbnlhIjsKLQljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfSFlOSVg6Ci0JCXJldHVybiAiSHluaXgiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9NT1NFTDoKLQkJcmV0dXJuICJNb3NlbCI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1dJTkJPTkQ6Ci0JCXJldHVybiAiV2luYm9uZCI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VTTVQ6Ci0JCXJldHVybiAiRVNNVCI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NQQU5TSU9OOgotCQlyZXR1cm4gIlNwYW5zaW9uIjsKLQljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfU1NUOgotCQlyZXR1cm4gIlNTVCI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1pNT1M6Ci0JCXJldHVybiAiWk1PUyI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0lOVEVMOgotCQlyZXR1cm4gIkludGVsIjsKLQljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfTlVNT05ZWDoKLQkJcmV0dXJuICJOdW1vbnl4IjsKLQljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfTUlDUk9OOgotCQlyZXR1cm4gIk1pY3JvbiI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkaXNwbGF5X3NkcmFtX2RldGFpbHModTMyIGVtaWZfbnIsIHUzMiBjcywKLQkJCQkgIHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmRldmljZSkKLXsKLQljb25zdCBjaGFyICptZmdfc3RyOwotCWNvbnN0IGNoYXIgKnR5cGVfc3RyOwotCWNoYXIgZGVuc2l0eV9zdHJbMTBdOwotCXUzMiBkZW5zaXR5OwotCi0JZGVidWcoIkVNSUYlZCBDUyVkXHQiLCBlbWlmX25yLCBjcyk7Ci0KLQlpZiAoIWRldmljZSkgewotCQlkZWJ1ZygiTm9uZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZmdfc3RyID0gZ2V0X2xwZGRyMl9tYW51ZmFjdHVyZXIoZGV2aWNlLT5tYW51ZmFjdHVyZXIpOwotCXR5cGVfc3RyID0gZ2V0X2xwZGRyMl90eXBlKGRldmljZS0+dHlwZSk7Ci0KLQlkZW5zaXR5ID0gbHBkZHIyX2RlbnNpdHlfMl9zaXplX2luX21ieXRlc1tkZXZpY2UtPmRlbnNpdHldOwotCWlmICgoZGVuc2l0eSAvIDEwMjQgKiAxMDI0KSA9PSBkZW5zaXR5KSB7Ci0JCWRlbnNpdHkgLz0gMTAyNDsKLQkJc3ByaW50ZihkZW5zaXR5X3N0ciwgIiVkIEdCIiwgZGVuc2l0eSk7Ci0JfSBlbHNlCi0JCXNwcmludGYoZGVuc2l0eV9zdHIsICIlZCBNQiIsIGRlbnNpdHkpOwotCWlmIChtZmdfc3RyICYmIHR5cGVfc3RyKQotCQlkZWJ1ZygiJXNcdFx0JXNcdCVzXG4iLCBtZmdfc3RyLCB0eXBlX3N0ciwgZGVuc2l0eV9zdHIpOwotfQotCi1zdGF0aWMgdTggaXNfbHBkZHIyX3NkcmFtX3ByZXNlbnQodTMyIGJhc2UsIHUzMiBjcywKLQkJCQkgIHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmxwZGRyMl9kZXZpY2UpCi17Ci0JdTMyIG1yID0gMCwgdGVtcDsKLQotCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIwKTsKLQlpZiAobXIgPiAweEZGKSB7Ci0JCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JdGVtcCA9IChtciAmIExQRERSMl9NUjBfRElfTUFTSykgPj4gTFBERFIyX01SMF9ESV9TSElGVDsKLQlpZiAodGVtcCkgewotCQkvKiBOb3QgU0RSQU0gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCXRlbXAgPSAobXIgJiBMUEREUjJfTVIwX0ROVklfTUFTSykgPj4gTFBERFIyX01SMF9ETlZJX1NISUZUOwotCi0JaWYgKHRlbXApIHsKLQkJLyogRE5WIHN1cHBvcnRlZCAtIEJ1dCBETlYgaXMgb25seSBzdXBwb3J0ZWQgZm9yIE5WTSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SNCk7Ci0JaWYgKG1yID4gMHhGRikgewotCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCi0JCXJldHVybiAwOwotCX0KLQotCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI1KTsKLQlpZiAobXIgPj0gMHhGRikgewotCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCi0JCXJldHVybiAwOwotCX0KLQotCWlmICghZ2V0X2xwZGRyMl9tYW51ZmFjdHVyZXIobXIpKSB7Ci0JCS8qIE1hbnVmYWN0dXJlciBub3QgaWRlbnRpZmllZCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0JbHBkZHIyX2RldmljZS0+bWFudWZhY3R1cmVyID0gbXI7Ci0KLQltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SNik7Ci0JaWYgKG1yID49IDB4RkYpIHsKLQkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SNyk7Ci0JaWYgKG1yID49IDB4RkYpIHsKLQkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SOCk7Ci0JaWYgKG1yID49IDB4RkYpIHsKLQkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl0ZW1wID0gKG1yICYgTVI4X1RZUEVfTUFTSykgPj4gTVI4X1RZUEVfU0hJRlQ7Ci0JaWYgKCFnZXRfbHBkZHIyX3R5cGUodGVtcCkpIHsKLQkJLyogTm90IFNEUkFNICovCi0JCXJldHVybiAwOwotCX0KLQlscGRkcjJfZGV2aWNlLT50eXBlID0gdGVtcDsKLQotCXRlbXAgPSAobXIgJiBNUjhfREVOU0lUWV9NQVNLKSA+PiBNUjhfREVOU0lUWV9TSElGVDsKLQlpZiAodGVtcCA+IExQRERSMl9ERU5TSVRZXzMyR2IpIHsKLQkJLyogRGVuc2l0eSBub3Qgc3VwcG9ydGVkICovCi0JCXJldHVybiAwOwotCX0KLQlscGRkcjJfZGV2aWNlLT5kZW5zaXR5ID0gdGVtcDsKLQotCXRlbXAgPSAobXIgJiBNUjhfSU9fV0lEVEhfTUFTSykgPj4gTVI4X0lPX1dJRFRIX1NISUZUOwotCWlmICghZ2V0X2xwZGRyMl9pb193aWR0aCh0ZW1wKSkgewotCQkvKiBJTyB3aWR0aCB1bnN1cHBvcnRlZCB2YWx1ZSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0JbHBkZHIyX2RldmljZS0+aW9fd2lkdGggPSB0ZW1wOwotCi0JLyoKLQkgKiBJZiBhbGwgdGhlIGFib3ZlIHRlc3RzIHBhc3Mgd2Ugc2hvdWxkCi0JICogaGF2ZSBhIGRldmljZSBvbiB0aGlzIGNoaXAtc2VsZWN0Ci0JICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKHUzMiBlbWlmX25yLCB1OCBjcywKLQkJCXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmxwZGRyMl9kZXZfZGV0YWlscykKLXsKLQl1MzIgcGh5OwotCXUzMiBiYXNlID0gKGVtaWZfbnIgPT0gMSkgPyBPTUFQNDRYWF9FTUlGMSA6IE9NQVA0NFhYX0VNSUYyOwotCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7Ci0KLQlpZiAoIWxwZGRyMl9kZXZfZGV0YWlscykKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBEbyB0aGUgbWluaW11bSBpbml0IGZvciBtb2RlIHJlZ2lzdGVyIGFjY2Vzc2VzICovCi0JaWYgKCFydW5uaW5nX2Zyb21fc2RyYW0oKSkgewotCQlwaHkgPSBnZXRfZGRyX3BoeV9jdHJsXzEoZ2V0X3N5c19jbGtfZnJlcSgpIC8gMiwgUkxfQk9PVCk7Ci0JCXdyaXRlbChwaHksICZlbWlmLT5lbWlmX2Rkcl9waHlfY3RybF8xKTsKLQl9Ci0KLQlpZiAoIShpc19scGRkcjJfc2RyYW1fcHJlc2VudChiYXNlLCBjcywgbHBkZHIyX2Rldl9kZXRhaWxzKSkpCi0JCXJldHVybiBOVUxMOwotCi0JZGlzcGxheV9zZHJhbV9kZXRhaWxzKGVtaWZfbnVtKGJhc2UpLCBjcywgbHBkZHIyX2Rldl9kZXRhaWxzKTsKLQotCXJldHVybiBscGRkcjJfZGV2X2RldGFpbHM7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NZU19BVVRPTUFUSUNfU0RSQU1fREVURUNUSU9OICovCi0KLXN0YXRpYyB2b2lkIGRvX3NkcmFtX2luaXQodTMyIGJhc2UpCi17Ci0JY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqcmVnczsKLQl1MzIgaW5fc2RyYW0sIGVtaWZfbnI7Ci0KLQlkZWJ1ZygiPj5kb19zZHJhbV9pbml0KCkgJXhcbiIsIGJhc2UpOwotCi0JaW5fc2RyYW0gPSBydW5uaW5nX2Zyb21fc2RyYW0oKTsKLQllbWlmX25yID0gKGJhc2UgPT0gT01BUDQ0WFhfRU1JRjEpID8gMSA6IDI7Ci0KLSNpZmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUwotCWVtaWZfZ2V0X3JlZ19kdW1wKGVtaWZfbnIsICZyZWdzKTsKLQlpZiAoIXJlZ3MpIHsKLQkJZGVidWcoIkVNSUY6IHJlZyBkdW1wIG5vdCBwcm92aWRlZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0jZWxzZQotCS8qCi0JICogVGhlIHVzZXIgaGFzIG5vdCBwcm92aWRlZCB0aGUgcmVnaXN0ZXIgdmFsdWVzLiBXZSBuZWVkIHRvCi0JICogY2FsY3VsYXRlIGl0IGJhc2VkIG9uIHRoZSB0aW1pbmdzIGFuZCB0aGUgRERSIGZyZXF1ZW5jeQotCSAqLwotCXN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzIGRldl9kZXRhaWxzOwotCXN0cnVjdCBlbWlmX3JlZ3MgY2FsY3VsYXRlZF9yZWdzOwotCi0JLyoKLQkgKiBHZXQgZGV2aWNlIGRldGFpbHM6Ci0JICogLSBEaXNjb3ZlcmVkIGlmIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTiBpcyBzZXQKLQkgKiAtIE9idGFpbmVkIGZyb20gdXNlciBvdGhlcndpc2UKLQkgKi8KLQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIGNzMF9kZXZfZGV0YWlscywgY3MxX2Rldl9kZXRhaWxzOwotCWVtaWZfcmVzZXRfcGh5KGJhc2UpOwotCWRldl9kZXRhaWxzLmNzMF9kZXZpY2VfZGV0YWlscyA9IGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKGJhc2UsIENTMCwKLQkJCQkJCSZjczBfZGV2X2RldGFpbHMpOwotCWRldl9kZXRhaWxzLmNzMV9kZXZpY2VfZGV0YWlscyA9IGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKGJhc2UsIENTMSwKLQkJCQkJCSZjczFfZGV2X2RldGFpbHMpOwotCWVtaWZfcmVzZXRfcGh5KGJhc2UpOwotCi0JLyogUmV0dXJuIGlmIG5vIGRldmljZXMgb24gdGhpcyBFTUlGICovCi0JaWYgKCFkZXZfZGV0YWlscy5jczBfZGV2aWNlX2RldGFpbHMgJiYKLQkgICAgIWRldl9kZXRhaWxzLmNzMV9kZXZpY2VfZGV0YWlscykgewotCQllbWlmX3NpemVzW2VtaWZfbnIgLSAxXSA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIWluX3NkcmFtKQotCQllbWlmX3NpemVzW2VtaWZfbnIgLSAxXSA9IGdldF9lbWlmX21lbV9zaXplKCZkZXZfZGV0YWlscyk7Ci0KLQkvKgotCSAqIEdldCBkZXZpY2UgdGltaW5nczoKLQkgKiAtIERlZmF1bHQgdGltaW5ncyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGlmCi0JICogICBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MgaXMgc2V0Ci0JICogLSBPYnRhaW5lZCBmcm9tIHVzZXIgb3RoZXJ3aXNlCi0JICovCi0JZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3MoZW1pZl9uciwgJmRldl9kZXRhaWxzLmNzMF9kZXZpY2VfdGltaW5ncywKLQkJCQkmZGV2X2RldGFpbHMuY3MxX2RldmljZV90aW1pbmdzKTsKLQotCS8qIENhbGN1bGF0ZSB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCi0JZW1pZl9jYWxjdWxhdGVfcmVncygmZGV2X2RldGFpbHMsIG9tYXA0X2Rkcl9jbGsoKSwgJmNhbGN1bGF0ZWRfcmVncyk7Ci0JcmVncyA9ICZjYWxjdWxhdGVkX3JlZ3M7Ci0jZW5kaWYgLyogQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MgKi8KLQotCS8qCi0JICogSW5pdGlhbGl6aW5nIHRoZSBMUEREUjIgZGV2aWNlIGNhbiBub3QgaGFwcGVuIGZyb20gU0RSQU0uCi0JICogQ2hhbmdpbmcgdGhlIHRpbWluZyByZWdpc3RlcnMgaW4gRU1JRiBjYW4gaGFwcGVuKGdvaW5nIGZyb20gb25lCi0JICogT1BQIHRvIGFub3RoZXIpCi0JICovCi0JaWYgKCFpbl9zZHJhbSkKLQkJbHBkZHIyX2luaXQoYmFzZSwgcmVncyk7Ci0KLQkvKiBXcml0ZSB0byB0aGUgc2hhZG93IHJlZ2lzdGVycyAqLwotCWVtaWZfdXBkYXRlX3RpbWluZ3MoYmFzZSwgcmVncyk7Ci0KLQlkZWJ1ZygiPDxkb19zZHJhbV9pbml0KCkgJXhcbiIsIGJhc2UpOwotfQotCi1zdGF0aWMgdm9pZCBlbWlmX3Bvc3RfaW5pdF9jb25maWcodTMyIGJhc2UpCi17Ci0Jc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKLQl1MzIgb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOwotCi0JLyogcmVzZXQgcGh5IG9uIEVTMi4wICovCi0JaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzJfMCkKLQkJZW1pZl9yZXNldF9waHkoYmFzZSk7Ci0KLQkvKiBQdXQgRU1JRiBiYWNrIGluIHNtYXJ0IGlkbGUgb24gRVMxLjAgKi8KLQlpZiAob21hcDRfcmV2ID09IE9NQVA0NDMwX0VTMV8wKQotCQl3cml0ZWwoMHg4MDAwMDAwMCwgJmVtaWYtPmVtaWZfcHdyX21nbXRfY3RybCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtbV9pbml0KHUzMiBiYXNlKQotewotCWNvbnN0IHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqbGlzYV9tYXBfcmVnczsKLQotI2lmZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCi0JZW1pZl9nZXRfZG1tX3JlZ3MoJmxpc2FfbWFwX3JlZ3MpOwotI2Vsc2UKLQl1MzIgZW1pZjFfc2l6ZSwgZW1pZjJfc2l6ZSwgbWFwcGVkX3NpemUsIHNlY3Rpb25fbWFwID0gMDsKLQl1MzIgc2VjdGlvbl9jbnQsIHN5c19hZGRyOwotCXN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyBsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZCA9IHswfTsKLQotCW1hcHBlZF9zaXplID0gMDsKLQlzZWN0aW9uX2NudCA9IDM7Ci0Jc3lzX2FkZHIgPSBDT05GSUdfU1lTX1NEUkFNX0JBU0U7Ci0JZW1pZjFfc2l6ZSA9IGVtaWZfc2l6ZXNbMF07Ci0JZW1pZjJfc2l6ZSA9IGVtaWZfc2l6ZXNbMV07Ci0JZGVidWcoImVtaWYxX3NpemUgMHgleCBlbWlmMl9zaXplIDB4JXhcbiIsIGVtaWYxX3NpemUsIGVtaWYyX3NpemUpOwotCi0JaWYgKCFlbWlmMV9zaXplICYmICFlbWlmMl9zaXplKQotCQlyZXR1cm47Ci0KLQkvKiBzeW1tZXRyaWMgaW50ZXJsZWF2ZWQgc2VjdGlvbiAqLwotCWlmIChlbWlmMV9zaXplICYmIGVtaWYyX3NpemUpIHsKLQkJbWFwcGVkX3NpemUgPSBtaW4oZW1pZjFfc2l6ZSwgZW1pZjJfc2l6ZSk7Ci0JCXNlY3Rpb25fbWFwID0gRE1NX0xJU0FfTUFQX0lOVEVSTEVBVkVEX0JBU0VfVkFMOwotCQlzZWN0aW9uX21hcCB8PSAwIDw8IE9NQVA0NFhYX1NEUkNfQUREUl9TSElGVDsKLQkJLyogb25seSBNU0IgKi8KLQkJc2VjdGlvbl9tYXAgfD0gKHN5c19hZGRyID4+IDI0KSA8PAotCQkJCU9NQVA0NFhYX1NZU19BRERSX1NISUZUOwotCQlzZWN0aW9uX21hcCB8PSBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAobWFwcGVkX3NpemUgKiAyKQotCQkJCTw8IE9NQVA0NFhYX1NZU19TSVpFX1NISUZUOwotCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMyA9IHNlY3Rpb25fbWFwOwotCQllbWlmMV9zaXplIC09IG1hcHBlZF9zaXplOwotCQllbWlmMl9zaXplIC09IG1hcHBlZF9zaXplOwotCQlzeXNfYWRkciArPSAobWFwcGVkX3NpemUgKiAyKTsKLQkJc2VjdGlvbl9jbnQtLTsKLQl9Ci0KLQkvKgotCSAqIFNpbmdsZSBFTUlGIHNlY3Rpb24od2UgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDEgc2luZ2xlIEVNSUYKLQkgKiBzZWN0aW9uLSBlaXRoZXIgRU1JRjEgb3IgRU1JRjIgb3Igbm9uZSwgYnV0IG5vdCBib3RoKQotCSAqLwotCWlmIChlbWlmMV9zaXplKSB7Ci0JCXNlY3Rpb25fbWFwID0gRE1NX0xJU0FfTUFQX0VNSUYxX09OTFlfQkFTRV9WQUw7Ci0JCXNlY3Rpb25fbWFwIHw9IGdldF9kbW1fc2VjdGlvbl9zaXplX21hcChlbWlmMV9zaXplKQotCQkJCTw8IE9NQVA0NFhYX1NZU19TSVpFX1NISUZUOwotCQkvKiBvbmx5IE1TQiAqLwotCQlzZWN0aW9uX21hcCB8PSAobWFwcGVkX3NpemUgPj4gMjQpIDw8Ci0JCQkJT01BUDQ0WFhfU0RSQ19BRERSX1NISUZUOwotCQkvKiBvbmx5IE1TQiAqLwotCQlzZWN0aW9uX21hcCB8PSAoc3lzX2FkZHIgPj4gMjQpIDw8IE9NQVA0NFhYX1NZU19BRERSX1NISUZUOwotCQlzZWN0aW9uX2NudC0tOwotCX0KLQlpZiAoZW1pZjJfc2l6ZSkgewotCQlzZWN0aW9uX21hcCA9IERNTV9MSVNBX01BUF9FTUlGMl9PTkxZX0JBU0VfVkFMOwotCQlzZWN0aW9uX21hcCB8PSBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAoZW1pZjJfc2l6ZSkgPDwKLQkJCQlPTUFQNDRYWF9TWVNfU0laRV9TSElGVDsKLQkJLyogb25seSBNU0IgKi8KLQkJc2VjdGlvbl9tYXAgfD0gbWFwcGVkX3NpemUgPj4gMjQgPDwgT01BUDQ0WFhfU0RSQ19BRERSX1NISUZUOwotCQkvKiBvbmx5IE1TQiAqLwotCQlzZWN0aW9uX21hcCB8PSBzeXNfYWRkciA+PiAyNCA8PCBPTUFQNDRYWF9TWVNfQUREUl9TSElGVDsKLQkJc2VjdGlvbl9jbnQtLTsKLQl9Ci0KLQlpZiAoc2VjdGlvbl9jbnQgPT0gMikgewotCQkvKiBPbmx5IDEgc2VjdGlvbiAtIGVpdGhlciBzeW1tZXRyaWMgb3Igc2luZ2xlIEVNSUYgKi8KLQkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzMgPSBzZWN0aW9uX21hcDsKLQkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzIgPSAwOwotCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMSA9IDA7Ci0JfSBlbHNlIHsKLQkJLyogMiBzZWN0aW9ucyAtIDEgc3ltbWV0cmljLCAxIHNpbmdsZSBFTUlGICovCi0JCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8yID0gc2VjdGlvbl9tYXA7Ci0JCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8xID0gMDsKLQl9Ci0KLQkvKiBUUkFQIGZvciBpbnZhbGlkIFRJTEVSIG1hcHBpbmdzIGluIHNlY3Rpb24gMCAqLwotCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8wID0gRE1NX0xJU0FfTUFQXzBfSU5WQUxfQUREUl9UUkFQOwotCi0JbGlzYV9tYXBfcmVncyA9ICZsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZDsKLSNlbmRpZgotCXN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqaHdfbGlzYV9tYXBfcmVncyA9Ci0JICAgIChzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKiliYXNlOwotCi0Jd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMyk7Ci0Jd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMik7Ci0Jd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSk7Ci0Jd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCk7Ci0KLQl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMsCi0JCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMyk7Ci0Jd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yLAotCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzIpOwotCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSwKLQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xKTsKLQl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzAsCi0JCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCk7Ci0KLQlpZiAob21hcF9yZXZpc2lvbigpID49IE9NQVA0NDYwX0VTMV8wKSB7Ci0JCWh3X2xpc2FfbWFwX3JlZ3MgPQotCQkgICAgKHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqKU9NQVA0NFhYX01BX0xJU0FfTUFQX0JBU0U7Ci0KLQkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zLAotCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zKTsKLQkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yLAotCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yKTsKLQkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xLAotCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xKTsKLQkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wLAotCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wKTsKLQl9Ci19Ci0KLS8qCi0gKiBTRFJBTSBpbml0aWFsaXphdGlvbjoKLSAqIFNEUkFNIGluaXRpYWxpemF0aW9uIGhhcyB0d28gcGFydHM6Ci0gKiAxLiBDb25maWd1cmluZyB0aGUgU0RSQU0gZGV2aWNlCi0gKiAyLiBVcGRhdGUgdGhlIEFDIHRpbWluZ3MgcmVsYXRlZCBwYXJhbWV0ZXJzIGluIHRoZSBFTUlGIG1vZHVsZQotICogKDEpIHNob3VsZCBiZSBkb25lIG9ubHkgb25jZSBhbmQgc2hvdWxkIG5vdCBiZSBkb25lIHdoaWxlIHdlIGFyZQotICogcnVubmluZyBmcm9tIFNEUkFNLgotICogKDIpIGNhbiBhbmQgc2hvdWxkIGJlIGRvbmUgbW9yZSB0aGFuIG9uY2UgaWYgT1BQIGNoYW5nZXMuCi0gKiBQYXJ0aWN1bGFybHksIHRoaXMgbWF5IGJlIG5lZWRlZCB3aGVuIHdlIGJvb3Qgd2l0aG91dCBTUEwgYW5kCi0gKiBhbmQgdXNpbmcgQ29uZmlndXJhdGlvbiBIZWFkZXIoQ0gpLiBST00gY29kZSBzdXBwb3J0cyBvbmx5IGF0IDUwJSBPUFAKLSAqIGF0IGJvb3QgKGxvdyBwb3dlciBib290KS4gU28gdS1ib290IGhhcyB0byBzd2l0Y2ggdG8gT1BQMTAwIGFuZCB1cGRhdGUKLSAqIHRoZSBmcmVxdWVuY3kuIFNvLAotICogRG9pbmcgKDEpIGFuZCAoMikgbWFrZXMgc2Vuc2UgLSBmaXJzdCB0aW1lIGluaXRpYWxpemF0aW9uCi0gKiBEb2luZyAoMikgYW5kIG5vdCAoMSkgbWFrZXMgc2Vuc2UgLSBPUFAgY2hhbmdlICh3aGVuIHVzaW5nIENIKQotICogRG9pbmcgKDEpIGFuZCBub3QgKDIpIGRvZW4ndCBtYWtlIHNlbnNlCi0gKiBTZWUgZG9fc2RyYW1faW5pdCgpIGZvciB0aGUgZGV0YWlscwotICovCi12b2lkIHNkcmFtX2luaXQodm9pZCkKLXsKLQl1MzIgaW5fc2RyYW0sIHNpemVfcHJvZywgc2l6ZV9kZXRlY3Q7Ci0KLQlkZWJ1ZygiPj5zZHJhbV9pbml0KClcbiIpOwotCi0JaWYgKG9tYXA0X2h3X2luaXRfY29udGV4dCgpID09IE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX1NQTCkKLQkJcmV0dXJuOwotCi0JaW5fc2RyYW0gPSBydW5uaW5nX2Zyb21fc2RyYW0oKTsKLQlkZWJ1ZygiaW5fc2RyYW0gPSAlZFxuIiwgaW5fc2RyYW0pOwotCi0JaWYgKCFpbl9zZHJhbSkgewotCQlieXBhc3NfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2NvcmUpOwotCX0KLQotCWRvX3NkcmFtX2luaXQoT01BUDQ0WFhfRU1JRjEpOwotCWRvX3NkcmFtX2luaXQoT01BUDQ0WFhfRU1JRjIpOwotCi0JaWYgKCFpbl9zZHJhbSkgewotCQlkbW1faW5pdChPTUFQNDRYWF9ETU1fTElTQV9NQVBfQkFTRSk7Ci0JCWVtaWZfcG9zdF9pbml0X2NvbmZpZyhPTUFQNDRYWF9FTUlGMSk7Ci0JCWVtaWZfcG9zdF9pbml0X2NvbmZpZyhPTUFQNDRYWF9FTUlGMik7Ci0KLQl9Ci0KLQkvKiBmb3IgdGhlIHNoYWRvdyByZWdpc3RlcnMgdG8gdGFrZSBlZmZlY3QgKi8KLQlmcmVxX3VwZGF0ZV9jb3JlKCk7Ci0KLQkvKiBEbyBzb21lIHRlc3RpbmcgYWZ0ZXIgdGhlIGluaXQgKi8KLQlpZiAoIWluX3NkcmFtKSB7Ci0JCXNpemVfcHJvZyA9IG9tYXA0X3NkcmFtX3NpemUoKTsKLQkJc2l6ZV9kZXRlY3QgPSBnZXRfcmFtX3NpemUoKGxvbmcgKilDT05GSUdfU1lTX1NEUkFNX0JBU0UsCi0JCQkJCQlzaXplX3Byb2cpOwotCQkvKiBDb21wYXJlIHdpdGggdGhlIHNpemUgcHJvZ3JhbW1lZCAqLwotCQlpZiAoc2l6ZV9kZXRlY3QgIT0gc2l6ZV9wcm9nKSB7Ci0JCQlwcmludGYoIlNEUkFNOiBpZGVudGlmaWVkIHNpemUgbm90IHNhbWUgYXMgZXhwZWN0ZWQiCi0JCQkJIiBzaXplIGlkZW50aWZpZWQ6ICV4IGV4cGVjdGVkOiAleFxuIiwKLQkJCQlzaXplX2RldGVjdCwKLQkJCQlzaXplX3Byb2cpOwotCQl9IGVsc2UKLQkJCWRlYnVnKCJnZXRfcmFtX3NpemUoKSBzdWNjZXNzZnVsIik7Ci0JfQotCi0JZGVidWcoIjw8c2RyYW1faW5pdCgpXG4iKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9od2luaXQuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9od2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM5YjE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2h3aW5pdC5jCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICoKKyAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIE9NQVA0IGJhc2VkIGJvYXJkcworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEF1dGhvciA6CisgKglBbmVlc2ggVgk8YW5lZXNoQHRpLmNvbT4KKyAqCVN0ZXZlIFNha29tYW4JPHN0ZXZlQHNha29tYW4uY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJtdjcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vZW1pZi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK3UzMiAqY29uc3Qgb21hcDRfcmV2aXNpb24gPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX09NQVA0X1JFVjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzQ0eHhbNl0gPSB7CisJeyAodm9pZCAqKU9NQVA0NFhYX0dQSU8xX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzJfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPM19CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA0NFhYX0dQSU80X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzVfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPNl9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCit9OworCitjb25zdCBzdHJ1Y3QgZ3Bpb19iYW5rICpjb25zdCBvbWFwX2dwaW9fYmFuayA9IGdwaW9fYmFua180NHh4OworCisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorLyoKKyAqIFNvbWUgdHVuaW5nIG9mIElPcyBmb3Igb3B0aW1hbCBwb3dlciBhbmQgcGVyZm9ybWFuY2UKKyAqLwordm9pZCBkb19pb19zZXR0aW5ncyh2b2lkKQoreworCXUzMiBscGRkcjJpbzsKKwlzdHJ1Y3QgY29udHJvbF9scGRkcjJpb19yZWdzICpscGRkcjJpb19yZWdzID0KKwkJKHN0cnVjdCBjb250cm9sX2xwZGRyMmlvX3JlZ3MgKilMUEREUjJfSU9fUkVHU19CQVNFOworCXN0cnVjdCBvbWFwNF9zeXNfY3RybF9yZWdzICpjb25zdCBjdHJsID0KKwkJKHN0cnVjdCBvbWFwNF9zeXNfY3RybF9yZWdzICopU1lTQ1RSTF9HRU5FUkFMX0NPUkVfQkFTRTsKKworCXUzMiBvbWFwNF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7CisKKwlpZiAob21hcDRfcmV2ID09IE9NQVA0NDMwX0VTMV8wKQorCQlscGRkcjJpbyA9IENPTlRST0xfTFBERFIySU9fU0xFV18xMjVQU19EUlY4X1BVTExfRE9XTjsKKwllbHNlIGlmIChvbWFwNF9yZXYgPT0gT01BUDQ0MzBfRVMyXzApCisJCWxwZGRyMmlvID0gQ09OVFJPTF9MUEREUjJJT19TTEVXXzMyNVBTX0RSVjhfR0FURV9LRUVQRVI7CisJZWxzZQorCQlscGRkcjJpbyA9IENPTlRST0xfTFBERFIySU9fU0xFV18zMTVQU19EUlYxMl9QVUxMX0RPV047CisKKwkvKiBFTUlGMSAqLworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzApOworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzEpOworCS8qIE5vIHB1bGwgZm9yIEdSMTAgYXMgcGVyIGh3IHRlYW0ncyByZWNvbW1lbmRhdGlvbiAqLworCXdyaXRlbChscGRkcjJpbyAmIH5MUEREUjJJT19HUjEwX1dEX01BU0ssCisJCSZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMV8yKTsKKwl3cml0ZWwoQ09OVFJPTF9MUEREUjJJT18zX1ZBTCwgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzMpOworCisJLyogRU1JRjIgKi8KKwl3cml0ZWwobHBkZHIyaW8sICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMl8wKTsKKwl3cml0ZWwobHBkZHIyaW8sICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMl8xKTsKKwkvKiBObyBwdWxsIGZvciBHUjEwIGFzIHBlciBodyB0ZWFtJ3MgcmVjb21tZW5kYXRpb24gKi8KKwl3cml0ZWwobHBkZHIyaW8gJiB+TFBERFIySU9fR1IxMF9XRF9NQVNLLAorCQkmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzJfMik7CisJd3JpdGVsKENPTlRST0xfTFBERFIySU9fM19WQUwsICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMl8zKTsKKworCS8qCisJICogU29tZSBvZiB0aGVzZSBzZXR0aW5ncyAoVFJJTSB2YWx1ZXMpIGNvbWUgZnJvbSBlRnVzZSBhbmQgYXJlCisJICogaW4gdHVybiBwcm9ncmFtbWVkIGluIHRoZSBlRnVzZSBhdCBtYW51ZmFjdHVyaW5nIHRpbWUgYWZ0ZXIKKwkgKiBjYWxpYnJhdGlvbiBvZiB0aGUgZGV2aWNlLiBEbyB0aGUgc29mdHdhcmUgb3Zlci1yaWRlIG9ubHkgaWYKKwkgKiB0aGUgZGV2aWNlIGlzIG5vdCBjb3JyZWN0bHkgdHJpbW1lZAorCSAqLworCWlmICghKHJlYWRsKCZjdHJsLT5jb250cm9sX3N0ZF9mdXNlX29wcF9iZ2FwKSAmIDB4RkZGRikpIHsKKworCQl3cml0ZWwoTERPU1JBTV9WT0xUX0NUUkxfT1ZFUlJJREUsCisJCQkmY3RybC0+Y29udHJvbF9sZG9zcmFtX2l2YV92b2x0YWdlX2N0cmwpOworCisJCXdyaXRlbChMRE9TUkFNX1ZPTFRfQ1RSTF9PVkVSUklERSwKKwkJCSZjdHJsLT5jb250cm9sX2xkb3NyYW1fbXB1X3ZvbHRhZ2VfY3RybCk7CisKKwkJd3JpdGVsKExET1NSQU1fVk9MVF9DVFJMX09WRVJSSURFLAorCQkJJmN0cmwtPmNvbnRyb2xfbGRvc3JhbV9jb3JlX3ZvbHRhZ2VfY3RybCk7CisJfQorCisJaWYgKCFyZWFkbCgmY3RybC0+Y29udHJvbF9lZnVzZV8xKSkKKwkJd3JpdGVsKENPTlRST0xfRUZVU0VfMV9PVkVSUklERSwgJmN0cmwtPmNvbnRyb2xfZWZ1c2VfMSk7CisKKwlpZiAoIXJlYWRsKCZjdHJsLT5jb250cm9sX2VmdXNlXzIpKQorCQl3cml0ZWwoQ09OVFJPTF9FRlVTRV8yX09WRVJSSURFLCAmY3RybC0+Y29udHJvbF9lZnVzZV8yKTsKK30KKyNlbmRpZgorCit2b2lkIGluaXRfb21hcF9yZXZpc2lvbih2b2lkKQoreworCS8qCisJICogRm9yIHNvbWUgb2YgdGhlIEVTMi9FUzEgYm9hcmRzIElEX0NPREUgaXMgbm90IHJlbGlhYmxlOgorCSAqIEFsc28sIEVTMSBhbmQgRVMyIGhhdmUgZGlmZmVyZW50IEFSTSByZXZpc2lvbnMKKwkgKiBTbyB1c2UgQVJNIHJldmlzaW9uIGZvciBpZGVudGlmaWNhdGlvbgorCSAqLworCXVuc2lnbmVkIGludCBhcm1fcmV2ID0gY29ydGV4X3JldigpOworCisJc3dpdGNoIChhcm1fcmV2KSB7CisJY2FzZSBNSURSX0NPUlRFWF9BOV9SMFAxOgorCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzFfMDsKKwkJYnJlYWs7CisJY2FzZSBNSURSX0NPUlRFWF9BOV9SMVAyOgorCQlzd2l0Y2ggKHJlYWRsKENPTlRST0xfSURfQ09ERSkpIHsKKwkJY2FzZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMyXzA6CisJCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMDsKKwkJCWJyZWFrOworCQljYXNlIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzJfMToKKwkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX0VTMl8xOworCQkJYnJlYWs7CisJCWNhc2UgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMl8yOgorCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX0VTMl8wOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNSURSX0NPUlRFWF9BOV9SMVAzOgorCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMzsKKwkJYnJlYWs7CisJY2FzZSBNSURSX0NPUlRFWF9BOV9SMlAxMDoKKwkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0NjBfRVMxXzA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX1NJTElDT05fSURfSU5WQUxJRDsKKwkJYnJlYWs7CisJfQorfQorCisjaWZuZGVmIENPTkZJR19TWVNfTDJDQUNIRV9PRkYKK3ZvaWQgdjdfb3V0ZXJfY2FjaGVfZW5hYmxlKHZvaWQpCit7CisJc2V0X3BsMzEwX2N0cmxfcmVnKDEpOworfQorCit2b2lkIHY3X291dGVyX2NhY2hlX2Rpc2FibGUodm9pZCkKK3sKKwlzZXRfcGwzMTBfY3RybF9yZWcoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9vbWFwNF9tdXhfZGF0YS5oIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L29tYXA0X211eF9kYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDAzOTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L29tYXA0X211eF9kYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0gLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAxMAotICogVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkLCA8d3d3LnRpLmNvbT4KLSAqCi0gKglCYWxhamkgS3Jpc2huYW1vb3J0aHkJPGJhbGFqaXRrQHRpLmNvbT4KLSAqCUFuZWVzaCBWCQk8YW5lZXNoQHRpLmNvbT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0jaWZuZGVmIF9PTUFQNF9NVVhfREFUQV9IXwotI2RlZmluZSBfT01BUDRfTVVYX0RBVEFfSF8KLQotI2luY2x1ZGUgPGFzbS9hcmNoL211eF9vbWFwNC5oPgotCi1jb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbFtdID0gewotCi17R1BNQ19BRDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MCAqLwote0dQTUNfQUQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDEgKi8KLXtHUE1DX0FEMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQyICovCi17R1BNQ19BRDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MyAqLwote0dQTUNfQUQ0LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDQgKi8KLXtHUE1DX0FENSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ1ICovCi17R1BNQ19BRDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NiAqLwote0dQTUNfQUQ3LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDcgKi8KLXtHUE1DX05PRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTEpfSwJIC8qIHNkbW1jMl9jbGsgKi8KLXtHUE1DX05XRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9jbWQgKi8KLXtTRE1NQzFfQ0xLLCAoUFRVIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkgLyogc2RtbWMxX2NsayAqLwote1NETU1DMV9DTUQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfY21kICovCi17U0RNTUMxX0RBVDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MCAqLwote1NETU1DMV9EQVQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDEgKi8KLXtTRE1NQzFfREFUMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQyICovCi17U0RNTUMxX0RBVDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MyAqLwote1NETU1DMV9EQVQ0LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDQgKi8KLXtTRE1NQzFfREFUNSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ1ICovCi17U0RNTUMxX0RBVDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NiAqLwote1NETU1DMV9EQVQ3LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDcgKi8KLXtJMkMxX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzFfc2NsICovCi17STJDMV9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMxX3NkYSAqLwote0kyQzJfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMl9zY2wgKi8KLXtJMkMyX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzJfc2RhICovCi17STJDM19TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMzX3NjbCAqLwote0kyQzNfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjM19zZGEgKi8KLXtJMkM0X1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzRfc2NsICovCi17STJDNF9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmM0X3NkYSAqLwote1VBUlQzX0NUU19SQ1RYLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkvKiB1YXJ0M190eCAqLwote1VBUlQzX1JUU19TRCwgKE0wKX0sCQkJCQkvKiB1YXJ0M19ydHNfc2QgKi8KLXtVQVJUM19SWF9JUlJYLCAoSUVOIHwgTTApfSwJCQkJLyogdWFydDNfcnggKi8KLXtVQVJUM19UWF9JUlRYLCAoTTApfQkJCQkJLyogdWFydDNfdHggKi8KLQotfTsKLQotY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxbXSA9IHsKLQote1BBRDFfU1JfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwgLyogc3Jfc2NsICovCi17UEFEMF9TUl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LCAvKiBzcl9zZGEgKi8KLXtQQUQxX1NZU18zMkssIChJRU4gfCBNMCl9CSAvKiBzeXNfMzJrICovCi0KLX07Ci0KLWNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsXzQ0NjBbXSA9IHsKLQote1BBRDFfRlJFRl9DTEs0X1JFUSwgKE0zKX0sCSAvKiBncGlvX3drNywgVFBTICovCi0KLX07Ci0KLQotI2VuZGlmICAvKiBfT01BUDRfTVVYX0RBVEFfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zZHJhbV9lbHBpZGEuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zZHJhbV9lbHBpZGEuYwppbmRleCBlZGM1MzI2Li5hNWVjN2QzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvc2RyYW1fZWxwaWRhLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L3NkcmFtX2VscGlkYS5jCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxhc20vYXJjaC9lbWlmLmg+CisjaW5jbHVkZSA8YXNtL2VtaWYuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zeXNfaW5mby5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L3N5c19pbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZTU3NjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L3N5c19pbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDEwCi0gKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+Ci0gKgotICogQXV0aG9yIDoKLSAqCUFuZWVzaCBWCTxhbmVlc2hAdGkuY29tPgotICoJU3RldmUgU2Frb21hbgk8c3RldmVAc2Frb21hbi5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+Ci0KLS8qCi0gKiAgZ2V0X2RldmljZV90eXBlKCk6IHRlbGwgaWYgR1AvSFMvRU1VL1RTVAotICovCi11MzIgZ2V0X2RldmljZV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBnZXRfYm9hcmRfcmV2KCkgLSBnZXQgYm9hcmQgcmV2aXNpb24KLSAqLwotdTMyIGdldF9ib2FyZF9yZXYodm9pZCkKLXsKLQlyZXR1cm4gMHgyMDsKLX0KLQotLyoKLSAqIFByaW50IENQVSBpbmZvcm1hdGlvbgotICovCi1pbnQgcHJpbnRfY3B1aW5mbyh2b2lkKQotewotCi0JcHV0cygiQ1BVICA6IE9NQVA0NDMwXG4iKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggODElCmNvcHkgZnJvbSBib2FyZC9jc2IyMjYvTWFrZWZpbGUKY29weSB0byBhcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvTWFrZWZpbGUKaW5kZXggNmZlOWJlYy4uZjhjYTlhYyAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMTAKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE0ICsyMywxOSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gJChvYmopbGliJChCT0FSRCkubworTElCCT0gICQob2JqKWxpYiQoU09DKS5vCiAKLUNPQkpTCTo9IGNzYjIyNi5vIGZsYXNoLm8KK0NPQkpTCSs9IGh3aW5pdC5vCitDT0JKUwkrPSBjbG9ja3MubworQ09CSlMJKz0gZW1pZi5vCitDT0JKUwkrPSBzZHJhbV9lbHBpZGEubwogCi1TUkNTCTo9ICQoQ09CSlM6Lm89LmMpCi1PQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpICQoU09CSlMpKQogCi0kKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorYWxsOgkgJChvYmopLmRlcGVuZCAkKExJQikKKworJChMSUIpOgkkKE9CSlMpCiAJJChjYWxsIGNtZF9saW5rX29fdGFyZ2V0LCAkKE9CSlMpKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvY2xvY2tzLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvY2xvY2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4ODJhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9jbG9ja3MuYwpAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqCisgKiBDbG9jayBpbml0aWFsaXphdGlvbiBmb3IgT01BUDUKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KKyAqIFNyaWNoYXJhbiBSIDxyLnNyaWNoYXJhbkB0aS5jb20+CisgKgorICogQmFzZWQgb24gcHJldmlvdXMgd29yayBieToKKyAqCVNhbnRvc2ggU2hpbGlta2FyIDxzYW50b3NoLnNoaWxpbWthckB0aS5jb20+CisgKglSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfZ3Bpby5oPgorCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKKy8qCisgKiBwcmludGluZyB0byBjb25zb2xlIGRvZXNuJ3Qgd29yayB1bmxlc3MKKyAqIHRoaXMgY29kZSBpcyBleGVjdXRlZCBmcm9tIFNQTAorICovCisjZGVmaW5lIHByaW50ZihmbXQsIGFyZ3MuLi4pCisjZGVmaW5lIHB1dHMocykKKyNlbmRpZgorCitzdHJ1Y3Qgb21hcDVfcHJjbV9yZWdzICpjb25zdCBwcmNtID0gKHN0cnVjdCBvbWFwNV9wcmNtX3JlZ3MgKikweDRBMDA0MTAwOworCitjb25zdCB1MzIgc3lzX2Nsa19hcnJheVs4XSA9IHsKKwkxMjAwMDAwMCwJICAgICAgIC8qIDEyIE1IeiAqLworCTAsCQkgICAgICAgLyogTkEgKi8KKwkxNjgwMDAwMCwJICAgICAgIC8qIDE2LjggTUh6ICovCisJMTkyMDAwMDAsCSAgICAgICAvKiAxOS4yIE1IeiAqLworCTI2MDAwMDAwLAkgICAgICAgLyogMjYgTUh6ICovCisJMCwJCSAgICAgICAvKiBOQSAqLworCTM4NDAwMDAwLAkgICAgICAgLyogMzguNCBNSHogKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgbXB1X2RwbGxfcGFyYW1zXzFfNWdoeltOVU1fU1lTX0NMS1NdID0geworCXsxMjUsIDAsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTIgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXs2MjUsIDYsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7NjI1LCA3LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezc1MCwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXs2MjUsIDE1LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0JLyogMzguNCBNSHogKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgbXB1X2RwbGxfcGFyYW1zXzJnaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7NTAwLCAyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEyIE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7MjAyNCwgMTYsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7NjI1LCA1LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezEwMDAsIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI2IE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7NjI1LCAxMSwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9CS8qIDM4LjQgTUh6ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIG1wdV9kcGxsX3BhcmFtc18xMTAwbWh6W05VTV9TWVNfQ0xLU10gPSB7CisJezI3NSwgMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezEzNzUsIDIwLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezEzNzUsIDIzLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezU1MCwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXsxMzc1LCA0NywgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9CS8qIDM4LjQgTUh6ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIG1wdV9kcGxsX3BhcmFtc181NTBtaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7Mjc1LCAyLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEyIE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7MTM3NSwgMjAsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7MTM3NSwgMjMsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTkuMiBNSHogKi8KKwl7NTUwLCAxMiwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezEzNzUsIDQ3LCAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0JLyogMzguNCBNSHogKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMKKwkJCWNvcmVfZHBsbF9wYXJhbXNfMjEyOG1oel9kZHI1MzJbTlVNX1NZU19DTEtTXSA9IHsKKwl7MjY2LCAyLCAxLCA1LCA4LCA0LCA2MiwgNSwgNSwgN30sCQkvKiAxMiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezU3MCwgOCwgMSwgNSwgOCwgNCwgNjIsIDUsIDUsIDd9LAkJLyogMTYuOCBNSHogKi8KKwl7NjY1LCAxMSwgMSwgNSwgOCwgNCwgNjIsIDUsIDUsIDd9LAkJLyogMTkuMiBNSHogKi8KKwl7NTMyLCAxMiwgMSwgNSwgOCwgNCwgNjIsIDUsIDUsIDd9LAkJLyogMjYgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXs2NjUsIDIzLCAxLCA1LCA4LCA0LCA2MiwgNSwgNSwgN30JCS8qIDM4LjQgTUh6ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zCisJCQljb3JlX2RwbGxfcGFyYW1zXzIxMjhtaHpfZGRyMjY2W05VTV9TWVNfQ0xLU10gPSB7CisJezI2NiwgMiwgMiwgNSwgOCwgNCwgNjIsIDUsIDUsIDd9LAkJLyogMTIgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXs1NzAsIDgsIDIsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fSwJCS8qIDE2LjggTUh6ICovCisJezY2NSwgMTEsIDIsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fSwJCS8qIDE5LjIgTUh6ICovCisJezUzMiwgMTIsIDIsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fSwJCS8qIDI2IE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7NjY1LCAyMywgMiwgNSwgOCwgNCwgNjIsIDUsIDUsIDd9CQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBwZXJfZHBsbF9wYXJhbXNfNzY4bWh6W05VTV9TWVNfQ0xLU10gPSB7CisJezMyLCAwLCA0LCAzLCA2LCA0LCAtMSwgMiwgLTEsIC0xfSwJCS8qIDEyIE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7MTYwLCA2LCA0LCAzLCA2LCA0LCAtMSwgMiwgLTEsIC0xfSwJCS8qIDE2LjggTUh6ICovCisJezIwLCAwLCA0LCAzLCA2LCA0LCAtMSwgMiwgLTEsIC0xfSwJCS8qIDE5LjIgTUh6ICovCisJezE5MiwgMTIsIDQsIDMsIDYsIDQsIC0xLCAyLCAtMSwgLTF9LAkJLyogMjYgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXsxMCwgMCwgNCwgMywgNiwgNCwgLTEsIDIsIC0xLCAtMX0JCS8qIDM4LjQgTUh6ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIGl2YV9kcGxsX3BhcmFtc18yMzMwbWh6W05VTV9TWVNfQ0xLU10gPSB7CisJezkzMSwgMTEsIC0xLCAtMSwgNCwgNywgLTEsIC0xfSwJLyogMTIgTUh6ICAgKi8KKwl7OTMxLCAxMiwgLTEsIC0xLCA0LCA3LCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXs2NjUsIDExLCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezcyNywgMTQsIC0xLCAtMSwgNCwgNywgLTEsIC0xfSwJLyogMTkuMiBNSHogKi8KKwl7OTMxLCAyNSwgLTEsIC0xLCA0LCA3LCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLworCXs5MzEsIDI2LCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezQxMiwgMTYsIC0xLCAtMSwgNCwgNywgLTEsIC0xfQkJLyogMzguNCBNSHogKi8KK307CisKKy8qIEFCRSBNICYgTiB2YWx1ZXMgd2l0aCBzeXNfY2xrIGFzIHNvdXJjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcworCQlhYmVfZHBsbF9wYXJhbXNfc3lzY2xrXzE5NjYwOGtoeltOVU1fU1lTX0NMS1NdID0geworCXs0OSwgNSwgMSwgMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMiBNSHogICAqLworCXs2OCwgOCwgMSwgMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXszNSwgNSwgMSwgMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxNi44IE1IeiAqLworCXs0NiwgOCwgMSwgMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxOS4yIE1IeiAqLworCXszNCwgOCwgMSwgMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLworCXsyOSwgNywgMSwgMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXs2NCwgMjQsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfQkvKiAzOC40IE1IeiAqLworfTsKKworLyogQUJFIE0gJiBOIHZhbHVlcyB3aXRoIDMySyBjbG9jayBhcyBzb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgYWJlX2RwbGxfcGFyYW1zXzMya18xOTY2MDhraHogPSB7CisJNzUwLCAwLCAxLCAxLCAtMSwgLTEsIC0xLCAtMQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyB1c2JfZHBsbF9wYXJhbXNfMTkyMG1oeltOVU1fU1lTX0NMS1NdID0geworCXs4MCwgMCwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJCS8qIDEyIE1IeiAgICovCisJezk2MCwgMTIsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezQwMCwgNiwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7NTAsIDAsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCQkvKiAxOS4yIE1IeiAqLworCXs0ODAsIDEyLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLworCXszMjAsIDgsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezI1LCAwLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9CQkvKiAzOC40IE1IeiAqLworfTsKKwordm9pZCBzZXR1cF9wb3N0X2RpdmlkZXJzKHUzMiAqY29uc3QgYmFzZSwgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOworCisJLyogU2V0dXAgcG9zdC1kaXZpZGVycyAqLworCWlmIChwYXJhbXMtPm0yID49IDApCisJCXdyaXRlbChwYXJhbXMtPm0yLCAmZHBsbF9yZWdzLT5jbV9kaXZfbTJfZHBsbCk7CisJaWYgKHBhcmFtcy0+bTMgPj0gMCkKKwkJd3JpdGVsKHBhcmFtcy0+bTMsICZkcGxsX3JlZ3MtPmNtX2Rpdl9tM19kcGxsKTsKKwlpZiAocGFyYW1zLT5oMTEgPj0gMCkKKwkJd3JpdGVsKHBhcmFtcy0+aDExLCAmZHBsbF9yZWdzLT5jbV9kaXZfaDExX2RwbGwpOworCWlmIChwYXJhbXMtPmgxMiA+PSAwKQorCQl3cml0ZWwocGFyYW1zLT5oMTIsICZkcGxsX3JlZ3MtPmNtX2Rpdl9oMTJfZHBsbCk7CisJaWYgKHBhcmFtcy0+aDEzID49IDApCisJCXdyaXRlbChwYXJhbXMtPmgxMywgJmRwbGxfcmVncy0+Y21fZGl2X2gxM19kcGxsKTsKKwlpZiAocGFyYW1zLT5oMTQgPj0gMCkKKwkJd3JpdGVsKHBhcmFtcy0+aDE0LCAmZHBsbF9yZWdzLT5jbV9kaXZfaDE0X2RwbGwpOworCWlmIChwYXJhbXMtPmgyMiA+PSAwKQorCQl3cml0ZWwocGFyYW1zLT5oMjIsICZkcGxsX3JlZ3MtPmNtX2Rpdl9oMjJfZHBsbCk7CisJaWYgKHBhcmFtcy0+aDIzID49IDApCisJCXdyaXRlbChwYXJhbXMtPmgyMywgJmRwbGxfcmVncy0+Y21fZGl2X2gyM19kcGxsKTsKK30KKworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfbXB1X2RwbGxfcGFyYW1zKHZvaWQpCit7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmbXB1X2RwbGxfcGFyYW1zXzExMDBtaHpbc3lzY2xrX2luZF07Cit9CisKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X2NvcmVfZHBsbF9wYXJhbXModm9pZCkKK3sKKwl1MzIgc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisKKwkvKiBDb25maWd1cmluZyB0aGUgRERSIHRvIGJlIGF0IDUzMm1oeiAqLworCXJldHVybiAmY29yZV9kcGxsX3BhcmFtc18yMTI4bWh6X2RkcjI2NltzeXNjbGtfaW5kXTsKKworfQorCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9wZXJfZHBsbF9wYXJhbXModm9pZCkKK3sKKwl1MzIgc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisJcmV0dXJuICZwZXJfZHBsbF9wYXJhbXNfNzY4bWh6W3N5c2Nsa19pbmRdOworfQorCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9pdmFfZHBsbF9wYXJhbXModm9pZCkKK3sKKwl1MzIgc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisJcmV0dXJuICZpdmFfZHBsbF9wYXJhbXNfMjMzMG1oeltzeXNjbGtfaW5kXTsKK30KKworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfdXNiX2RwbGxfcGFyYW1zKHZvaWQpCit7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmdXNiX2RwbGxfcGFyYW1zXzE5MjBtaHpbc3lzY2xrX2luZF07Cit9CisKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X2FiZV9kcGxsX3BhcmFtcyh2b2lkKQoreworI2lmZGVmIENPTkZJR19TWVNfT01BUF9BQkVfU1lTQ0sKKwl1MzIgc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisJcmV0dXJuICZhYmVfZHBsbF9wYXJhbXNfc3lzY2xrXzE5NjYwOGtoeltzeXNjbGtfaW5kXTsKKyNlbHNlCisJcmV0dXJuICZhYmVfZHBsbF9wYXJhbXNfMzJrXzE5NjYwOGtoejsKKyNlbmRpZgorfQorCisvKgorICogU2V0dXAgdGhlIHZvbHRhZ2VzIGZvciB2ZGRfbXB1LCB2ZGRfY29yZSwgYW5kIHZkZF9pdmEKKyAqIFdlIHNldCB0aGUgbWF4aW11bSB2b2x0YWdlcyBhbGxvd2VkIGhlcmUgYmVjYXVzZSBTbWFydC1SZWZsZXggaXMgbm90CisgKiBlbmFibGVkIGluIGJvb3Rsb2FkZXIuIFZvbHRhZ2UgaW5pdGlhbGl6YXRpb24gaW4gdGhlIGtlcm5lbCB3aWxsIHNldAorICogdGhlc2UgdG8gdGhlIG5vbWluYWwgdmFsdWVzIGFmdGVyIGVuYWJsaW5nIFNtYXJ0LVJlZmxleAorICovCit2b2lkIHNjYWxlX3Zjb3Jlcyh2b2lkKQoreworCXUzMiB2b2x0OworCisJc2V0dXBfc3JpMmMoKTsKKworCS8qIEVuYWJsZSAxLjIyViBmcm9tIFRQUyBmb3IgdmRkX21wdSAqLworCXZvbHQgPSAxMjIwOworCWRvX3NjYWxlX3RwczYyMzYxKFRQUzYyMzYxX1JFR19BRERSX1NFVDEsIHZvbHQpOworCisJLyogVkNPUkUgMSAtIGZvciB2ZGRfY29yZSAqLworCXZvbHQgPSAxMDAwOworCWRvX3NjYWxlX3Zjb3JlKFNNUFNfUkVHX0FERFJfVkNPUkUxLCB2b2x0KTsKKworCS8qIFZDT1JFIDIgLSBmb3IgdmRkX01NICovCisJdm9sdCA9IDExMjU7CisJZG9fc2NhbGVfdmNvcmUoU01QU19SRUdfQUREUl9WQ09SRTIsIHZvbHQpOworfQorCisvKgorICogRW5hYmxlIGVzc2VudGlhbCBjbG9jayBkb21haW5zLCBtb2R1bGVzIGFuZAorICogZG8gc29tZSBhZGRpdGlvbmFsIHNwZWNpYWwgc2V0dGluZ3MgbmVlZGVkCisgKi8KK3ZvaWQgZW5hYmxlX2Jhc2ljX2Nsb2Nrcyh2b2lkKQoreworCXUzMiAqY29uc3QgY2xrX2RvbWFpbnNfZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9sNHBlcl9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fbWVtaWZfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fbDRjZmdfY2xrc3RjdHJsLAorCQkwCisJfTsKKworCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtX21lbWlmX2VtaWZfMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbWVtaWZfZW1pZl8yX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNGNmZ19sNF9jZmdfY2xrY3RybCwKKwkJJnByY20tPmNtX3drdXBfZ3BpbzFfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwaW8yX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncGlvM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzRfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwaW81X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncGlvNl9jbGtjdHJsLAorCQkwCisJfTsKKworCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV93a3VwX2dwdGltZXIxX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfaHNtbWMxX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfaHNtbWMyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fd2t1cF93ZHRpbWVyMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfdWFydDNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzFfY2xrY3RybCwKKwkJMAorCX07CisKKwkvKiBFbmFibGUgb3B0aW9uYWwgYWRkaXRpb25hbCBmdW5jdGlvbmFsIGNsb2NrIGZvciBHUElPNCAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfZ3BpbzRfY2xrY3RybCwKKwkJCUdQSU80X0NMS0NUUkxfT1BURkNMS0VOX01BU0spOworCisJLyogRW5hYmxlIDk2IE1IeiBjbG9jayBmb3IgTU1DMSAmIE1NQzIgKi8KKwlzZXRiaXRzX2xlMzIoJnByY20tPmNtX2wzaW5pdF9oc21tYzFfY2xrY3RybCwKKwkJCUhTTU1DX0NMS0NUUkxfQ0xLU0VMX01BU0spOworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDNpbml0X2hzbW1jMl9jbGtjdHJsLAorCQkJSFNNTUNfQ0xLQ1RSTF9DTEtTRUxfTUFTSyk7CisKKwkvKiBTZWxlY3QgMzJLSHogY2xvY2sgYXMgdGhlIHNvdXJjZSBvZiBHUFRJTUVSMSAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fd2t1cF9ncHRpbWVyMV9jbGtjdHJsLAorCQkJR1BUSU1FUjFfQ0xLQ1RSTF9DTEtTRUxfTUFTSyk7CisKKwlkb19lbmFibGVfY2xvY2tzKGNsa19kb21haW5zX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19od19hdXRvX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9lc3NlbnRpYWwsCisJCQkgMSk7Cit9CisKK3ZvaWQgZW5hYmxlX2Jhc2ljX3Vib290X2Nsb2Nrcyh2b2lkKQoreworCXUzMiAqY29uc3QgY2xrX2RvbWFpbnNfZXNzZW50aWFsW10gPSB7CisJCTAKKwl9OworCisJdTMyICpjb25zdCBjbGtfbW9kdWxlc19od19hdXRvX2Vzc2VudGlhbFtdID0geworCQkwCisJfTsKKworCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9sNHBlcl9tY3NwaTFfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzRfY2xrY3RybCwKKwkJMAorCX07CisKKwlkb19lbmFibGVfY2xvY2tzKGNsa19kb21haW5zX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19od19hdXRvX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9lc3NlbnRpYWwsCisJCQkgMSk7Cit9CisKKy8qCisgKiBFbmFibGUgbm9uLWVzc2VudGlhbCBjbG9jayBkb21haW5zLCBtb2R1bGVzIGFuZAorICogZG8gc29tZSBhZGRpdGlvbmFsIHNwZWNpYWwgc2V0dGluZ3MgbmVlZGVkCisgKi8KK3ZvaWQgZW5hYmxlX25vbl9lc3NlbnRpYWxfY2xvY2tzKHZvaWQpCit7CisJdTMyICpjb25zdCBjbGtfZG9tYWluc19ub25fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9tcHVfbTNfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21faXZhaGRfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fZHNwX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2Rzc19jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9zZ3hfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9jMmNfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fY2FtX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2Rzc19jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9zZG1hX2Nsa3N0Y3RybCwKKwkJMAorCX07CisKKwl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2h3X2F1dG9fbm9uX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y21fbXB1X20zX21wdV9tM19jbGtjdHJsLAorCQkmcHJjbS0+Y21faXZhaGRfaXZhaGRfY2xrY3RybCwKKwkJJnByY20tPmNtX2l2YWhkX3NsMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fZHNwX2RzcF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNfMl9ncG1jX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luc3RyX2wzXzNfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5zdHJfbDNfaW5zdHJfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5zdHJfaW50cmNvbm5fd3AxX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfaHNpX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfaHN1c2J0bGxfY2xrY3RybCwKKwkJMAorCX07CisKKwl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX25vbl9lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtMV9hYmVfYWVzc19jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9wZG1fY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfZG1pY19jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9tY2FzcF9jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9tY2JzcDFfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfbWNic3AyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX21jYnNwM19jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9zbGltYnVzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX3RpbWVyNV9jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV90aW1lcjZfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfdGltZXI3X2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX3RpbWVyOF9jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV93ZHQzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyOV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3B0aW1lcjEwX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyMTFfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwdGltZXIzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyNF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaGRxMXdfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX21jc3BpMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfbWNzcGkzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9tY3NwaTRfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX21tY3NkM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfbW1jc2Q0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9tbWNzZDVfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX3VhcnQxX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl91YXJ0Ml9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfdWFydDRfY2xrY3RybCwKKwkJJnByY20tPmNtX3drdXBfa2V5Ym9hcmRfY2xrY3RybCwKKwkJJnByY20tPmNtX3drdXBfd2R0aW1lcjJfY2xrY3RybCwKKwkJJnByY20tPmNtX2NhbV9pc3NfY2xrY3RybCwKKwkJJnByY20tPmNtX2NhbV9mZGlmX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9kc3NfZHNzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9zZ3hfc2d4X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfaHN1c2Job3N0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfZnN1c2JfY2xrY3RybCwKKwkJMAorCX07CisKKwkvKiBFbmFibGUgb3B0aW9uYWwgZnVuY3Rpb25hbCBjbG9jayBmb3IgSVNTICovCisJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jYW1faXNzX2Nsa2N0cmwsIElTU19DTEtDVFJMX09QVEZDTEtFTl9NQVNLKTsKKworCS8qIEVuYWJsZSBhbGwgb3B0aW9uYWwgZnVuY3Rpb25hbCBjbG9ja3Mgb2YgRFNTICovCisJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9kc3NfZHNzX2Nsa2N0cmwsIERTU19DTEtDVFJMX09QVEZDTEtFTl9NQVNLKTsKKworCWRvX2VuYWJsZV9jbG9ja3MoY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19od19hdXRvX25vbl9lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fbm9uX2Vzc2VudGlhbCwKKwkJCSAwKTsKKworCS8qIFB1dCBjYW1lcmEgbW9kdWxlIGluIG5vIHNsZWVwIG1vZGUgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2NhbV9jbGtzdGN0cmwsIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKKwkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX05PX1NMRUVQIDw8CisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9jb25maWcubWsgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWY2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvY29uZmlnLm1rCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgQ29weXJpZ2h0IDIwMTEgTGluYXJvIExpbWl0ZWQKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgQW5lZXNoIFYgPGFubmVzaEB0aS5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2lmZGVmIENPTkZJR19TUExfQlVJTEQKK0FMTC15CSs9ICQoT0JKVFJFRSkvTUxPCitlbHNlCitBTEwteQkrPSAkKG9iail1LWJvb3QuaW1nCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2VtaWYuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9lbWlmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxOWZmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9lbWlmLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBFTUlGIHByb2dyYW1taW5nCisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+IGZvciBPTUFQNAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9lbWlmLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CisKKyNpZm5kZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKKyNkZWZpbmUgcHJpbnRfdGltaW5nX3JlZyhyZWcpIGRlYnVnKCNyZWciIC0gMHglMDh4XG4iLCAocmVnKSkKK3N0YXRpYyB1MzIgKmNvbnN0IFRfbnVtID0gKHUzMiAqKU9NQVA1X1NSQU1fU0NSQVRDSF9FTUlGX1RfTlVNOworc3RhdGljIHUzMiAqY29uc3QgVF9kZW4gPSAodTMyICopT01BUDVfU1JBTV9TQ1JBVENIX0VNSUZfVF9ERU47CitzdGF0aWMgdTMyICpjb25zdCBlbWlmX3NpemVzID0gKHUzMiAqKU9NQVA1X1NSQU1fU0NSQVRDSF9FTUlGX1NJWkU7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUworLyogQmFzZSBBQyBUaW1pbmcgdmFsdWVzIHNwZWNpZmllZCBieSBKRVNEMjA5LTIgZm9yIDUzMk1IeiBvcGVyYXRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgdGltaW5nc19qZWRlY181MzJfbWh6ID0geworCS5tYXhfZnJlcSA9IDUzMjAwMDAwMCwKKwkuUkwgPSA4LAorCS50UlBhYiA9IDIxLAorCS50UkNEID0gMTgsCisJLnRXUiA9IDE1LAorCS50UkFTbWluID0gNDIsCisJLnRSUkQgPSAxMCwKKwkudFdUUngyID0gMTUsCisJLnRYU1IgPSAxNDAsCisJLnRYUHgyID0gMTUsCisJLnRSRkNhYiA9IDEzMCwKKwkudFJUUHgyID0gMTUsCisJLnRDS0UgPSAzLAorCS50Q0tFU1IgPSAxNSwKKwkudFpRQ1MgPSA5MCwKKwkudFpRQ0wgPSAzNjAsCisJLnRaUUlOSVQgPSAxMDAwLAorCS50RFFTQ0tNQVh4MiA9IDExLAorCS50UkFTbWF4ID0gNzAsCisJLnRGQVcgPSA1MAorfTsKKworLyoKKyAqIE1pbiB0Q0sgdmFsdWVzIHNwZWNpZmllZCBieSBKRVNEMjA5LTIKKyAqIE1pbiB0Q0sgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIGR1cmF0aW9uIG9mIHNvbWUgQUMgdGltaW5nIHBhcmFtZXRlcnMgaW4gdGVybXMKKyAqIG9mIHRoZSBudW1iZXIgb2YgY3ljbGVzLiBJZiB0aGUgY2FsY3VsYXRlZCBudW1iZXIgb2YgY3ljbGVzIGJhc2VkIG9uIHRoZQorICogYWJzb2x1dGUgdGltZSB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIG1pbiB0Q0sgdmFsdWUsIG1pbiB0Q0sgdmFsdWUgc2hvdWxkCisgKiBiZSB1c2VkIGluc3RlYWQuIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgYXQgbG93IGZyZXF1ZW5jaWVzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrIG1pbl90Y2tfamVkZWMgPSB7CisJLnRSTCA9IDMsCisJLnRSUF9BQiA9IDMsCisJLnRSQ0QgPSAzLAorCS50V1IgPSAzLAorCS50UkFTX01JTiA9IDMsCisJLnRSUkQgPSAyLAorCS50V1RSID0gMiwKKwkudFhQID0gMiwKKwkudFJUUCA9IDIsCisJLnRDS0UgPSAzLAorCS50Q0tFU1IgPSAzLAorCS50RkFXID0gOAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyBjb25zdCoKKwkJCWplZGVjX2FjX3RpbWluZ3NbTUFYX05VTV9TUEVFREJJTlNdID0geworCSZ0aW1pbmdzX2plZGVjXzUzMl9taHoKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzIGplZGVjX2RlZmF1bHRfdGltaW5ncyA9IHsKKwkuYWNfdGltaW5ncyA9IGplZGVjX2FjX3RpbWluZ3MsCisJLm1pbl90Y2sgPSAmbWluX3Rja19qZWRlYworfTsKKwordm9pZCBlbWlmX2dldF9kZXZpY2VfdGltaW5ncyh1MzIgZW1pZl9uciwKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMF9kZXZpY2VfdGltaW5ncywKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMV9kZXZpY2VfdGltaW5ncykKK3sKKwkvKiBBc3N1bWUgSWRlbnRpY2FsIGRldmljZXMgb24gRU1JRjEgJiBFTUlGMiAqLworCSpjczBfZGV2aWNlX3RpbWluZ3MgPSAmamVkZWNfZGVmYXVsdF90aW1pbmdzOworCSpjczFfZGV2aWNlX3RpbWluZ3MgPSBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2h3aW5pdC5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2h3aW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGUzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvaHdpbml0LmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqCisgKiBGdW5jdGlvbnMgZm9yIG9tYXA1IGJhc2VkIGJvYXJkcy4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMTEKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBBdXRob3IgOgorICoJQW5lZXNoIFYJPGFuZWVzaEB0aS5jb20+CisgKglTdGV2ZSBTYWtvbWFuCTxzdGV2ZUBzYWtvbWFuLmNvbT4KKyAqCVNyaWNoYXJhbgk8ci5zcmljaGFyYW5AdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJtdjcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vdXRpbHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCit1MzIgKmNvbnN0IG9tYXA1X3JldmlzaW9uID0gKHUzMiAqKU9NQVA1X1NSQU1fU0NSQVRDSF9PTUFQNV9SRVY7CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua181NHh4WzZdID0geworCXsgKHZvaWQgKilPTUFQNTRYWF9HUElPMV9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA1NFhYX0dQSU8yX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDU0WFhfR1BJTzNfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNTRYWF9HUElPNF9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA1NFhYX0dQSU81X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDU0WFhfR1BJTzZfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorfTsKKworY29uc3Qgc3RydWN0IGdwaW9fYmFuayAqY29uc3Qgb21hcF9ncGlvX2JhbmsgPSBncGlvX2JhbmtfNTR4eDsKKworI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKy8qCisgKiBTb21lIHR1bmluZyBvZiBJT3MgZm9yIG9wdGltYWwgcG93ZXIgYW5kIHBlcmZvcm1hbmNlCisgKi8KK3ZvaWQgZG9faW9fc2V0dGluZ3Modm9pZCkKK3sKK30KKyNlbmRpZgorCit2b2lkIGluaXRfb21hcF9yZXZpc2lvbih2b2lkKQoreworCS8qCisJICogRm9yIHNvbWUgb2YgdGhlIEVTMi9FUzEgYm9hcmRzIElEX0NPREUgaXMgbm90IHJlbGlhYmxlOgorCSAqIEFsc28sIEVTMSBhbmQgRVMyIGhhdmUgZGlmZmVyZW50IEFSTSByZXZpc2lvbnMKKwkgKiBTbyB1c2UgQVJNIHJldmlzaW9uIGZvciBpZGVudGlmaWNhdGlvbgorCSAqLworCXVuc2lnbmVkIGludCByZXYgPSBjb3J0ZXhfcmV2KCk7CisKKwlzd2l0Y2ggKHJldikgeworCWNhc2UgTUlEUl9DT1JURVhfQTE1X1IwUDA6CisJCSpvbWFwNV9yZXZpc2lvbiA9IE9NQVA1NDMwX0VTMV8wOworCWRlZmF1bHQ6CisJCSpvbWFwNV9yZXZpc2lvbiA9IE9NQVA1NDMwX1NJTElDT05fSURfSU5WQUxJRDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvc2RyYW1fZWxwaWRhLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvc2RyYW1fZWxwaWRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxOThlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9zZHJhbV9lbHBpZGEuYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIFRpbWluZyBhbmQgT3JnYW5pemF0aW9uIGRldGFpbHMgb2YgdGhlIEVscGlkYSBwYXJ0cyB1c2VkIGluIE9NQVA1CisgKiBFVk0KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KKyAqIFNyaWNoYXJhbiBSIDxyLnNyaWNoYXJhbkB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8YXNtL2VtaWYuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKworLyoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBkZXRhaWxzIG9mIHRoZSBMUEREUjIgU0RSQU0gcGFydHMgdXNlZCBvbiBPTUFQNQorICogRVZNLiBTaW5jZSB0aGUgcGFydHMgdXNlZCBhbmQgZ2VvbWV0cnkgYXJlIGlkZW50aWNhbCBmb3IKKyAqIGV2bSBmb3IgYSBnaXZlbiBPTUFQNSByZXZpc2lvbiwgdGhpcyBpbmZvcm1hdGlvbiBpcyBrZXB0CisgKiBoZXJlIGluc3RlYWQgb2YgYmVpbmcgaW4gYm9hcmQgZGlyZWN0b3J5LiBIb3dldmVyIHRoZSBrZXkgZnVuY3Rpb25zCisgKiBleHBvcnRlZCBhcmUgd2Vha2x5IGxpbmtlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIG92ZXItcmlkZGVuIGluIHRoZSBib2FyZAorICogZGlyZWN0b3J5IGlmIHRoZXJlIGlzIGEgT01BUDUgYm9hcmQgaW4gdGhlIGZ1dHVyZSB0aGF0IHVzZXMgYSBkaWZmZXJlbnQKKyAqIG1lbW9yeSBkZXZpY2Ugb3IgZ2VvbWV0cnkuCisgKgorICogRm9yIGFueSBuZXcgYm9hcmQgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IGRldmljZXMgb3Zlci1yaWRlIG9uZSBvciBtb3JlCisgKiBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcyBwZXIgdGhlIENPTkZJRyBmbGFncyB5b3UgaW50ZW5kIHRvIGVuYWJsZToKKyAqIC0gZW1pZl9nZXRfcmVnX2R1bXAoKQorICogLSBlbWlmX2dldF9kbW1fcmVncygpCisgKiAtIGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKCkKKyAqIC0gZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3MoKQorICovCisKKyNpZmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUworCitjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzIGVtaWZfcmVnc19lbHBpZGFfNTMyX21oel8xY3MgPSB7CisJLnNkcmFtX2NvbmZpZ19pbml0CQk9IDB4ODA4MDFhQjIsCisJLnNkcmFtX2NvbmZpZwkJCT0gMHg4MDgwMjJCMiwKKwkucmVmX2N0cmwJCQk9IDB4MDAwMDA4MUEsCisJLnNkcmFtX3RpbTEJCQk9IDB4NzcyRjY4NzMsCisJLnNkcmFtX3RpbTIJCQk9IDB4MzA0QTEyOUEsCisJLnNkcmFtX3RpbTMJCQk9IDB4MDJGN0U0NUYsCisJLnJlYWRfaWRsZV9jdHJsCQkJPSAweDAwMDUwMDAwLAorCS56cV9jb25maWcJCQk9IDB4MDAwQjMyMTUsCisJLnRlbXBfYWxlcnRfY29uZmlnCQk9IDB4MDgwMDBBMDUsCisJLmVtaWZfZGRyX3BoeV9jdGxyXzFfaW5pdAk9IDB4MEUzODIwMEQsCisJLmVtaWZfZGRyX3BoeV9jdGxyXzEJCT0gMHgwRTM4MjAwRAorfTsKKworY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzIGxpc2FfbWFwXzRHX3hfMV94XzIgPSB7CisJLmRtbV9saXNhX21hcF8wID0gMHhGRjAyMDEwMCwKKwkuZG1tX2xpc2FfbWFwXzEgPSAwLAorCS5kbW1fbGlzYV9tYXBfMiA9IDAsCisJLmRtbV9saXNhX21hcF8zID0gMHg4MDY0MDMwMAorfTsKKworc3RhdGljIHZvaWQgZW1pZl9nZXRfcmVnX2R1bXBfc2RwKHUzMiBlbWlmX25yLCBjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICoqcmVncykKK3sKKwkqcmVncyA9ICZlbWlmX3JlZ3NfZWxwaWRhXzUzMl9taHpfMWNzOworfQordm9pZCBlbWlmX2dldF9yZWdfZHVtcCh1MzIgZW1pZl9uciwgY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqKnJlZ3MpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoImVtaWZfZ2V0X3JlZ19kdW1wX3NkcCIpKSk7CisKK3N0YXRpYyB2b2lkIGVtaWZfZ2V0X2RtbV9yZWdzX3NkcChjb25zdCBzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MKKwkJCQkJCSoqZG1tX2xpc2FfcmVncykKK3sKKwkqZG1tX2xpc2FfcmVncyA9ICZsaXNhX21hcF80R194XzFfeF8yOworfQorCit2b2lkIGVtaWZfZ2V0X2RtbV9yZWdzKGNvbnN0IHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqKmRtbV9saXNhX3JlZ3MpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoImVtaWZfZ2V0X2RtbV9yZWdzX3NkcCIpKSk7CisKKyNlbHNlCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIGVscGlkYV80R19TNF9kZXRhaWxzID0geworCS50eXBlCQk9IExQRERSMl9UWVBFX1M0LAorCS5kZW5zaXR5CT0gTFBERFIyX0RFTlNJVFlfNEdiLAorCS5pb193aWR0aAk9IExQRERSMl9JT19XSURUSF8zMiwKKwkubWFudWZhY3R1cmVyCT0gTFBERFIyX01BTlVGQUNUVVJFUl9FTFBJREEKK307CisKK3N0YXRpYyB2b2lkIGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzX3NkcCh1MzIgZW1pZl9uciwKKwkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZV9kZXRhaWxzLAorCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlX2RldGFpbHMpCit7CisJLyogRU1JRjEgJiBFTUlGMiBoYXZlIGlkZW50aWNhbCBjb25maWd1cmF0aW9uICovCisJKmNzMF9kZXZpY2VfZGV0YWlscyA9IGVscGlkYV80R19TNF9kZXRhaWxzOworCisJLyogTm90aGluZyBpcyBjb25lY3RlZCBvbiBjczEgKi8KKwljczFfZGV2aWNlX2RldGFpbHMgPSBOVUxMOworfQorCit2b2lkIGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKHUzMiBlbWlmX25yLAorCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlX2RldGFpbHMsCisJCXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2VfZGV0YWlscykKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiZW1pZl9nZXRfZGV2aWNlX2RldGFpbHNfc2RwIikpKTsKKworI2VuZGlmIC8qIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTICovCisKKyNpZm5kZWYgQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHRpbWluZ3NfamVkZWNfNTMyX21oeiA9IHsKKwkubWF4X2ZyZXEJPSA1MzIwMDAwMDAsCisJLlJMCQk9IDgsCisJLnRSUGFiCQk9IDIxLAorCS50UkNECQk9IDE4LAorCS50V1IJCT0gMTUsCisJLnRSQVNtaW4JPSA0MiwKKwkudFJSRAkJPSAxMCwKKwkudFdUUngyCQk9IDE1LAorCS50WFNSCQk9IDE0MCwKKwkudFhQeDIJCT0gMTUsCisJLnRSRkNhYgkJPSAxMzAsCisJLnRSVFB4MgkJPSAxNSwKKwkudENLRQkJPSAzLAorCS50Q0tFU1IJCT0gMTUsCisJLnRaUUNTCQk9IDkwLAorCS50WlFDTAkJPSAzNjAsCisJLnRaUUlOSVQJPSAxMDAwLAorCS50RFFTQ0tNQVh4Mgk9IDExLAorCS50UkFTbWF4CT0gNzAsCisJLnRGQVcJCT0gNTAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgbWluX3Rja19lbHBpZGEgPSB7CisJLnRSTAkJPSAzLAorCS50UlBfQUIJCT0gMywKKwkudFJDRAkJPSAzLAorCS50V1IJCT0gMywKKwkudFJBU19NSU4JPSAzLAorCS50UlJECQk9IDIsCisJLnRXVFIJCT0gMiwKKwkudFhQCQk9IDIsCisJLnRSVFAJCT0gMiwKKwkudENLRQkJPSAzLAorCS50Q0tFU1IJCT0gMywKKwkudEZBVwkJPSA4Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICplbHBpZGFfYWNfdGltaW5nc1tNQVhfTlVNX1NQRUVEQklOU10gPSB7CisJJnRpbWluZ3NfamVkZWNfNTMyX21oegorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgZWxwaWRhXzRHX1M0X3RpbWluZ3MgPSB7CisJLmFjX3RpbWluZ3MJPSBlbHBpZGFfYWNfdGltaW5ncywKKwkubWluX3Rjawk9ICZtaW5fdGNrX2VscGlkYSwKK307CisKK3ZvaWQgZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3Nfc2RwKHUzMiBlbWlmX25yLAorCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MwX2RldmljZV90aW1pbmdzLAorCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MxX2RldmljZV90aW1pbmdzKQoreworCS8qIElkZW50aWNhbCBkZXZpY2VzIG9uIEVNSUYxICYgRU1JRjIgKi8KKwkqY3MwX2RldmljZV90aW1pbmdzID0gJmVscGlkYV80R19TNF90aW1pbmdzOworCSpjczFfZGV2aWNlX3RpbWluZ3MgPSBOVUxMOworfQorCit2b2lkIGVtaWZfZ2V0X2RldmljZV90aW1pbmdzKHUzMiBlbWlmX25yLAorCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MwX2RldmljZV90aW1pbmdzLAorCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MxX2RldmljZV90aW1pbmdzKQorCV9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJlbWlmX2dldF9kZXZpY2VfdGltaW5nc19zZHAiKSkpOworCisjZW5kaWYgLyogQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvczVwLWNvbW1vbi9wd20uYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9zNXAtY29tbW9uL3B3bS5jCmluZGV4IGZmOTViODQuLjU4ZDI3OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9zNXAtY29tbW9uL3B3bS5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9zNXAtY29tbW9uL3B3bS5jCkBAIC04Miw3ICs4Miw2IEBACiAJdW5zaWduZWQgbG9uZyBwZXJpb2Q7CiAJdW5zaWduZWQgbG9uZyB0Y29uOwogCXVuc2lnbmVkIGxvbmcgdGNudDsKLQl1bnNpZ25lZCBsb25nIHRpbWVyX3JhdGVfaHo7CiAJdW5zaWduZWQgbG9uZyB0Y21wOwogCiAJLyoKQEAgLTEwMCw3ICs5OSw2IEBACiAKIAkvKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIGNoYW5naW5nIHRoZSBjbG9jayByYXRlIG9mIHRoZSBQV00gKi8KIAl0aW5fcmF0ZSA9IHB3bV9jYWxjX3Rpbihwd21faWQsIHBlcmlvZCk7Ci0JdGltZXJfcmF0ZV9oeiA9IHRpbl9yYXRlOwogCiAJdGluX25zID0gTlNfSU5fSFogLyB0aW5fcmF0ZTsKIAl0Y250ID0gcGVyaW9kX25zIC8gdGluX25zOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2FpbnRjX2RlZnMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9haW50Y19kZWZzLmgKaW5kZXggOGYzNzA1My4uMzhmODE0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2FpbnRjX2RlZnMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvYWludGNfZGVmcy5oCkBAIC00Nyw0ICs0Nyw2IEBACiAKICNkZWZpbmUgZHZfYWludGNfcmVncyAoKHN0cnVjdCBkdl9haW50Y19yZWdzICopREFWSU5DSV9BUk1fSU5UQ19CQVNFKQogCisjZGVmaW5lIERWX0FJTlRDX0lOVENUTF9JRE1PREUJKDEgPDwgMikKKwogI2VuZGlmIC8qIF9EVl9BSU5UQ19ERUZTX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvYW0xODA4X2xvd2xldmVsLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZGE4NTBfbG93bGV2ZWwuaApzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvYW0xODA4X2xvd2xldmVsLmgKcmVuYW1lIHRvIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9kYTg1MF9sb3dsZXZlbC5oCmluZGV4IDBiYzdmNzYuLmU0ODljNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9hbTE4MDhfbG93bGV2ZWwuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZGE4NTBfbG93bGV2ZWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBTb0Mtc3BlY2lmaWMgbG93bGV2ZWwgY29kZSBmb3IgQU0xODA4IGFuZCBzaW1pbGFyIGNoaXBzCisgKiBTb0Mtc3BlY2lmaWMgbG93bGV2ZWwgY29kZSBmb3IgREE4NTAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEKICAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBoc0BkZW54LmRlLgpAQCAtMjEsMjQgKzIxLDI0IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpZm5kZWYgX19BTTE4MDhfTE9XTEVWRUxfSAotI2RlZmluZSBfX0FNMTgwOF9MT1dMRVZFTF9ICisjaWZuZGVmIF9fREE4NTBfTE9XTEVWRUxfSAorI2RlZmluZSBfX0RBODUwX0xPV0xFVkVMX0gKIAogLyogTk9SIEJvb3QgQ29uZmlndXJhdGlvbiBXb3JkIEZpZWxkIERlc2NyaXB0aW9ucyAqLwotI2RlZmluZSBBTTE4MDhfTk9SQk9PVF9DT1BZX1hLKFgpCSgoWCAtIDEpIDw8IDgpCi0jZGVmaW5lIEFNMTgwOF9OT1JCT09UX01FVEhPRF9ESVJFQ1QJKDEgPDwgNCkKLSNkZWZpbmUgQU0xODA4X05PUkJPT1RfMTZCSVQJCSgxIDw8IDApCisjZGVmaW5lIERBODUwX05PUkJPT1RfQ09QWV9YSyhYKQkoKFggLSAxKSA8PCA4KQorI2RlZmluZSBEQTg1MF9OT1JCT09UX01FVEhPRF9ESVJFQ1QJKDEgPDwgNCkKKyNkZWZpbmUgREE4NTBfTk9SQk9PVF8xNkJJVAkJKDEgPDwgMCkKIAogI2RlZmluZSBkdl9tYXNrYml0cyhhZGRyLCB2YWwpIFwKIAl3cml0ZWwoKHJlYWRsKGFkZHIpICYgdmFsKSwgYWRkcikKIAotdm9pZCBhbTE4MDhfd2FpdGxvb3AodW5zaWduZWQgbG9uZyBsb29wY250KTsKLWludCBhbTE4MDhfcGxsX2luaXQoc3RydWN0IGRhdmluY2lfcGxsY19yZWdzICpyZWcsIHVuc2lnbmVkIGxvbmcgcGxsbXVsdCk7Ci12b2lkIGFtMTgwOF9scGNfdHJhbnNpdGlvbih1bnNpZ25lZCBjaGFyIHBzY251bSwgdW5zaWduZWQgY2hhciBtb2R1bGUsCit2b2lkIGRhODUwX3dhaXRsb29wKHVuc2lnbmVkIGxvbmcgbG9vcGNudCk7CitpbnQgZGE4NTBfcGxsX2luaXQoc3RydWN0IGRhdmluY2lfcGxsY19yZWdzICpyZWcsIHVuc2lnbmVkIGxvbmcgcGxsbXVsdCk7Cit2b2lkIGRhODUwX2xwY190cmFuc2l0aW9uKHVuc2lnbmVkIGNoYXIgcHNjbnVtLCB1bnNpZ25lZCBjaGFyIG1vZHVsZSwKIAkJdW5zaWduZWQgY2hhciBkb21haW4sIHVuc2lnbmVkIGNoYXIgc3RhdGUpOwotaW50IGFtMTgwOF9kZHJfc2V0dXAodW5zaWduZWQgaW50IGZyZXEpOwotdm9pZCBhbTE4MDhfcHNjX2luaXQodm9pZCk7Ci12b2lkIGFtMTgwOF9waW5tdXhfY3RsKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG1hc2ssCitpbnQgZGE4NTBfZGRyX3NldHVwKHZvaWQpOwordm9pZCBkYTg1MF9wc2NfaW5pdCh2b2lkKTsKK3ZvaWQgZGE4NTBfcGlubXV4X2N0bCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBtYXNrLAogCXVuc2lnbmVkIGxvbmcgdmFsdWUpOwogCi0jZW5kaWYgLyogI2lmbmRlZiBfX0FNMTgwOF9MT1dMRVZFTF9IICovCisjZW5kaWYgLyogI2lmbmRlZiBfX0RBODUwX0xPV0xFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9kZHIyX2RlZnMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9kZHIyX2RlZnMuaAppbmRleCAxYjk0MzBjLi40Zjk0M2I4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZGRyMl9kZWZzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2RkcjJfZGVmcy5oCkBAIC02Myw2ICs2Myw3IEBACiAKICNkZWZpbmUgRFZfRERSX1NEVE1SMl9SQVNNQVhfU0hJRlQJMjcKICNkZWZpbmUgRFZfRERSX1NEVE1SMl9YUF9TSElGVAkyNQorI2RlZmluZSBEVl9ERFJfU0RUTVIyX09EVF9TSElGVAkyMwogI2RlZmluZSBEVl9ERFJfU0RUTVIyX1hTTlJfU0hJRlQJMTYKICNkZWZpbmUgRFZfRERSX1NEVE1SMl9YU1JEX1NISUZUCTgKICNkZWZpbmUgRFZfRERSX1NEVE1SMl9SVFBfU0hJRlQJNQpAQCAtODQsNiArODUsOSBAQAogI2RlZmluZSBEVl9ERFJfU0RDUl9JQkFOS19TSElGVAk0CiAjZGVmaW5lIERWX0REUl9TRENSX1BBR0VTSVpFX1NISUZUCTAKIAorI2RlZmluZSBEVl9ERFJfU0RSQ1JfTFBNT0RFTgkoMSA8PCAzMSkKKyNkZWZpbmUgRFZfRERSX1NEUkNSX01DTEtTVE9QRU4JKDEgPDwgMzApCisKICNkZWZpbmUgRFZfRERSX1NSQ1JfTFBNT0RFTl9TSElGVAkzMQogI2RlZmluZSBEVl9ERFJfU1JDUl9NQ0xLU1RPUEVOX1NISUZUCTMwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9lbWlmX2RlZnMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9lbWlmX2RlZnMuaAppbmRleCBiNDhlYzE3Li5iOWU3OGE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZW1pZl9kZWZzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2VtaWZfZGVmcy5oCkBAIC03MCw2ICs3MCw3IEBACiAjZGVmaW5lIERBVklOQ0lfTkFOREZDUl8xQklUX0VDQ19TVEFSVChuKQkJKDEgPDwgKDggKyAobi0yKSkpCiAjZGVmaW5lIERBVklOQ0lfTkFOREZDUl80QklUX0VDQ19TVEFSVAkJCSgxIDw8IDEyKQogI2RlZmluZSBEQVZJTkNJX05BTkRGQ1JfNEJJVF9DQUxDX1NUQVJUCQkJKDEgPDwgMTMpCisjZGVmaW5lIERBVklOQ0lfTkFOREZDUl9DUzJOQU5ECQkJCSgxIDw8IDApCiAKIC8qIENoaXAgU2VsZWN0IHNldHVwICovCiAjZGVmaW5lIERBVklOQ0lfQUJDUl9TVFJPQkVfU0VMRUNUCQkJKDEgPDwgMzEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9oYXJkd2FyZS5oCmluZGV4IGJlYTE0OTkuLjNlOWEzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9oYXJkd2FyZS5oCkBAIC0yMzAsNiArMjMwLDkgQEAKICNkZWZpbmUgREFWSU5DSV9MUFNDX0NGRzUJCTM4CiAjZGVmaW5lIERBVklOQ0lfTFBTQ19HRU0JCTM5CiAjZGVmaW5lIERBVklOQ0lfTFBTQ19JTUNPUAkJNDAKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1ZQU1NNQVNURVIJCTQ3CisjZGVmaW5lIERBVklOQ0lfTFBTQ19NSkNQCQk1MAorI2RlZmluZSBEQVZJTkNJX0xQU0NfSERWSUNQCQk1MQogCiAjZGVmaW5lIERBVklOQ0lfRE02NDZYX0xQU0NfRU1BQwkxNAogI2RlZmluZSBEQVZJTkNJX0RNNjQ2WF9MUFNDX1VBUlQwCTI2CkBAIC0zODUsNiArMzg4LDIwIEBACiAjZGVmaW5lIFBJTk1VWDMJCQkJMHgwMWM0MDAwYwogI2RlZmluZSBQSU5NVVg0CQkJCTB4MDFjNDAwMTAKIAorc3RydWN0IGRhdmluY2lfdWFydF9jdHJsX3JlZ3MgeworCWR2X3JlZwlyZXZpZDE7CisJZHZfcmVnCXJlczsKKwlkdl9yZWcJcHdyZW11X21nbXQ7CisJZHZfcmVnCW1kcjsKK307CisKKyNkZWZpbmUgREFWSU5DSV9VQVJUX0NUUkxfQkFTRSAweDI4CisKKy8qIFVBUlQgUFdSRU1VX01HTVQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX0ZSRUUJKDEgPDwgMCkKKyNkZWZpbmUgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VSUlNUCSgxIDw8IDEzKQorI2RlZmluZSBEQVZJTkNJX1VBUlRfUFdSRU1VX01HTVRfVVRSU1QJKDEgPDwgMTQpCisKICNlbHNlIC8qIENPTkZJR19TT0NfREE4WFggKi8KIAogc3RydWN0IGRhdmluY2lfcGxsY19yZWdzIHsKQEAgLTQzMSw2ICs0NDgsNyBAQAogZW51bSBkYXZpbmNpX2Nsa19pZHMgewogCURBVklOQ0lfU1BJMF9DTEtJRCA9IDIsCiAJREFWSU5DSV9VQVJUMl9DTEtJRCA9IDIsCisJREFWSU5DSV9NTUNfQ0xLSUQgPSAyLAogCURBVklOQ0lfTURJT19DTEtJRCA9IDQsCiAJREFWSU5DSV9BUk1fQ0xLSUQgPSA2LAogCURBVklOQ0lfUExMTV9DTEtJRCA9IDB4ZmYsCkBAIC00NjgsNiArNDg2LDcgQEAKICNkZWZpbmUgREFWSU5DSV9TWVNDRkdfU1VTUFNSQ19TUEkwCQkoMSA8PCAyMSkKICNkZWZpbmUgREFWSU5DSV9TWVNDRkdfU1VTUFNSQ19TUEkxCQkoMSA8PCAyMikKICNkZWZpbmUgREFWSU5DSV9TWVNDRkdfU1VTUFNSQ19VQVJUMAkJKDEgPDwgMTgpCisjZGVmaW5lIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfVUFSVDIJCSgxIDw8IDIwKQogI2RlZmluZSBEQVZJTkNJX1NZU0NGR19TVVNQU1JDX1RJTUVSMAkJKDEgPDwgMjcpCiAKIHN0cnVjdCBkYXZpbmNpX3N5c2NmZzFfcmVncyB7CkBAIC00OTEsNiArNTEwLDkgQEAKICNkZWZpbmUgVlRQX1JFQURZCQkoMSA8PCAxNSkKICNkZWZpbmUgVlRQX0lPUFdSRFdOCQkoMSA8PCAxNCkKIAorI2RlZmluZSBEVl9TWVNDRkdfS0lDSzBfVU5MT0NLCTB4ODNlNzBiMTMKKyNkZWZpbmUgRFZfU1lTQ0ZHX0tJQ0sxX1VOTE9DSwkweDk1YTRmMWUwCisKIC8qIEludGVycnVwdCBjb250cm9sbGVyICovCiBzdHJ1Y3QgZGF2aW5jaV9haW50Y19yZWdzIHsKIAlkdl9yZWcJcmV2aWQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvcGxsX2RlZnMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9wbGxfZGVmcy5oCmluZGV4IDVjMzA5NTMuLmYxMzk2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9wbGxfZGVmcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9wbGxfZGVmcy5oCkBAIC01NywxMSArNTcsMjQgQEAKIAl1bnNpZ25lZCBpbnQJcGxsZGl2OTsJLyogMHgxNzQgKi8KIH07CiAKKyNkZWZpbmUgUExMX01BU1RFUl9MT0NLCSgxIDw8IDQpCisKKyNkZWZpbmUgUExMQ1RMX0NMT0NLX01PREVfU0hJRlQJOAogI2RlZmluZSBQTExDVExfUExMRU4JKDEgPDwgMCkKICNkZWZpbmUgUExMQ1RMX1BMTFBXUkROCSgxIDw8IDEpCiAjZGVmaW5lIFBMTENUTF9QTExSU1QJKDEgPDwgMykKKyNkZWZpbmUgUExMQ1RMX1BMTERJUwkoMSA8PCA0KQogI2RlZmluZSBQTExDVExfUExMRU5TUkMJKDEgPDwgNSkKICNkZWZpbmUgUExMQ1RMX1JFU185CSgxIDw8IDgpCisjZGVmaW5lIFBMTENUTF9FWFRDTEtTUkMJKDEgPDwgOSkKKworI2RlZmluZSBQTExfUE9TVERFTgkoMSA8PCAxNSkKKworI2RlZmluZSBQTExfU0NTQ0ZHM19ESVY0NVBFTkEJKDEgPDwgMikKKyNkZWZpbmUgUExMX1NDU0NGRzNfRU1BX0NMS1NSQwkoMSA8PCAxKQorCisjZGVmaW5lIFBMTF9SU1RZUEVfUE9SCQkoMSA8PCAwKQorI2RlZmluZSBQTExfUlNUWVBFX1hXUlNUCSgxIDw8IDEpCiAKICNkZWZpbmUgUExMU0VDQ1RMX1RJTklUWgkoMSA8PCAxNikKICNkZWZpbmUgUExMU0VDQ1RMX1RFTkFCTEUJKDEgPDwgMTcpCkBAIC02OSw2ICs4Miw3IEBACiAjZGVmaW5lIFBMTFNFQ0NUTF9TVE9QTU9ERQkoMSA8PCAyMikKIAogI2RlZmluZSBQTExDTURfR09TRVQJCSgxIDw8IDApCisjZGVmaW5lIFBMTENNRF9HT1NUQVQJCSgxIDw8IDApCiAKICNkZWZpbmUgUExMMF9MT0NLCQkweDA3MDAwMDAwCiAjZGVmaW5lIFBMTDFfTE9DSwkJMHgwNzAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2Nsb2NrLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAwZmUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2Nsb2NrLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggQ2xvY2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DTE9DS19IX18KKyNkZWZpbmUgX19DTE9DS19IX18KKworZW51bSBteGNfY2xvY2sgeworCU1YQ19BUk1fQ0xLID0gMCwKKwlNWENfQUhCX0NMSywKKwlNWENfSVBHX0NMSywKKwlNWENfRU1JX0NMSywKKwlNWENfR1BNSV9DTEssCisJTVhDX0lPMF9DTEssCisJTVhDX0lPMV9DTEssCisJTVhDX1NTUDBfQ0xLLAorCU1YQ19TU1AxX0NMSywKKwlNWENfU1NQMl9DTEssCisJTVhDX1NTUDNfQ0xLLAorfTsKKworZW51bSBteHNfaW9jbG9jayB7CisJTVhDX0lPQ0xLMCA9IDAsCisJTVhDX0lPQ0xLMSwKK307CisKK2VudW0gbXhzX3NzcGNsb2NrIHsKKwlNWENfU1NQQ0xLMCA9IDAsCisJTVhDX1NTUENMSzEsCisJTVhDX1NTUENMSzIsCisJTVhDX1NTUENMSzMsCit9OworCit1aW50MzJfdCBteGNfZ2V0X2Nsb2NrKGVudW0gbXhjX2Nsb2NrIGNsayk7CisKK3ZvaWQgbXgyOF9zZXRfaW9jbGsoZW51bSBteHNfaW9jbG9jayBpbywgdWludDMyX3QgZnJlcSk7Cit2b2lkIG14Mjhfc2V0X3NzcGNsayhlbnVtIG14c19zc3BjbG9jayBzc3AsIHVpbnQzMl90IGZyZXEsIGludCB4dGFsKTsKK3ZvaWQgbXgyOF9zZXRfc3NwX2J1c2Nsb2NrKHVuc2lnbmVkIGludCBidXMsIHVpbnQzMl90IGZyZXEpOworCisvKiBDb21wYXRpYmlsaXR5IHdpdGggdGhlIEZFQyBFdGhlcm5ldCBkcml2ZXIgKi8KKyNkZWZpbmUJaW14X2dldF9mZWNjbGsoKQlteGNfZ2V0X2Nsb2NrKE1YQ19BSEJfQ0xLKQorCisjZW5kaWYJLyogX19DTE9DS19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9kbWEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDYxZTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2RtYS5oCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBBUEJIIERNQQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fRE1BX0hfXworI2RlZmluZSBfX0RNQV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2lmbmRlZglDT05GSUdfQVJDSF9ETUFfUElPX1dPUkRTCisjZGVmaW5lCURNQV9QSU9fV09SRFMJCTE1CisjZWxzZQorI2RlZmluZQlETUFfUElPX1dPUkRTCQlDT05GSUdfQVJDSF9ETUFfUElPX1dPUkRTCisjZW5kaWYKKworI2RlZmluZSBNWFNfRE1BX0FMSUdOTUVOVAkzMgorCisvKgorICogTVhTIERNQSBjaGFubmVscworICovCitlbnVtIHsKKwlNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfU1NQMCA9IDAsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX1NTUDEsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX1NTUDIsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX1NTUDMsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX0dQTUkwLAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMSwKKwlNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTIsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX0dQTUkzLAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JNCwKKwlNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTUsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX0dQTUk2LAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JNywKKwlNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfU1NQLAorCU1YU19NQVhfRE1BX0NIQU5ORUxTLAorfTsKKworLyoKKyAqIE1YUyBETUEgaGFyZHdhcmUgY29tbWFuZC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGluLW1lbW9yeSBsYXlvdXQgb2YgYW4gZW50aXJlIERNQSBjb21tYW5kLAorICogaW5jbHVkaW5nIHNwYWNlIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgUElPIGFjY2Vzc2VzLiBTZWUgdGhlIGFwcHJvcHJpYXRlCisgKiByZWZlcmVuY2UgbWFudWFsIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlc2UgZmllbGRzIG1lYW4gdG8gdGhlCisgKiBETUEgaGFyZHdhcmUuCisgKi8KKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0NPTU1BTkRfTUFTSwkweDMKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0NPTU1BTkRfT0ZGU0VUCTAKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0NPTU1BTkRfTk9fRE1BWEZFUgkweDAKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0NPTU1BTkRfRE1BX1dSSVRFCTB4MQorI2RlZmluZQlNWFNfRE1BX0RFU0NfQ09NTUFORF9ETUFfUkVBRAkweDIKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0NPTU1BTkRfRE1BX1NFTlNFCTB4MworI2RlZmluZQlNWFNfRE1BX0RFU0NfQ0hBSU4JCSgxIDw8IDIpCisjZGVmaW5lCU1YU19ETUFfREVTQ19JUlEJCSgxIDw8IDMpCisjZGVmaW5lCU1YU19ETUFfREVTQ19OQU5EX0xPQ0sJCSgxIDw8IDQpCisjZGVmaW5lCU1YU19ETUFfREVTQ19OQU5EX1dBSVRfNF9SRUFEWQkoMSA8PCA1KQorI2RlZmluZQlNWFNfRE1BX0RFU0NfREVDX1NFTQkJKDEgPDwgNikKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX1dBSVQ0RU5ECQkoMSA8PCA3KQorI2RlZmluZQlNWFNfRE1BX0RFU0NfSEFMVF9PTl9URVJNSU5BVEUJKDEgPDwgOCkKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX1RFUk1JTkFURV9GTFVTSAkoMSA8PCA5KQorI2RlZmluZQlNWFNfRE1BX0RFU0NfUElPX1dPUkRTX01BU0sJKDB4ZiA8PCAxMikKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQJMTIKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0JZVEVTX01BU0sJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCU1YU19ETUFfREVTQ19CWVRFU19PRkZTRVQJMTYKKworc3RydWN0IG14c19kbWFfY21kIHsKKwl1bnNpZ25lZCBsb25nCQluZXh0OworCXVuc2lnbmVkIGxvbmcJCWRhdGE7CisJdW5pb24geworCQlkbWFfYWRkcl90CWFkZHJlc3M7CisJCXVuc2lnbmVkIGxvbmcJYWx0ZXJuYXRlOworCX07CisJdW5zaWduZWQgbG9uZwkJcGlvX3dvcmRzW0RNQV9QSU9fV09SRFNdOworfTsKKworLyoKKyAqIE1YUyBETUEgY29tbWFuZCBkZXNjcmlwdG9yLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGluY29ycG9yYXRlcyBhbiBNWFMgRE1BIGhhcmR3YXJlIGNvbW1hbmQgc3RydWN0dXJlLCBhbG9uZworICogd2l0aCBtZXRhZGF0YS4KKyAqLworI2RlZmluZQlNWFNfRE1BX0RFU0NfRklSU1QJKDEgPDwgMCkKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0xBU1QJKDEgPDwgMSkKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX1JFQURZCSgxIDw8IDMxKQorCitzdHJ1Y3QgbXhzX2RtYV9kZXNjIHsKKwlzdHJ1Y3QgbXhzX2RtYV9jbWQJY21kOworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisJZG1hX2FkZHJfdAkJYWRkcmVzczsKKwl2b2lkCQkJKmJ1ZmZlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7Cit9OworCisvKioKKyAqIE1YUyBETUEgY2hhbm5lbAorICoKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBzaW5nbGUgRE1BIGNoYW5uZWwuIFRoZSBNWFMgcGxhdGZvcm0gY29kZQorICogbWFpbnRhaW5zIGFuIGFycmF5IG9mIHRoZXNlIHN0cnVjdHVyZXMgdG8gcmVwcmVzZW50IGV2ZXJ5IERNQSBjaGFubmVsIGluIHRoZQorICogc3lzdGVtIChzZWUgbXhzX2RtYV9jaGFubmVscykuCisgKi8KKyNkZWZpbmUJTVhTX0RNQV9GTEFHU19JRExFCTAKKyNkZWZpbmUJTVhTX0RNQV9GTEFHU19CVVNZCSgxIDw8IDApCisjZGVmaW5lCU1YU19ETUFfRkxBR1NfRlJFRQkwCisjZGVmaW5lCU1YU19ETUFfRkxBR1NfQUxMT0NBVEVECSgxIDw8IDE2KQorI2RlZmluZQlNWFNfRE1BX0ZMQUdTX1ZBTElECSgxIDw8IDMxKQorCitzdHJ1Y3QgbXhzX2RtYV9jaGFuIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGxvbmcgZGV2OworCXN0cnVjdCBteHNfZG1hX2RldmljZSAqZG1hOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgYWN0aXZlX251bTsKKwl1bnNpZ25lZCBpbnQgcGVuZGluZ19udW07CisJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmU7CisJc3RydWN0IGxpc3RfaGVhZCBkb25lOworfTsKKworLyogSGFyZHdhcmUgbWFuYWdlbWVudCBvcHMgKi8KK2ludCBteHNfZG1hX2VuYWJsZShpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV9kaXNhYmxlKGludCBjaGFubmVsKTsKK2ludCBteHNfZG1hX3Jlc2V0KGludCBjaGFubmVsKTsKK2ludCBteHNfZG1hX2ZyZWV6ZShpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV91bmZyZWV6ZShpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV9yZWFkX3NlbWFwaG9yZShpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV9lbmFibGVfaXJxKGludCBjaGFubmVsLCBpbnQgZW5hYmxlKTsKK2ludCBteHNfZG1hX2lycV9pc19wZW5kaW5nKGludCBjaGFubmVsKTsKK2ludCBteHNfZG1hX2Fja19pcnEoaW50IGNoYW5uZWwpOworCisvKiBDaGFubmVsIG1hbmFnZW1lbnQgb3BzICovCitpbnQgbXhzX2RtYV9yZXF1ZXN0KGludCBjaGFubmVsKTsKK2ludCBteHNfZG1hX3JlbGVhc2UoaW50IGNoYW5uZWwpOworCisvKiBEZXNjcmlwdG9yIG1hbmFnZW1lbnQgb3BzICovCitzdHJ1Y3QgbXhzX2RtYV9kZXNjICpteHNfZG1hX2Rlc2NfYWxsb2Modm9pZCk7Cit2b2lkIG14c19kbWFfZGVzY19mcmVlKHN0cnVjdCBteHNfZG1hX2Rlc2MgKik7CisKK3Vuc2lnbmVkIGludCBteHNfZG1hX2NtZF9hZGRyZXNzKHN0cnVjdCBteHNfZG1hX2Rlc2MgKmRlc2MpOworaW50IG14c19kbWFfZGVzY19wZW5kaW5nKHN0cnVjdCBteHNfZG1hX2Rlc2MgKnBkZXNjKTsKKworaW50IG14c19kbWFfZGVzY19hcHBlbmQoaW50IGNoYW5uZWwsIHN0cnVjdCBteHNfZG1hX2Rlc2MgKnBkZXNjKTsKKworaW50IG14c19kbWFfZ2V0X2ZpbmlzaGVkKGludCBjaGFubmVsLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK2ludCBteHNfZG1hX2ZpbmlzaChpbnQgY2hhbm5lbCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CisKK2ludCBteHNfZG1hX3dhaXRfY29tcGxldGUodWludDMyX3QgdGltZW91dCwgdW5zaWduZWQgaW50IGNoYW4pOworaW50IG14c19kbWFfZ28oaW50IGNoYW4pOworCitpbnQgbXhzX2RtYV9pbml0KHZvaWQpOworCisjZW5kaWYJLyogX19ETUFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvZ3Bpby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTFjOTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2dwaW8uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBHUElPCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmCV9fTVgyOF9HUElPX0hfXworI2RlZmluZQlfX01YMjhfR1BJT19IX18KKworI2lmZGVmCUNPTkZJR19NWFNfR1BJTwordm9pZCBteHNfZ3Bpb19pbml0KHZvaWQpOworI2Vsc2UKK2lubGluZSB2b2lkIG14c19ncGlvX2luaXQodm9pZCkge30KKyNlbmRpZgorCisjZW5kaWYJLyogX19NWDI4X0dQSU9fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW14LXJlZ3MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9pbXgtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjFiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW14LXJlZ3MuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBSZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19JTVhfUkVHU19IX18KKyNkZWZpbmUgX19JTVhfUkVHU19IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtYXBiaC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtYmFzZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtYmNoLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbGtjdHJsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncG1pLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1pMmMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW9jb3RwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1waW5jdHJsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1wb3dlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtcnRjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zc3AuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXRpbXJvdC5oPgorCisjZW5kaWYJLyogX19JTVhfUkVHU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9pb211eC1teDI4LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW9tdXgtbXgyOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjgyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW9tdXgtbXgyOC5oCkBAIC0wLDAgKzEsNTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgQW1pdCBLdWNoZXJpYSA8YW1pdC5rdWNoZXJpYUBjYW5vbmljYWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWDI4X0hfXworI2RlZmluZSBfX01BQ0hfSU9NVVhfTVgyOF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL2lvbXV4Lmg+CisKKy8qCisgKiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBwYWQgbW9kZXMgaXMgTVgyOF9QQURfPHBhZG5hbWU+X188cGFkbW9kZT4KKyAqIElmIDxwYWRuYW1lPiBvciA8cGFkbW9kZT4gcmVmZXJzIHRvIGEgR1BJTywgaXQgaXMgbmFtZWQgR1BJT188dW5pdD5fPG51bT4KKyAqIFNlZSBhbHNvIGlvbXV4LmgKKyAqCisgKgkJCQkJCQkJCUJBTksJUElOCU1VWAorICovCisvKiBNVVhTRUxfMCAqLworI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMF9fR1BNSV9EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDFfX0dQTUlfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAyX19HUE1JX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwM19fR1BNSV9EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDRfX0dQTUlfRDQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA1X19HUE1JX0Q1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNl9fR1BNSV9ENgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDdfX0dQTUlfRDcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UwTl9fR1BNSV9DRTBOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFMU5fX0dQTUlfQ0UxTgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTJOX19HUE1JX0NFMk4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UzTl9fR1BNSV9DRTNOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTBfX0dQTUlfUkVBRFkwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTFfX0dQTUlfUkVBRFkxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTJfX0dQTUlfUkVBRFkyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTNfX0dQTUlfUkVBRFkzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JETl9fR1BNSV9SRE4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfV1JOX19HUE1JX1dSTgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9BTEVfX0dQTUlfQUxFCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NMRV9fR1BNSV9DTEUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkVTRVROX19HUE1JX1JFU0VUTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyOCwgUEFEX01VWFNFTF8wKQorCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDBfX0xDRF9EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMV9fTENEX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAyX19MQ0RfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDNfX0xDRF9EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNF9fTENEX0Q0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA1X19MQ0RfRDUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDZfX0xDRF9ENgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwN19fTENEX0Q3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA4X19MQ0RfRDgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDlfX0xDRF9EOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMF9fTENEX0QxMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMV9fTENEX0QxMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMl9fTENEX0QxMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxM19fTENEX0QxMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNF9fTENEX0QxNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNV9fTENEX0QxNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNl9fTENEX0QxNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxN19fTENEX0QxNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxOF9fTENEX0QxOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxOV9fTENEX0QxOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMF9fTENEX0QyMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMV9fTENEX0QyMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMl9fTENEX0QyMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyM19fTENEX0QyMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JEX0VfX0xDRF9SRF9FCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfV1JfUldOX19MQ0RfV1JfUldOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUlNfX0xDRF9SUwkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9DU19fTENEX0NTCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1ZTWU5DX19MQ0RfVlNZTkMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9IU1lOQ19fTENEX0hTWU5DCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRE9UQ0xLX19MQ0RfRE9UQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAzMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRU5BQkxFX19MQ0RfRU5BQkxFCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAzMSwgUEFEX01VWFNFTF8wKQorCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTBfX1NTUDBfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTFfX1NTUDBfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTJfX1NTUDBfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTNfX1NTUDBfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTRfX1NTUDBfRDQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTVfX1NTUDBfRDUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTZfX1NTUDBfRDYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTdfX1NTUDBfRDcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfQ01EX19TU1AwX0NNRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9ERVRFQ1RfX1NTUDBfQ0FSRF9ERVRFQ1QJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9TQ0tfX1NTUDBfU0NLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX1NDS19fU1NQMV9TQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfQ01EX19TU1AxX0NNRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBMF9fU1NQMV9EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBM19fU1NQMV9EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TQ0tfX1NTUDJfU0NLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01PU0lfX1NTUDJfQ01ECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01JU09fX1NTUDJfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MwX19TU1AyX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMV9fU1NQMl9ENAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzJfX1NTUDJfRDUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU0NLX19TU1AzX1NDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NT1NJX19TU1AzX0NNRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NSVNPX19TU1AzX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NTMF9fU1NQM19EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjcsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlhfX0FVQVJUMF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1RYX19BVUFSVDBfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9DVFNfX0FVQVJUMF9DVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SVFNfX0FVQVJUMF9SVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SWF9fQVVBUlQxX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfVFhfX0FVQVJUMV9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX0NUU19fQVVBUlQxX0NUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JUU19fQVVBUlQxX1JUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JYX19BVUFSVDJfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9UWF9fQVVBUlQyX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfQ1RTX19BVUFSVDJfQ1RTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlRTX19BVUFSVDJfUlRTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlhfX0FVQVJUM19SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1RYX19BVUFSVDNfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19DVFNfX0FVQVJUM19DVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SVFNfX0FVQVJUM19SVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1BXTTBfX1BXTV8wCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfUFdNMV9fUFdNXzEJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9QV00yX19QV01fMgkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX01DTEtfX1NBSUYwX01DTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0xSQ0xLX19TQUlGMF9MUkNMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9CSVRDTEtfX1NBSUYwX0JJVENMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9TREFUQTBfX1NBSUYwX1NEQVRBMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NDTF9fSTJDMF9TQ0wJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0RBX19JMkMwX1NEQQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjFfU0RBVEEwX19TQUlGMV9TREFUQTAJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1BESUZfX1NQRElGX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9QV00zX19QV01fMwkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1BXTTRfX1BXTV80CQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JFU0VUX19MQ0RfUkVTRVQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDMwLCBQQURfTVVYU0VMXzApCisKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURDX19FTkVUMF9NREMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01ESU9fX0VORVQwX01ESU8JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0VOX19FTkVUMF9SWF9FTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQwX19FTkVUMF9SWEQwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQxX19FTkVUMF9SWEQxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWF9DTEtfX0VORVQwX1RYX0NMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWF9FTl9fRU5FVDBfVFhfRU4JCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMF9fRU5FVDBfVFhEMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMV9fRU5FVDBfVFhEMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMl9fRU5FVDBfUlhEMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEM19fRU5FVDBfUlhEMwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMl9fRU5FVDBfVFhEMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEM19fRU5FVDBfVFhEMwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfQ0xLX19FTkVUMF9SWF9DTEsJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ09MX19FTkVUMF9DT0wJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NSU19fRU5FVDBfQ1JTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUX0NMS19fQ0xLQ1RSTF9FTkVUCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9KVEFHX1JUQ0tfX0pUQUdfUlRDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMjAsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDI4X1BBRF9FTUlfRDAwX19FTUlfREFUQTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDFfX0VNSV9EQVRBMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwMl9fRU1JX0RBVEEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDAzX19FTUlfREFUQTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDRfX0VNSV9EQVRBNAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwNV9fRU1JX0RBVEE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDA2X19FTUlfREFUQTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDdfX0VNSV9EQVRBNwkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwOF9fRU1JX0RBVEE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDA5X19FTUlfREFUQTkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMTBfX0VNSV9EQVRBMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDEwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMTFfX0VNSV9EQVRBMTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDExLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMTJfX0VNSV9EQVRBMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMTNfX0VNSV9EQVRBMTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDEzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMTRfX0VNSV9EQVRBMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMTVfX0VNSV9EQVRBMTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDE1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9PRFQwX19FTUlfT0RUMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0RRTTBfX0VNSV9EUU0wCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfT0RUMV9fRU1JX09EVDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EUU0xX19FTUlfRFFNMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0REUl9PUEVOX0ZCX19FTUlfRERSX09QRU5fRkVFREJBQ0sJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAyMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQ0xLX19FTUlfQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAyMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRFFTMF9fRU1JX0RRUzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDIyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EUVMxX19FTUlfRFFTMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMjMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0REUl9PUEVOX19FTUlfRERSX09QRU4JCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMjYsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDI4X1BBRF9FTUlfQTAwX19FTUlfQUREUjAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDFfX0VNSV9BRERSMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwMl9fRU1JX0FERFIyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTAzX19FTUlfQUREUjMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDRfX0VNSV9BRERSNAkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwNV9fRU1JX0FERFI1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTA2X19FTUlfQUREUjYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDdfX0VNSV9BRERSNwkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwOF9fRU1JX0FERFI4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTA5X19FTUlfQUREUjkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMTBfX0VNSV9BRERSMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDEwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMTFfX0VNSV9BRERSMTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDExLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMTJfX0VNSV9BRERSMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMTNfX0VNSV9BRERSMTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDEzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMTRfX0VNSV9BRERSMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9CQTBfX0VNSV9CQTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDE2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9CQTFfX0VNSV9CQTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9CQTJfX0VNSV9CQTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9DQVNOX19FTUlfQ0FTTgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX1JBU05fX0VNSV9SQVNOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAyMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfV0VOX19FTUlfV0VOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAyMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQ0UwTl9fRU1JX0NFME4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDIyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9DRTFOX19FTUlfQ0UxTgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMjMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0NLRV9fRU1JX0NLRQkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMjQsIFBBRF9NVVhTRUxfMCkKKworLyogTVVYU0VMXzEgKi8KKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDBfX1NTUDFfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAxX19TU1AxX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMl9fU1NQMV9EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDNfX1NTUDFfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA0X19TU1AxX0Q0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNV9fU1NQMV9ENQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDZfX1NTUDFfRDYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA3X19TU1AxX0Q3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFME5fX1NTUDNfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UxTl9fU1NQM19EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTJOX19DQU4xX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFM05fX0NBTjFfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMF9fU1NQMV9DQVJEX0RFVEVDVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTFfX1NTUDFfQ01ECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTJfX0NBTjBfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZM19fQ0FOMF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRE5fX1NTUDNfU0NLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1dSTl9fU1NQMV9TQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQUxFX19TU1AzX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NMRV9fU1NQM19EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRVNFVE5fX1NTUDNfQ01ECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyOCwgUEFEX01VWFNFTF8xKQorCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDNfX0VUTV9EQTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDRfX0VUTV9EQTkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDhfX0VUTV9EQTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDlfX0VUTV9EQTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA5LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjBfX0VORVQxXzE1ODhfRVZFTlQyX09VVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIxX19FTkVUMV8xNTg4X0VWRU5UMl9JTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIyX19FTkVUMV8xNTg4X0VWRU5UM19PVVQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyM19fRU5FVDFfMTU4OF9FVkVOVDNfSU4JCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JEX0VfX0xDRF9WU1lOQwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1dSX1JXTl9fTENEX0hTWU5DCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUlNfX0xDRF9ET1RDTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9DU19fTENEX0VOQUJMRQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1ZTWU5DX19TQUlGMV9TREFUQTAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0hTWU5DX19TQUlGMV9TREFUQTEJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0RPVENMS19fU0FJRjFfTUNMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzAsIFBBRF9NVVhTRUxfMSkKKworI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE0X19TU1AyX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE1X19TU1AyX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE2X19TU1AyX0NNRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBN19fU1NQMl9TQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfU0NLX19TU1AyX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0NNRF9fU1NQMl9EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBMF9fU1NQMl9ENgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBM19fU1NQMl9ENwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TQ0tfX0FVQVJUMl9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NT1NJX19BVUFSVDJfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTUlTT19fQVVBUlQzX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMF9fQVVBUlQzX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMV9fU1NQMl9EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzJfX1NTUDJfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU0NLX19BVUFSVDRfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTU9TSV9fQVVBUlQ0X1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01JU09fX0FVQVJUNF9SVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU1MwX19BVUFSVDRfQ1RTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNywgUEFEX01VWFNFTF8xKQorCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SWF9fSTJDMF9TQ0wJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9UWF9fSTJDMF9TREEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9DVFNfX0FVQVJUNF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JUU19fQVVBUlQ0X1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlhfX1NTUDJfQ0FSRF9ERVRFQ1QJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1RYX19TU1AzX0NBUkRfREVURUNUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9DVFNfX1VTQjBfT1ZFUkNVUlJFTlQJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JUU19fVVNCMF9JRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JYX19TU1AzX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfVFhfX1NTUDNfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA5LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9DVFNfX0kyQzFfU0NMCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlRTX19JMkMxX1NEQQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JYX19DQU4wX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfVFhfX0NBTjBfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19DVFNfX0NBTjFfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SVFNfX0NBTjFfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1BXTTBfX0kyQzFfU0NMCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfUFdNMV9fSTJDMV9TREEJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9QV00yX19VU0IwX0lECQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTUNMS19fUFdNXzMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0xSQ0xLX19QV01fNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfQklUQ0xLX19QV01fNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfU0RBVEEwX19QV01fNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TQ0xfX1RJTVJPVF9ST1RBUllBCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0RBX19USU1ST1RfUk9UQVJZQgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMV9TREFUQTBfX1BXTV83CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUkVTRVRfX0xDRF9WU1lOQwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMzAsIFBBRF9NVVhTRUxfMSkKKworI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRENfX0dQTUlfQ0U0TgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURJT19fR1BNSV9DRTVOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9FTl9fR1BNSV9DRTZOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQwX19HUE1JX0NFN04JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDFfX0dQTUlfUkVBRFk0CQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYX0NMS19fSFNBRENfVFJJR0dFUgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWF9FTl9fR1BNSV9SRUFEWTUJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMF9fR1BNSV9SRUFEWTYJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMV9fR1BNSV9SRUFEWTcJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMl9fRU5FVDFfUlhEMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEM19fRU5FVDFfUlhEMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMl9fRU5FVDFfVFhEMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEM19fRU5FVDFfVFhEMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfQ0xLX19FTkVUMF9SWF9FUgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DT0xfX0VORVQxX1RYX0VOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DUlNfX0VORVQxX1JYX0VOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNSwgUEFEX01VWFNFTF8xKQorCisvKiBNVVhTRUxfMiAqLworI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFMk5fX0VORVQwX1JYX0VSCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFM05fX1NBSUYxX01DTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMF9fVVNCMF9JRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkyX19FTkVUMF9UWF9FUgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkzX19IU0FEQ19UUklHR0VSCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQUxFX19TU1AzX0Q0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NMRV9fU1NQM19ENQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjcsIFBBRF9NVVhTRUxfMikKKworI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAwX19FVE1fREEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAxX19FVE1fREExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAyX19FVE1fREEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAzX19FVE1fREEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA0X19FVE1fREE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA1X19FVE1fREE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA2X19FVE1fREE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA3X19FVE1fREE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA4X19FVE1fREE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA5X19FVE1fREE5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEwX19FVE1fREExMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMV9fRVRNX0RBMTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDExLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTJfX0VUTV9EQTEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEzX19FVE1fREExMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNF9fRVRNX0RBMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTVfX0VUTV9EQTE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE2X19FVE1fREE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE3X19FVE1fREE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE4X19FVE1fREE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE5X19FVE1fREE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIwX19FVE1fREEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIxX19FVE1fREEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIyX19FVE1fREExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIzX19FVE1fREEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUkRfRV9fRVRNX1RDVEwJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9XUl9SV05fX0VUTV9UQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfSFNZTkNfX0VUTV9UQ1RMCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRE9UQ0xLX19FVE1fVENMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzAsIFBBRF9NVVhTRUxfMikKKworI2RlZmluZSBNWDI4X1BBRF9TU1AxX1NDS19fRU5FVDBfMTU4OF9FVkVOVDJfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9DTURfX0VORVQwXzE1ODhfRVZFTlQyX0lOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTBfX0VORVQwXzE1ODhfRVZFTlQzX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTNfX0VORVQwXzE1ODhfRVZFTlQzX0lOCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TQ0tfX1NBSUYwX1NEQVRBMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NT1NJX19TQUlGMF9TREFUQTIJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTcsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NSVNPX19TQUlGMV9TREFUQTEJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzBfX1NBSUYxX1NEQVRBMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzFfX1VTQjFfT1ZFUkNVUlJFTlQJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzJfX1VTQjBfT1ZFUkNVUlJFTlQJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TQ0tfX0VORVQxXzE1ODhfRVZFTlQwX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTU9TSV9fRU5FVDFfMTU4OF9FVkVOVDBfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01JU09fX0VORVQxXzE1ODhfRVZFTlQxX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU1MwX19FTkVUMV8xNTg4X0VWRU5UMV9JTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNywgUEFEX01VWFNFTF8yKQorCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SWF9fRFVBUlRfQ1RTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfVFhfX0RVQVJUX1JUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX0NUU19fRFVBUlRfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SVFNfX0RVQVJUX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlhfX1BXTV8wCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfVFhfX1BXTV8xCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfQ1RTX19USU1ST1RfUk9UQVJZQQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlRTX19USU1ST1RfUk9UQVJZQgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlhfX1NTUDNfRDQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA4LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9UWF9fU1NQM19ENQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX0NUU19fU0FJRjFfQklUQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SVFNfX1NBSUYxX0xSQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDExLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SWF9fRU5FVDBfMTU4OF9FVkVOVDBfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1RYX19FTkVUMF8xNTg4X0VWRU5UMF9JTglNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19DVFNfX0VORVQwXzE1ODhfRVZFTlQxX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SVFNfX0VORVQwXzE1ODhfRVZFTlQxX0lOCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfUFdNMF9fRFVBUlRfUlgJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9QV00xX19EVUFSVF9UWAkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE3LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1BXTTJfX1VTQjFfT1ZFUkNVUlJFTlQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE4LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX01DTEtfX0FVQVJUNF9DVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0xSQ0xLX19BVUFSVDRfUlRTCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIxLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0JJVENMS19fQVVBUlQ0X1JYCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX1NEQVRBMF9fQVVBUlQ0X1RYCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0NMX19EVUFSVF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TREFfX0RVQVJUX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMV9TREFUQTBfX1NBSUYwX1NEQVRBMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TUERJRl9fRU5FVDFfUlhfRVIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI3LCBQQURfTVVYU0VMXzIpCisKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURDX19TQUlGMF9TREFUQTEJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURJT19fU0FJRjBfU0RBVEEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAxLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0VOX19TQUlGMV9TREFUQTEJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMF9fU0FJRjFfU0RBVEEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYX0NMS19fRU5FVDBfMTU4OF9FVkVOVDJfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMl9fRU5FVDBfMTU4OF9FVkVOVDBfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEM19fRU5FVDBfMTU4OF9FVkVOVDBfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQyX19FTkVUMF8xNTg4X0VWRU5UMV9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQzX19FTkVUMF8xNTg4X0VWRU5UMV9JTglNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0NMS19fRU5FVDBfMTU4OF9FVkVOVDJfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DT0xfX0VORVQwXzE1ODhfRVZFTlQzX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NSU19fRU5FVDBfMTU4OF9FVkVOVDNfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNSwgUEFEX01VWFNFTF8yKQorCisvKiBNVVhTRUxfR1BJTyAqLworI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMF9fR1BJT18wXzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAxX19HUElPXzBfMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDJfX0dQSU9fMF8yCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwM19fR1BJT18wXzMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA0X19HUElPXzBfNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDVfX0dQSU9fMF81CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNl9fR1BJT18wXzYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA3X19HUElPXzBfNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTBOX19HUElPXzBfMTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UxTl9fR1BJT18wXzE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFMk5fX0dQSU9fMF8xOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTNOX19HUElPXzBfMTkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMF9fR1BJT18wXzIwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTFfX0dQSU9fMF8yMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkyX19HUElPXzBfMjIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZM19fR1BJT18wXzIzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JETl9fR1BJT18wXzI0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1dSTl9fR1BJT18wXzI1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0FMRV9fR1BJT18wXzI2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NMRV9fR1BJT18wXzI3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JFU0VUTl9fR1BJT18wXzI4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyOCwgUEFEX01VWFNFTF9HUElPKQorCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDBfX0dQSU9fMV8wCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAxX19HUElPXzFfMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMl9fR1BJT18xXzIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDNfX0dQSU9fMV8zCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA0X19HUElPXzFfNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNV9fR1BJT18xXzUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDZfX0dQSU9fMV82CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA3X19HUElPXzFfNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOF9fR1BJT18xXzgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDlfX0dQSU9fMV85CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEwX19HUElPXzFfMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTFfX0dQSU9fMV8xMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMl9fR1BJT18xXzEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEzX19HUElPXzFfMTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTRfX0dQSU9fMV8xNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNV9fR1BJT18xXzE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE2X19HUElPXzFfMTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTdfX0dQSU9fMV8xNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxOF9fR1BJT18xXzE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE5X19HUElPXzFfMTkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjBfX0dQSU9fMV8yMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMV9fR1BJT18xXzIxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIyX19HUElPXzFfMjIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjNfX0dQSU9fMV8yMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JEX0VfX0dQSU9fMV8yNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX1dSX1JXTl9fR1BJT18xXzI1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUlNfX0dQSU9fMV8yNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0NTX19HUElPXzFfMjcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9WU1lOQ19fR1BJT18xXzI4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfSFNZTkNfX0dQSU9fMV8yOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0RPVENMS19fR1BJT18xXzMwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAzMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRU5BQkxFX19HUElPXzFfMzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMxLCBQQURfTVVYU0VMX0dQSU8pCisKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBMF9fR1BJT18yXzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTFfX0dQSU9fMl8xCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEEyX19HUElPXzJfMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBM19fR1BJT18yXzMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTRfX0dQSU9fMl80CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE1X19HUElPXzJfNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNl9fR1BJT18yXzYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTdfX0dQSU9fMl83CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0NNRF9fR1BJT18yXzgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREVURUNUX19HUElPXzJfOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9TQ0tfX0dQSU9fMl8xMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9TQ0tfX0dQSU9fMl8xMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9DTURfX0dQSU9fMl8xMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBMF9fR1BJT18yXzE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEzX19HUElPXzJfMTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU0NLX19HUElPXzJfMTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTU9TSV9fR1BJT18yXzE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01JU09fX0dQSU9fMl8xOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzBfX0dQSU9fMl8xOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzFfX0dQSU9fMl8yMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzJfX0dQSU9fMl8yMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TQ0tfX0dQSU9fMl8yNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NT1NJX19HUElPXzJfMjUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTUlTT19fR1BJT18yXzI2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NTMF9fR1BJT18yXzI3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNywgUEFEX01VWFNFTF9HUElPKQorCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SWF9fR1BJT18zXzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9UWF9fR1BJT18zXzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9DVFNfX0dQSU9fM18yCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlRTX19HUElPXzNfMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JYX19HUElPXzNfNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1RYX19HUElPXzNfNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX0NUU19fR1BJT18zXzYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SVFNfX0dQSU9fM183CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlhfX0dQSU9fM184CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfVFhfX0dQSU9fM185CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfQ1RTX19HUElPXzNfMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SVFNfX0dQSU9fM18xMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JYX19HUElPXzNfMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19UWF9fR1BJT18zXzEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfQ1RTX19HUElPXzNfMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SVFNfX0dQSU9fM18xNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfUFdNMF9fR1BJT18zXzE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9QV00xX19HUElPXzNfMTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1BXTTJfX0dQSU9fM18xOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTUNMS19fR1BJT18zXzIwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9MUkNMS19fR1BJT18zXzIxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9CSVRDTEtfX0dQSU9fM18yMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9TREFUQTBfX0dQSU9fM18yMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NDTF9fR1BJT18zXzI0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NEQV9fR1BJT18zXzI1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMV9TREFUQTBfX0dQSU9fM18yNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TUERJRl9fR1BJT18zXzI3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9QV00zX19HUElPXzNfMjgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1BXTTRfX0dQSU9fM18yOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JFU0VUX19HUElPXzNfMzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDMwLCBQQURfTVVYU0VMX0dQSU8pCisKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURDX19HUElPXzRfMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURJT19fR1BJT180XzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0VOX19HUElPXzRfMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMF9fR1BJT180XzMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDFfX0dQSU9fNF80CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWF9DTEtfX0dQSU9fNF81CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWF9FTl9fR1BJT180XzYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDBfX0dQSU9fNF83CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQxX19HUElPXzRfOAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMl9fR1BJT180XzkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDNfX0dQSU9fNF8xMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMl9fR1BJT180XzExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQzX19HUElPXzRfMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0NMS19fR1BJT180XzEzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NPTF9fR1BJT180XzE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DUlNfX0dQSU9fNF8xNQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVF9DTEtfX0dQSU9fNF8xNgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfSlRBR19SVENLX19HUElPXzRfMjAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDIwLCBQQURfTVVYU0VMX0dQSU8pCisKKyNlbmRpZiAvKiBfX01BQ0hfSU9NVVhfTVgyOF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9pb211eC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2lvbXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiZGY1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9pb211eC5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEphbiBXZWl0emVsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJILAorICoJCQk8YXJtbGludXhAcGh5dGVjLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVhTX0lPTVVYX0hfXworI2RlZmluZSBfX01BQ0hfTVhTX0lPTVVYX0hfXworCisvKgorICogSU9NVVgvUEFEIEJpdCBmaWVsZCBkZWZpbml0aW9ucworICoKKyAqIFBBRF9CQU5LOgkJIDAuLjIJKDMpCisgKiBQQURfUElOOgkJIDMuLjcJKDUpCisgKiBQQURfTVVYU0VMOgkJIDguLjkJKDIpCisgKiBQQURfTUE6CQkxMC4uMTEJKDIpCisgKiBQQURfTUFfVkFMSUQ6CTEyCSgxKQorICogUEFEX1ZPTDoJCTEzCSgxKQorICogUEFEX1ZPTF9WQUxJRDoJMTQJKDEpCisgKiBQQURfUFVMTDoJCTE1CSgxKQorICogUEFEX1BVTExfVkFMSUQ6CTE2CSgxKQorICogUkVTRVJWRUQ6CQkxNy4uMzEJKDE1KQorICovCit0eXBlZGVmIHUzMiBpb211eF9jZmdfdDsKKworI2RlZmluZSBNWFNfUEFEX0JBTktfU0hJRlQJMAorI2RlZmluZSBNWFNfUEFEX0JBTktfTUFTSwkoKGlvbXV4X2NmZ190KTB4NyA8PCBNWFNfUEFEX0JBTktfU0hJRlQpCisjZGVmaW5lIE1YU19QQURfUElOX1NISUZUCTMKKyNkZWZpbmUgTVhTX1BBRF9QSU5fTUFTSwkoKGlvbXV4X2NmZ190KTB4MWYgPDwgTVhTX1BBRF9QSU5fU0hJRlQpCisjZGVmaW5lIE1YU19QQURfTVVYU0VMX1NISUZUCTgKKyNkZWZpbmUgTVhTX1BBRF9NVVhTRUxfTUFTSwkoKGlvbXV4X2NmZ190KTB4MyA8PCBNWFNfUEFEX01VWFNFTF9TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9NQV9TSElGVAkxMAorI2RlZmluZSBNWFNfUEFEX01BX01BU0sJCSgoaW9tdXhfY2ZnX3QpMHgzIDw8IE1YU19QQURfTUFfU0hJRlQpCisjZGVmaW5lIE1YU19QQURfTUFfVkFMSURfU0hJRlQJMTIKKyNkZWZpbmUgTVhTX1BBRF9NQV9WQUxJRF9NQVNLCSgoaW9tdXhfY2ZnX3QpMHgxIDw8IE1YU19QQURfTUFfVkFMSURfU0hJRlQpCisjZGVmaW5lIE1YU19QQURfVk9MX1NISUZUCTEzCisjZGVmaW5lIE1YU19QQURfVk9MX01BU0sJKChpb211eF9jZmdfdCkweDEgPDwgTVhTX1BBRF9WT0xfU0hJRlQpCisjZGVmaW5lIE1YU19QQURfVk9MX1ZBTElEX1NISUZUCTE0CisjZGVmaW5lIE1YU19QQURfVk9MX1ZBTElEX01BU0sJKChpb211eF9jZmdfdCkweDEgPDwgTVhTX1BBRF9WT0xfVkFMSURfU0hJRlQpCisjZGVmaW5lIE1YU19QQURfUFVMTF9TSElGVAkxNQorI2RlZmluZSBNWFNfUEFEX1BVTExfTUFTSwkoKGlvbXV4X2NmZ190KTB4MSA8PCBNWFNfUEFEX1BVTExfU0hJRlQpCisjZGVmaW5lIE1YU19QQURfUFVMTF9WQUxJRF9TSElGVCAxNgorI2RlZmluZSBNWFNfUEFEX1BVTExfVkFMSURfTUFTSwkoKGlvbXV4X2NmZ190KTB4MSA8PCBNWFNfUEFEX1BVTExfVkFMSURfU0hJRlQpCisKKyNkZWZpbmUgUEFEX01VWFNFTF8wCQkwCisjZGVmaW5lIFBBRF9NVVhTRUxfMQkJMQorI2RlZmluZSBQQURfTVVYU0VMXzIJCTIKKyNkZWZpbmUgUEFEX01VWFNFTF9HUElPCQkzCisKKyNkZWZpbmUgUEFEXzRNQQkJCTAKKyNkZWZpbmUgUEFEXzhNQQkJCTEKKyNkZWZpbmUgUEFEXzEyTUEJCTIKKyNkZWZpbmUgUEFEXzE2TUEJCTMKKworI2RlZmluZSBQQURfMVY4CQkJMAorI2RlZmluZSBQQURfM1YzCQkJMQorCisjZGVmaW5lIFBBRF9OT1BVTEwJCTAKKyNkZWZpbmUgUEFEX1BVTExVUAkJMQorCisjZGVmaW5lIE1YU19QQURfNE1BCSgoUEFEXzRNQSA8PCBNWFNfUEFEX01BX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9NQV9WQUxJRF9NQVNLKQorI2RlZmluZSBNWFNfUEFEXzhNQQkoKFBBRF84TUEgPDwgTVhTX1BBRF9NQV9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfTUFfVkFMSURfTUFTSykKKyNkZWZpbmUgTVhTX1BBRF8xMk1BCSgoUEFEXzEyTUEgPDwgTVhTX1BBRF9NQV9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfTUFfVkFMSURfTUFTSykKKyNkZWZpbmUgTVhTX1BBRF8xNk1BCSgoUEFEXzE2TUEgPDwgTVhTX1BBRF9NQV9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfTUFfVkFMSURfTUFTSykKKworI2RlZmluZSBNWFNfUEFEXzFWOAkoKFBBRF8xVjggPDwgTVhTX1BBRF9WT0xfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX1ZPTF9WQUxJRF9NQVNLKQorI2RlZmluZSBNWFNfUEFEXzNWMwkoKFBBRF8zVjMgPDwgTVhTX1BBRF9WT0xfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX1ZPTF9WQUxJRF9NQVNLKQorCisjZGVmaW5lIE1YU19QQURfTk9QVUxMCSgoUEFEX05PUFVMTCA8PCBNWFNfUEFEX1BVTExfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX1BVTExfVkFMSURfTUFTSykKKyNkZWZpbmUgTVhTX1BBRF9QVUxMVVAJKChQQURfUFVMTFVQIDw8IE1YU19QQURfUFVMTF9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfUFVMTF9WQUxJRF9NQVNLKQorCisvKiBnZW5lcmljIHBhZCBjb250cm9sIHVzZWQgaW4gbW9zdCBjYXNlcyAqLworI2RlZmluZSBNWFNfUEFEX0NUUkwJKE1YU19QQURfNE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX05PUFVMTCkKKworI2RlZmluZSBNWFNfSU9NVVhfUEFEKF9iYW5rLCBfcGluLCBfbXV4c2VsLCBfbWEsIF92b2wsIF9wdWxsKQkJXAorCQkoKChpb211eF9jZmdfdCkoX2JhbmspIDw8IE1YU19QQURfQkFOS19TSElGVCkgfAkJXAorCQkoKGlvbXV4X2NmZ190KShfcGluKSA8PCBNWFNfUEFEX1BJTl9TSElGVCkgfAkJXAorCQkoKGlvbXV4X2NmZ190KShfbXV4c2VsKSA8PCBNWFNfUEFEX01VWFNFTF9TSElGVCkgfAlcCisJCSgoaW9tdXhfY2ZnX3QpKF9tYSkgPDwgTVhTX1BBRF9NQV9TSElGVCkgfAkJXAorCQkoKGlvbXV4X2NmZ190KShfdm9sKSA8PCBNWFNfUEFEX1ZPTF9TSElGVCkgfAkJXAorCQkoKGlvbXV4X2NmZ190KShfcHVsbCkgPDwgTVhTX1BBRF9QVUxMX1NISUZUKSkKKworLyoKKyAqIEEgcGFkIGJlY29tZXMgbmFrZWQsIHdoZW4gbm9uZSBvZiBtQSwgdm9sIG9yIHB1bGwKKyAqIHZhbGlkaXR5IGJpdHMgaXMgc2V0LgorICovCisjZGVmaW5lIE1YU19JT01VWF9QQURfTkFLRUQoX2JhbmssIF9waW4sIF9tdXhzZWwpIFwKKwkJTVhTX0lPTVVYX1BBRChfYmFuaywgX3BpbiwgX211eHNlbCwgMCwgMCwgMCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX0JBTksoaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9CQU5LX01BU0spID4+IE1YU19QQURfQkFOS19TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX1BJTihpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX1BJTl9NQVNLKSA+PiBNWFNfUEFEX1BJTl9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX01VWFNFTChpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX01VWFNFTF9NQVNLKSA+PiBNWFNfUEFEX01VWFNFTF9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX01BKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfTUFfTUFTSykgPj4gTVhTX1BBRF9NQV9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX01BX1ZBTElEKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfTUFfVkFMSURfTUFTSykgPj4gTVhTX1BBRF9NQV9WQUxJRF9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX1ZPTChpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX1ZPTF9NQVNLKSA+PiBNWFNfUEFEX1ZPTF9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX1ZPTF9WQUxJRChpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX1ZPTF9WQUxJRF9NQVNLKSA+PiBNWFNfUEFEX1ZPTF9WQUxJRF9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX1BVTEwoaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9QVUxMX01BU0spID4+IE1YU19QQURfUFVMTF9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgUEFEX1BVTExfVkFMSUQoaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9QVUxMX1ZBTElEX01BU0spID4+IE1YU19QQURfUFVMTF9WQUxJRF9TSElGVDsKK30KKworLyoKKyAqIGNvbmZpZ3VyZXMgYSBzaW5nbGUgcGFkIGluIHRoZSBpb211eGVyCisgKi8KK2ludCBteHNfaW9tdXhfc2V0dXBfcGFkKGlvbXV4X2NmZ190IHBhZCk7CisKKy8qCisgKiBjb25maWd1cmVzIG11bHRpcGxlIHBhZHMKKyAqIGNvbnZlbmllbnQgd2F5IHRvIGNhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uIHdpdGggdGFibGVzCisgKi8KK2ludCBteHNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGFkcyhjb25zdCBpb211eF9jZmdfdCAqcGFkX2xpc3QsIHVuc2lnbmVkIGNvdW50KTsKKworI2VuZGlmIC8qIF9fTUFDSF9NWFNfSU9NVVhfSF9fKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWFwYmguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWFwYmguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZhMWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtYXBiaC5oCkBAIC0wLDAgKzEsNDY2IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBBUEJIIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19SRUdTX0FQQkhfSF9fCisjZGVmaW5lIF9fUkVHU19BUEJIX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X2FwYmhfcmVncyB7CisJbXgyOF9yZWcoaHdfYXBiaF9jdHJsMCkKKwlteDI4X3JlZyhod19hcGJoX2N0cmwxKQorCW14MjhfcmVnKGh3X2FwYmhfY3RybDIpCisJbXgyOF9yZWcoaHdfYXBiaF9jaGFubmVsX2N0cmwpCisJbXgyOF9yZWcoaHdfYXBiaF9kZXZzZWwpCisJbXgyOF9yZWcoaHdfYXBiaF9kbWFfYnVyc3Rfc2l6ZSkKKwlteDI4X3JlZyhod19hcGJoX2RlYnVnKQorCisJdWludDMyX3QJcmVzZXJ2ZWRbMzZdOworCisJdW5pb24geworCXN0cnVjdCB7CisJCW14MjhfcmVnKGh3X2FwYmhfY2hfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2hfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2hfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoX2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaF9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoX2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaF9kZWJ1ZzIpCisJfSBjaFsxNl07CisJc3RydWN0IHsKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDBfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gwX254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMF9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gwX2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDBfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDBfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoMF9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxX2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMV9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDFfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoMV9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxX3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxX2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDFfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMl9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDJfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gyX2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDJfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMl9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoMl9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gyX2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDNfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gzX254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoM19jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gzX2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDNfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDNfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoM19kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g0X2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNF9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDRfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoNF9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g0X3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g0X2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDRfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNV9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDVfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g1X2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDVfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNV9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoNV9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g1X2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDZfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g2X254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNl9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g2X2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDZfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDZfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoNl9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g3X2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoN19ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDdfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoN19iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g3X3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g3X2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDdfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoOF9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDhfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g4X2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDhfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoOF9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoOF9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g4X2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDlfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g5X254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoOV9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g5X2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDlfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDlfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoOV9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMF9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEwX254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTBfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTBfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTBfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEwX2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEwX2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDExX2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTFfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMV9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMV9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMV9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTFfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTFfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTJfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMl9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEyX2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEyX2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEyX3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMl9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMl9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxM19jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEzX254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTNfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTNfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTNfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEzX2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEzX2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE0X2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTRfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNF9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNF9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNF9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTRfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTRfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTVfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNV9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE1X2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE1X2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE1X3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNV9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNV9kZWJ1ZzIpCisJfTsKKwl9OworCW14MjhfcmVnKGh3X2FwYmhfdmVyc2lvbikKK307CisjZW5kaWYKKworI2RlZmluZQlBUEJIX0NUUkwwX1NGVFJTVAkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFCQkJCSgxIDw8IDMwKQorI2RlZmluZQlBUEJIX0NUUkwwX0FIQl9CVVJTVDhfRU4JCQkoMSA8PCAyOSkKKyNkZWZpbmUJQVBCSF9DVFJMMF9BUEJfQlVSU1RfRU4JCQkJKDEgPDwgMjgpCisjZGVmaW5lCUFQQkhfQ1RSTDBfUlNWRDBfTUFTSwkJCQkoMHhmZmYgPDwgMTYpCisjZGVmaW5lCUFQQkhfQ1RSTDBfUlNWRDBfT0ZGU0VUCQkJCTE2CisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfT0ZGU0VUCQkwCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX1NTUDAJCQkweDAwMDEKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfU1NQMQkJCTB4MDAwMgorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9TU1AyCQkJMHgwMDA0CisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX1NTUDMJCQkweDAwMDgKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfTkFORDAJCTB4MDAxMAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9OQU5EMQkJMHgwMDIwCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX05BTkQyCQkweDAwNDAKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfTkFORDMJCTB4MDA4MAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9OQU5ENAkJMHgwMTAwCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX05BTkQ1CQkweDAyMDAKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfTkFORDYJCTB4MDQwMAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9OQU5ENwkJMHgwODAwCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX0hTQURDCQkweDEwMDAKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfTENESUYJCTB4MjAwMAorCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxNV9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAzMSkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDE0X0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDMwKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMTNfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMjkpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxMl9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAyOCkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDExX0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDI3KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMTBfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMjYpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g5X0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDI1KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIOF9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAyNCkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDdfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMjMpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g2X0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDIyKQorI2RlZmluZQlBUEJIX0NUUkwxX0NINV9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAyMSkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDRfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMjApCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gzX0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDE5KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMl9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAxOCkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDFfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMTcpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gwX0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDE2KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIX0NNRENNUExUX0lSUV9FTl9PRkZTRVQJCTE2CisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0hfQ01EQ01QTFRfSVJRX0VOX01BU0sJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxNV9DTURDTVBMVF9JUlEJCQkoMSA8PCAxNSkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDE0X0NNRENNUExUX0lSUQkJCSgxIDw8IDE0KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMTNfQ01EQ01QTFRfSVJRCQkJKDEgPDwgMTMpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxMl9DTURDTVBMVF9JUlEJCQkoMSA8PCAxMikKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDExX0NNRENNUExUX0lSUQkJCSgxIDw8IDExKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMTBfQ01EQ01QTFRfSVJRCQkJKDEgPDwgMTApCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g5X0NNRENNUExUX0lSUQkJCSgxIDw8IDkpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g4X0NNRENNUExUX0lSUQkJCSgxIDw8IDgpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g3X0NNRENNUExUX0lSUQkJCSgxIDw8IDcpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g2X0NNRENNUExUX0lSUQkJCSgxIDw8IDYpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g1X0NNRENNUExUX0lSUQkJCSgxIDw8IDUpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g0X0NNRENNUExUX0lSUQkJCSgxIDw8IDQpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gzX0NNRENNUExUX0lSUQkJCSgxIDw8IDMpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gyX0NNRENNUExUX0lSUQkJCSgxIDw8IDIpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxX0NNRENNUExUX0lSUQkJCSgxIDw8IDEpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gwX0NNRENNUExUX0lSUQkJCSgxIDw8IDApCisKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDE1X0VSUk9SX1NUQVRVUwkJCSgxIDw8IDMxKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTRfRVJST1JfU1RBVFVTCQkJKDEgPDwgMzApCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxM19FUlJPUl9TVEFUVVMJCQkoMSA8PCAyOSkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDEyX0VSUk9SX1NUQVRVUwkJCSgxIDw8IDI4KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTFfRVJST1JfU1RBVFVTCQkJKDEgPDwgMjcpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxMF9FUlJPUl9TVEFUVVMJCQkoMSA8PCAyNikKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDlfRVJST1JfU1RBVFVTCQkJKDEgPDwgMjUpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g4X0VSUk9SX1NUQVRVUwkJCSgxIDw8IDI0KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIN19FUlJPUl9TVEFUVVMJCQkoMSA8PCAyMykKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDZfRVJST1JfU1RBVFVTCQkJKDEgPDwgMjIpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g1X0VSUk9SX1NUQVRVUwkJCSgxIDw8IDIxKQorI2RlZmluZQlBUEJIX0NUUkwyX0NINF9FUlJPUl9TVEFUVVMJCQkoMSA8PCAyMCkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDNfRVJST1JfU1RBVFVTCQkJKDEgPDwgMTkpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gyX0VSUk9SX1NUQVRVUwkJCSgxIDw8IDE4KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMV9FUlJPUl9TVEFUVVMJCQkoMSA8PCAxNykKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDBfRVJST1JfU1RBVFVTCQkJKDEgPDwgMTYpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxNV9FUlJPUl9JUlEJCQkoMSA8PCAxNSkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDE0X0VSUk9SX0lSUQkJCSgxIDw8IDE0KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTNfRVJST1JfSVJRCQkJKDEgPDwgMTMpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxMl9FUlJPUl9JUlEJCQkoMSA8PCAxMikKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDExX0VSUk9SX0lSUQkJCSgxIDw8IDExKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTBfRVJST1JfSVJRCQkJKDEgPDwgMTApCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g5X0VSUk9SX0lSUQkJCSgxIDw8IDkpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g4X0VSUk9SX0lSUQkJCSgxIDw8IDgpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g3X0VSUk9SX0lSUQkJCSgxIDw8IDcpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g2X0VSUk9SX0lSUQkJCSgxIDw8IDYpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g1X0VSUk9SX0lSUQkJCSgxIDw8IDUpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g0X0VSUk9SX0lSUQkJCSgxIDw8IDQpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gzX0VSUk9SX0lSUQkJCSgxIDw8IDMpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gyX0VSUk9SX0lSUQkJCSgxIDw8IDIpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxX0VSUk9SX0lSUQkJCSgxIDw8IDEpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gwX0VSUk9SX0lSUQkJCSgxIDw8IDApCisKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9NQVNLCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX09GRlNFVAkJMTYKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9TU1AwCQkoMHgwMDAxIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX1NTUDEJCSgweDAwMDIgPDwgMTYpCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX1JFU0VUX0NIQU5ORUxfU1NQMgkJKDB4MDAwNCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9TU1AzCQkoMHgwMDA4IDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQwCQkoMHgwMDEwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQxCQkoMHgwMDIwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQyCQkoMHgwMDQwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQzCQkoMHgwMDgwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQ0CQkoMHgwMTAwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQ1CQkoMHgwMjAwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQ2CQkoMHgwNDAwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX05BTkQ3CQkoMHgwODAwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX0hTQURDCQkoMHgxMDAwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX0xDRElGCQkoMHgyMDAwIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9NQVNLCQkweGZmZmYKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfT0ZGU0VUCQkwCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX1NTUDAJCTB4MDAwMQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9TU1AxCQkweDAwMDIKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfU1NQMgkJMHgwMDA0CisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX1NTUDMJCTB4MDAwOAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9OQU5EMAkJMHgwMDEwCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX05BTkQxCQkweDAwMjAKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfTkFORDIJCTB4MDA0MAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9OQU5EMwkJMHgwMDgwCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX05BTkQ0CQkweDAxMDAKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfTkFORDUJCTB4MDIwMAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9OQU5ENgkJMHgwNDAwCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX05BTkQ3CQkweDA4MDAKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfSFNBREMJCTB4MTAwMAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9MQ0RJRgkJMHgyMDAwCisKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxNV9NQVNLCQkJCSgweDMgPDwgMzApCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTVfT0ZGU0VUCQkJCTMwCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTRfTUFTSwkJCQkoMHgzIDw8IDI4KQorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDE0X09GRlNFVAkJCQkyOAorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDEzX01BU0sJCQkJKDB4MyA8PCAyNikKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxM19PRkZTRVQJCQkJMjYKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxMl9NQVNLCQkJCSgweDMgPDwgMjQpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTJfT0ZGU0VUCQkJCTI0CisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTFfTUFTSwkJCQkoMHgzIDw8IDIyKQorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDExX09GRlNFVAkJCQkyMgorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDEwX01BU0sJCQkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxMF9PRkZTRVQJCQkJMjAKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g5X01BU0sJCQkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g5X09GRlNFVAkJCQkxOAorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDhfTUFTSwkJCQkoMHgzIDw8IDE2KQorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDhfT0ZGU0VUCQkJCTE2CisjZGVmaW5lCUFQQkhfREVWU0VMX0NIN19NQVNLCQkJCSgweDMgPDwgMTQpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIN19PRkZTRVQJCQkJMTQKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g2X01BU0sJCQkJKDB4MyA8PCAxMikKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g2X09GRlNFVAkJCQkxMgorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDVfTUFTSwkJCQkoMHgzIDw8IDEwKQorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDVfT0ZGU0VUCQkJCTEwCisjZGVmaW5lCUFQQkhfREVWU0VMX0NINF9NQVNLCQkJCSgweDMgPDwgOCkKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g0X09GRlNFVAkJCQk4CisjZGVmaW5lCUFQQkhfREVWU0VMX0NIM19NQVNLCQkJCSgweDMgPDwgNikKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gzX09GRlNFVAkJCQk2CisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMl9NQVNLCQkJCSgweDMgPDwgNCkKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gyX09GRlNFVAkJCQk0CisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMV9NQVNLCQkJCSgweDMgPDwgMikKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxX09GRlNFVAkJCQkyCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMF9NQVNLCQkJCSgweDMgPDwgMCkKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gwX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDE1X01BU0sJCQkoMHgzIDw8IDMwKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMTVfT0ZGU0VUCQkJMzAKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDE0X01BU0sJCQkoMHgzIDw8IDI4KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMTRfT0ZGU0VUCQkJMjgKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDEzX01BU0sJCQkoMHgzIDw8IDI2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMTNfT0ZGU0VUCQkJMjYKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDEyX01BU0sJCQkoMHgzIDw8IDI0KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMTJfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDExX01BU0sJCQkoMHgzIDw8IDIyKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMTFfT0ZGU0VUCQkJMjIKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDEwX01BU0sJCQkoMHgzIDw8IDIwKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMTBfT0ZGU0VUCQkJMjAKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDlfTUFTSwkJCSgweDMgPDwgMTgpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0g5X09GRlNFVAkJCTE4CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0g4X01BU0sJCQkoMHgzIDw8IDE2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIOF9PRkZTRVQJCQkxNgorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIOF9CVVJTVDAJCQkoMHgwIDw8IDE2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIOF9CVVJTVDQJCQkoMHgxIDw8IDE2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIOF9CVVJTVDgJCQkoMHgyIDw8IDE2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIN19NQVNLCQkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDdfT0ZGU0VUCQkJMTQKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDZfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0g2X09GRlNFVAkJCTEyCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0g1X01BU0sJCQkoMHgzIDw8IDEwKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NINV9PRkZTRVQJCQkxMAorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NINF9NQVNLCQkJKDB4MyA8PCA4KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NINF9PRkZTRVQJCQk4CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gzX01BU0sJCQkoMHgzIDw8IDYpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gzX09GRlNFVAkJCTYKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDNfQlVSU1QwCQkJKDB4MCA8PCA2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIM19CVVJTVDQJCQkoMHgxIDw8IDYpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gzX0JVUlNUOAkJCSgweDIgPDwgNikKKworI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMl9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMl9PRkZTRVQJCQk0CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gyX0JVUlNUMAkJCSgweDAgPDwgNCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDJfQlVSU1Q0CQkJKDB4MSA8PCA0KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMl9CVVJTVDgJCQkoMHgyIDw8IDQpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxX01BU0sJCQkoMHgzIDw8IDIpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxX09GRlNFVAkJCTIKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDFfQlVSU1QwCQkJKDB4MCA8PCAyKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMV9CVVJTVDQJCQkoMHgxIDw8IDIpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxX0JVUlNUOAkJCSgweDIgPDwgMikKKworI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMF9NQVNLCQkJMHgzCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gwX09GRlNFVAkJCTAKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDBfQlVSU1QwCQkJMHgwCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gwX0JVUlNUNAkJCTB4MQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMF9CVVJTVDgJCQkweDIKKworI2RlZmluZQlBUEJIX0RFQlVHX0dQTUlfT05FX0ZJRk8JCQkoMSA8PCAwKQorCisjZGVmaW5lCUFQQkhfQ0huX0NVUkNNREFSX0NNRF9BRERSX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCUFQQkhfQ0huX0NVUkNNREFSX0NNRF9BRERSX09GRlNFVAkJMAorCisjZGVmaW5lCUFQQkhfQ0huX05YVENNREFSX0NNRF9BRERSX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCUFQQkhfQ0huX05YVENNREFSX0NNRF9BRERSX09GRlNFVAkJMAorCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9YRkVSX0NPVU5UX01BU0sJCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIbl9DTURfWEZFUl9DT1VOVF9PRkZTRVQJCQkxNgorI2RlZmluZQlBUEJIX0NIbl9DTURfQ01EV09SRFNfTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9DTURXT1JEU19PRkZTRVQJCQkxMgorI2RlZmluZQlBUEJIX0NIbl9DTURfSEFMVE9OVEVSTUlOQVRFCQkJKDEgPDwgOCkKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX1dBSVQ0RU5EQ01ECQkJKDEgPDwgNykKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX1NFTUFQSE9SRQkJCQkoMSA8PCA2KQorI2RlZmluZQlBUEJIX0NIbl9DTURfTkFORFdBSVQ0UkVBRFkJCQkoMSA8PCA1KQorI2RlZmluZQlBUEJIX0NIbl9DTURfTkFORExPQ0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0lSUU9OQ01QTFQJCQkJKDEgPDwgMykKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0NIQUlOCQkJCSgxIDw8IDIpCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9DT01NQU5EX01BU0sJCQkweDMKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0NPTU1BTkRfT0ZGU0VUCQkJMAorI2RlZmluZQlBUEJIX0NIbl9DTURfQ09NTUFORF9OT19ETUFfWEZFUgkJMHgwCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9DT01NQU5EX0RNQV9XUklURQkJCTB4MQorI2RlZmluZQlBUEJIX0NIbl9DTURfQ09NTUFORF9ETUFfUkVBRAkJCTB4MgorI2RlZmluZQlBUEJIX0NIbl9DTURfQ09NTUFORF9ETUFfU0VOU0UJCQkweDMKKworI2RlZmluZQlBUEJIX0NIbl9CQVJfQUREUkVTU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlBUEJIX0NIbl9CQVJfQUREUkVTU19PRkZTRVQJCQkwCisKKyNkZWZpbmUJQVBCSF9DSG5fU0VNQV9SU1ZEMl9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfUlNWRDJfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJQVBCSF9DSG5fU0VNQV9QSE9SRV9NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfUEhPUkVfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJQVBCSF9DSG5fU0VNQV9SU1ZEMV9NQVNLCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJQVBCSF9DSG5fU0VNQV9SU1ZEMV9PRkZTRVQJCQk4CisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfSU5DUkVNRU5UX1NFTUFfTUFTSwkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUJQVBCSF9DSG5fU0VNQV9JTkNSRU1FTlRfU0VNQV9PRkZTRVQJCTAKKworI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfUkVRCQkJCSgxIDw8IDMxKQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfQlVSU1QJCQkJKDEgPDwgMzApCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9LSUNLCQkJCSgxIDw8IDI5KQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfRU5ECQkJCSgxIDw8IDI4KQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU0VOU0UJCQkJKDEgPDwgMjcpCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9SRUFEWQkJCQkoMSA8PCAyNikKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX0xPQ0sJCQkJKDEgPDwgMjUpCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9ORVhUQ01EQUREUlZBTElECQkoMSA8PCAyNCkKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1JEX0ZJRk9fRU1QVFkJCQkoMSA8PCAyMykKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1JEX0ZJRk9fRlVMTAkJCSgxIDw8IDIyKQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfV1JfRklGT19FTVBUWQkJCSgxIDw8IDIxKQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfV1JfRklGT19GVUxMCQkJKDEgPDwgMjApCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9SU1ZEMV9NQVNLCQkJKDB4N2ZmZiA8PCA1KQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfUlNWRDFfT0ZGU0VUCQkJNQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX01BU0sJCTB4MWYKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9PRkZTRVQJCTAKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9JRExFCQkweDAwCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfUkVRX0NNRDEJCTB4MDEKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9SRVFfQ01EMwkJMHgwMgorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1JFUV9DTUQyCQkweDAzCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfWEZFUl9ERUNPREUJMHgwNAorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1JFUV9XQUlUCQkweDA1CisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfUkVRX0NNRDQJCTB4MDYKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9QSU9fUkVRCQkweDA3CisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfUkVBRF9GTFVTSAkJMHgwOAorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1JFQURfV0FJVAkJMHgwOQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1dSSVRFCQkweDBjCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfUkVBRF9SRVEJCTB4MGQKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9DSEVDS19DSEFJTgkweDBlCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfWEZFUl9DT01QTEVURQkweDBmCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfVEVSTUlOQVRFCQkweDE0CisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfV0FJVF9FTkQJCTB4MTUKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9XUklURV9XQUlUCQkweDFjCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfSEFMVF9BRlRFUl9URVJNCTB4MWQKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9DSEVDS19XQUlUCQkweDFlCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfV0FJVF9SRUFEWQkJMHgxZgorCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMl9BUEJfQllURVNfTUFTSwkJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMl9BUEJfQllURVNfT0ZGU0VUCQkxNgorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzJfQUhCX0JZVEVTX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcyX0FIQl9CWVRFU19PRkZTRVQJCTAKKworI2RlZmluZQlBUEJIX1ZFUlNJT05fTUFKT1JfTUFTSwkJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJQVBCSF9WRVJTSU9OX01BSk9SX09GRlNFVAkJCTI0CisjZGVmaW5lCUFQQkhfVkVSU0lPTl9NSU5PUl9NQVNLCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlBUEJIX1ZFUlNJT05fTUlOT1JfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJQVBCSF9WRVJTSU9OX1NURVBfTUFTSwkJCQkweGZmZmYKKyNkZWZpbmUJQVBCSF9WRVJTSU9OX1NURVBfT0ZGU0VUCQkJMAorCisjZW5kaWYJLyogX19SRUdTX0FQQkhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1iYXNlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkY2MyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWJhc2UuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBQZXJpcGhlcmFsIEJhc2UgQWRkcmVzc2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zIEluYy4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfUkVHU19CQVNFX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19CQVNFX0hfXworCisvKgorICogUmVnaXN0ZXIgYmFzZSBhZGRyZXNzCisgKi8KKyNkZWZpbmUJTVhTX0lDT0xfQkFTRQkJMHg4MDAwMDAwMAorI2RlZmluZQlNWFNfSFNBRENfQkFTRQkJMHg4MDAwMjAwMAorI2RlZmluZQlNWFNfQVBCSF9CQVNFCQkweDgwMDA0MDAwCisjZGVmaW5lCU1YU19QRVJGTU9OX0JBU0UJMHg4MDAwNjAwMAorI2RlZmluZQlNWFNfQkNIX0JBU0UJCTB4ODAwMEEwMDAKKyNkZWZpbmUJTVhTX0dQTUlfQkFTRQkJMHg4MDAwQzAwMAorI2RlZmluZQlNWFNfU1NQMF9CQVNFCQkweDgwMDEwMDAwCisjZGVmaW5lCU1YU19TU1AxX0JBU0UJCTB4ODAwMTIwMDAKKyNkZWZpbmUJTVhTX1NTUDJfQkFTRQkJMHg4MDAxNDAwMAorI2RlZmluZQlNWFNfU1NQM19CQVNFCQkweDgwMDE2MDAwCisjZGVmaW5lCU1YU19QSU5DVFJMX0JBU0UJMHg4MDAxODAwMAorI2RlZmluZQlNWFNfRElHQ1RMX0JBU0UJCTB4ODAwMUMwMDAKKyNkZWZpbmUJTVhTX0VUTV9CQVNFCQkweDgwMDIyMDAwCisjZGVmaW5lCU1YU19BUEJYX0JBU0UJCTB4ODAwMjQwMDAKKyNkZWZpbmUJTVhTX0RDUF9CQVNFCQkweDgwMDI4MDAwCisjZGVmaW5lCU1YU19QWFBfQkFTRQkJMHg4MDAyQTAwMAorI2RlZmluZQlNWFNfT0NPVFBfQkFTRQkJMHg4MDAyQzAwMAorI2RlZmluZQlNWFNfQVhJX0FIQjBfQkFTRQkweDgwMDJFMDAwCisjZGVmaW5lCU1YU19MQ0RJRl9CQVNFCQkweDgwMDMwMDAwCisjZGVmaW5lCU1YU19DQU4wX0JBU0UJCTB4ODAwMzIwMDAKKyNkZWZpbmUJTVhTX0NBTjFfQkFTRQkJMHg4MDAzNDAwMAorI2RlZmluZQlNWFNfU0lNREJHX0JBU0UJCTB4ODAwM0MwMDAKKyNkZWZpbmUJTVhTX1NJTUdQTUlTRUxfQkFTRQkweDgwMDNDMjAwCisjZGVmaW5lCU1YU19TSU1TU1BTRUxfQkFTRQkweDgwMDNDMzAwCisjZGVmaW5lCU1YU19TSU1NRU1TRUxfQkFTRQkweDgwMDNDNDAwCisjZGVmaW5lCU1YU19HUElPTU9OX0JBU0UJMHg4MDAzQzUwMAorI2RlZmluZQlNWFNfU0lNRU5FVF9CQVNFCTB4ODAwM0M3MDAKKyNkZWZpbmUJTVhTX0FSTUpUQUdfQkFTRQkweDgwMDNDODAwCisjZGVmaW5lCU1YU19DTEtDVFJMX0JBU0UJMHg4MDA0MDAwMAorI2RlZmluZQlNWFNfU0FJRjBfQkFTRQkJMHg4MDA0MjAwMAorI2RlZmluZQlNWFNfUE9XRVJfQkFTRQkJMHg4MDA0NDAwMAorI2RlZmluZQlNWFNfU0FJRjFfQkFTRQkJMHg4MDA0NjAwMAorI2RlZmluZQlNWFNfTFJBRENfQkFTRQkJMHg4MDA1MDAwMAorI2RlZmluZQlNWFNfU1BESUZfQkFTRQkJMHg4MDA1NDAwMAorI2RlZmluZQlNWFNfUlRDX0JBU0UJCTB4ODAwNTYwMDAKKyNkZWZpbmUJTVhTX0kyQzBfQkFTRQkJMHg4MDA1ODAwMAorI2RlZmluZQlNWFNfSTJDMV9CQVNFCQkweDgwMDVBMDAwCisjZGVmaW5lCU1YU19QV01fQkFTRQkJMHg4MDA2NDAwMAorI2RlZmluZQlNWFNfVElNUk9UX0JBU0UJCTB4ODAwNjgwMDAKKyNkZWZpbmUJTVhTX1VBUlRBUFAwX0JBU0UJMHg4MDA2QTAwMAorI2RlZmluZQlNWFNfVUFSVEFQUDFfQkFTRQkweDgwMDZDMDAwCisjZGVmaW5lCU1YU19VQVJUQVBQMl9CQVNFCTB4ODAwNkUwMDAKKyNkZWZpbmUJTVhTX1VBUlRBUFAzX0JBU0UJMHg4MDA3MDAwMAorI2RlZmluZQlNWFNfVUFSVEFQUDRfQkFTRQkweDgwMDcyMDAwCisjZGVmaW5lCU1YU19VQVJUREJHX0JBU0UJMHg4MDA3NDAwMAorI2RlZmluZQlNWFNfVVNCUEhZMF9CQVNFCTB4ODAwN0MwMDAKKyNkZWZpbmUJTVhTX1VTQlBIWTFfQkFTRQkweDgwMDdFMDAwCisjZGVmaW5lCU1YU19VU0JDVFJMMF9CQVNFCTB4ODAwODAwMDAKKyNkZWZpbmUJTVhTX1VTQkNUUkwxX0JBU0UJMHg4MDA5MDAwMAorI2RlZmluZQlNWFNfREZMUFRfQkFTRQkJMHg4MDBDMDAwMAorI2RlZmluZQlNWFNfRFJBTV9CQVNFCQkweDgwMEUwMDAwCisjZGVmaW5lCU1YU19FTkVUMF9CQVNFCQkweDgwMEYwMDAwCisjZGVmaW5lCU1YU19FTkVUMV9CQVNFCQkweDgwMEY0MDAwCisKKyNlbmRpZiAvKiBfX01YMjhfUkVHU19CQVNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtYmNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1iY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWMwNDcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtYmNoLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IEJDSCBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9SRUdTX0JDSF9IX18KKyNkZWZpbmUgX19NWDI4X1JFR1NfQkNIX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X2JjaF9yZWdzIHsKKwlteDI4X3JlZyhod19iY2hfY3RybCkKKwlteDI4X3JlZyhod19iY2hfc3RhdHVzMCkKKwlteDI4X3JlZyhod19iY2hfbW9kZSkKKwlteDI4X3JlZyhod19iY2hfZW5jb2RlcHRyKQorCW14MjhfcmVnKGh3X2JjaF9kYXRhcHRyKQorCW14MjhfcmVnKGh3X2JjaF9tZXRhcHRyKQorCisJdWludDMyX3QJcmVzZXJ2ZWRbNF07CisKKwlteDI4X3JlZyhod19iY2hfbGF5b3V0c2VsZWN0KQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDBsYXlvdXQwKQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDBsYXlvdXQxKQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDFsYXlvdXQwKQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDFsYXlvdXQxKQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDJsYXlvdXQwKQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDJsYXlvdXQxKQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDNsYXlvdXQwKQorCW14MjhfcmVnKGh3X2JjaF9mbGFzaDNsYXlvdXQxKQorCW14MjhfcmVnKGh3X2JjaF9kYmdrZXNyZWFkKQorCW14MjhfcmVnKGh3X2JjaF9kYmdjc2ZlcmVhZCkKKwlteDI4X3JlZyhod19iY2hfZGJnc3luZGVncmVhZCkKKwlteDI4X3JlZyhod19iY2hfZGJnYWhibXJlYWQpCisJbXgyOF9yZWcoaHdfYmNoX2Jsb2NrbmFtZSkKKwlteDI4X3JlZyhod19iY2hfdmVyc2lvbikKK307CisjZW5kaWYKKworI2RlZmluZQlCQ0hfQ1RSTF9TRlRSU1QJCQkJCSgxIDw8IDMxKQorI2RlZmluZQlCQ0hfQ1RSTF9DTEtHQVRFCQkJCSgxIDw8IDMwKQorI2RlZmluZQlCQ0hfQ1RSTF9ERUJVR1NZTkRST01FCQkJCSgxIDw8IDIyKQorI2RlZmluZQlCQ0hfQ1RSTF9NMk1fTEFZT1VUX01BU0sJCQkoMHgzIDw8IDE4KQorI2RlZmluZQlCQ0hfQ1RSTF9NMk1fTEFZT1VUX09GRlNFVAkJCTE4CisjZGVmaW5lCUJDSF9DVFJMX00yTV9FTkNPREUJCQkJKDEgPDwgMTcpCisjZGVmaW5lCUJDSF9DVFJMX00yTV9FTkFCTEUJCQkJKDEgPDwgMTYpCisjZGVmaW5lCUJDSF9DVFJMX0RFQlVHX1NUQUxMX0lSUV9FTgkJCSgxIDw8IDEwKQorI2RlZmluZQlCQ0hfQ1RSTF9DT01QTEVURV9JUlFfRU4JCQkoMSA8PCA4KQorI2RlZmluZQlCQ0hfQ1RSTF9CTV9FUlJPUl9JUlEJCQkJKDEgPDwgMykKKyNkZWZpbmUJQkNIX0NUUkxfREVCVUdfU1RBTExfSVJRCQkJKDEgPDwgMikKKyNkZWZpbmUJQkNIX0NUUkxfQ09NUExFVEVfSVJRCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJQkNIX1NUQVRVUzBfSEFORExFX01BU0sJCQkJKDB4ZmZmIDw8IDIwKQorI2RlZmluZQlCQ0hfU1RBVFVTMF9IQU5ETEVfT0ZGU0VUCQkJMjAKKyNkZWZpbmUJQkNIX1NUQVRVUzBfQ09NUExFVEVEX0NFX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9DT01QTEVURURfQ0VfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJQkNIX1NUQVRVUzBfU1RBVFVTX0JMSzBfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX09GRlNFVAkJCTgKKyNkZWZpbmUJQkNIX1NUQVRVUzBfU1RBVFVTX0JMSzBfWkVSTwkJCSgweDAwIDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX0VSUk9SMQkJCSgweDAxIDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX0VSUk9SMgkJCSgweDAyIDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX0VSUk9SMwkJCSgweDAzIDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX0VSUk9SNAkJCSgweDA0IDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX1VOQ09SUkVDVEFCTEUJCSgweGZlIDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX0VSQVNFRAkJCSgweGZmIDw8IDgpCisjZGVmaW5lCUJDSF9TVEFUVVMwX0FMTE9ORVMJCQkJKDEgPDwgNCkKKyNkZWZpbmUJQkNIX1NUQVRVUzBfQ09SUkVDVEVECQkJCSgxIDw8IDMpCisjZGVmaW5lCUJDSF9TVEFUVVMwX1VOQ09SUkVDVEFCTEUJCQkoMSA8PCAyKQorCisjZGVmaW5lCUJDSF9NT0RFX0VSQVNFX1RIUkVTSE9MRF9NQVNLCQkJMHhmZgorI2RlZmluZQlCQ0hfTU9ERV9FUkFTRV9USFJFU0hPTERfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUJDSF9FTkNPREVQVFJfQUREUl9NQVNLCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX0VOQ09ERVBUUl9BRERSX09GRlNFVAkJCTAKKworI2RlZmluZQlCQ0hfREFUQVBUUl9BRERSX01BU0sJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlCQ0hfREFUQVBUUl9BRERSX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJQkNIX01FVEFQVFJfQUREUl9NQVNLCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX01FVEFQVFJfQUREUl9PRkZTRVQJCQkJMAorCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxNV9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzE1X1NFTEVDVF9PRkZTRVQJCTMwCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxNF9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzE0X1NFTEVDVF9PRkZTRVQJCTI4CisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxM19TRUxFQ1RfTUFTSwkJKDB4MyA8PCAyNikKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzEzX1NFTEVDVF9PRkZTRVQJCTI2CisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxMl9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzEyX1NFTEVDVF9PRkZTRVQJCTI0CisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxMV9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzExX1NFTEVDVF9PRkZTRVQJCTIyCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxMF9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzEwX1NFTEVDVF9PRkZTRVQJCTIwCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M5X1NFTEVDVF9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTOV9TRUxFQ1RfT0ZGU0VUCQkxOAorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTOF9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzhfU0VMRUNUX09GRlNFVAkJMTYKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzdfU0VMRUNUX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M3X1NFTEVDVF9PRkZTRVQJCTE0CisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M2X1NFTEVDVF9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTNl9TRUxFQ1RfT0ZGU0VUCQkxMgorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTNV9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzVfU0VMRUNUX09GRlNFVAkJMTAKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzRfU0VMRUNUX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzRfU0VMRUNUX09GRlNFVAkJOAorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTM19TRUxFQ1RfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTM19TRUxFQ1RfT0ZGU0VUCQk2CisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MyX1NFTEVDVF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MyX1NFTEVDVF9PRkZTRVQJCTQKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzFfU0VMRUNUX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzFfU0VMRUNUX09GRlNFVAkJMgorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMF9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMF9TRUxFQ1RfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9OQkxPQ0tTX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9OQkxPQ0tTX09GRlNFVAkJCTI0CisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfTUVUQV9TSVpFX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9NRVRBX1NJWkVfT0ZGU0VUCQkxNgorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9PRkZTRVQJCQkxMgorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfTk9ORQkJCSgweDAgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MyCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzQJCQkoMHgyIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfRUNDNgkJCSgweDMgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0M4CQkJKDB4NCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzEwCQkJKDB4NSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzEyCQkJKDB4NiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzE0CQkJKDB4NyA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzE2CQkJKDB4OCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzE4CQkJKDB4OSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzIwCQkJKDB4YSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzIyCQkJKDB4YiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzI0CQkJKDB4YyA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzI2CQkJKDB4ZCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzI4CQkJKDB4ZSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzMwCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzMyCQkJKDB4MTAgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfR0YxM18wX0dGMTRfMQkJCSgxIDw8IDEwKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0RBVEEwX1NJWkVfTUFTSwkJMHhmZmYKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9EQVRBMF9TSVpFX09GRlNFVAkJMAorCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfUEFHRV9TSVpFX01BU0sJCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX1BBR0VfU0laRV9PRkZTRVQJCTE2CisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfRUNDTl9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX09GRlNFVAkJCTEyCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfRUNDTl9OT05FCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzIJCQkoMHgxIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDNAkJCSgweDIgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfRUNDTl9FQ0M2CQkJKDB4MyA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzgJCQkoMHg0IDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMTAJCQkoMHg1IDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMTIJCQkoMHg2IDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMTQJCQkoMHg3IDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMTYJCQkoMHg4IDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMTgJCQkoMHg5IDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMjAJCQkoMHhhIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMjIJCQkoMHhiIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMjQJCQkoMHhjIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMjYJCQkoMHhkIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMjgJCQkoMHhlIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMzAJCQkoMHhmIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDMzIJCQkoMHgxMCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9HRjEzXzBfR0YxNF8xCQkJKDEgPDwgMTApCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfREFUQU5fU0laRV9NQVNLCQkweGZmZgorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0RBVEFOX1NJWkVfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQkNIX0RFQlVHMF9SU1ZEMV9NQVNLCQkJCSgweDFmIDw8IDI3KQorI2RlZmluZQlCQ0hfREVCVUcwX1JTVkQxX09GRlNFVAkJCQkyNworI2RlZmluZQlCQ0hfREVCVUcwX1JPTV9CSVNUX0VOQUJMRQkJCSgxIDw8IDI2KQorI2RlZmluZQlCQ0hfREVCVUcwX1JPTV9CSVNUX0NPTVBMRVRFCQkJKDEgPDwgMjUpCisjZGVmaW5lCUJDSF9ERUJVRzBfS0VTX0RFQlVHX1NZTkRST01FX1NZTUJPTF9NQVNLCSgweDFmZiA8PCAxNikKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfREVCVUdfU1lORFJPTUVfU1lNQk9MX09GRlNFVAkxNgorI2RlZmluZQlCQ0hfREVCVUcwX0tFU19ERUJVR19TWU5EUk9NRV9TWU1CT0xfTk9STUFMCSgweDAgPDwgMTYpCisjZGVmaW5lCUJDSF9ERUJVRzBfS0VTX0RFQlVHX1NZTkRST01FX1NZTUJPTF9URVNUX01PREUJKDB4MSA8PCAxNikKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfREVCVUdfU0hJRlRfU1lORAkJCSgxIDw8IDE1KQorI2RlZmluZQlCQ0hfREVCVUcwX0tFU19ERUJVR19QQVlMT0FEX0ZMQUcJCSgxIDw8IDE0KQorI2RlZmluZQlCQ0hfREVCVUcwX0tFU19ERUJVR19NT0RFNEsJCQkoMSA8PCAxMykKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfREVCVUdfS0lDSwkJCSgxIDw8IDEyKQorI2RlZmluZQlCQ0hfREVCVUcwX0tFU19TVEFOREFMT05FCQkJKDEgPDwgMTEpCisjZGVmaW5lCUJDSF9ERUJVRzBfS0VTX0RFQlVHX1NURVAJCQkoMSA8PCAxMCkKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfREVCVUdfU1RBTEwJCQkoMSA8PCA5KQorI2RlZmluZQlCQ0hfREVCVUcwX0JNX0tFU19URVNUX0JZUEFTUwkJCSgxIDw8IDgpCisjZGVmaW5lCUJDSF9ERUJVRzBfUlNWRDBfTUFTSwkJCQkoMHgzIDw8IDYpCisjZGVmaW5lCUJDSF9ERUJVRzBfUlNWRDBfT0ZGU0VUCQkJCTYKKyNkZWZpbmUJQkNIX0RFQlVHMF9ERUJVR19SRUdfU0VMRUNUX01BU0sJCTB4M2YKKyNkZWZpbmUJQkNIX0RFQlVHMF9ERUJVR19SRUdfU0VMRUNUX09GRlNFVAkJMAorCisjZGVmaW5lCUJDSF9EQkdLRVNSRUFEX1ZBTFVFU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlCQ0hfREJHS0VTUkVBRF9WQUxVRVNfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUJDSF9EQkdDU0ZFUkVBRF9WQUxVRVNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX0RCR0NTRkVSRUFEX1ZBTFVFU19PRkZTRVQJCQkwCisKKyNkZWZpbmUJQkNIX0RCR1NZTkRHRU5SRUFEX1ZBTFVFU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlCQ0hfREJHU1lOREdFTlJFQURfVkFMVUVTX09GRlNFVAkJMAorCisjZGVmaW5lCUJDSF9EQkdBSEJNUkVBRF9WQUxVRVNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX0RCR0FIQk1SRUFEX1ZBTFVFU19PRkZTRVQJCQkwCisKKyNkZWZpbmUJQkNIX0JMT0NLTkFNRV9OQU1FX01BU0sJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlCQ0hfQkxPQ0tOQU1FX05BTUVfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUJDSF9WRVJTSU9OX01BSk9SX01BU0sJCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUJDSF9WRVJTSU9OX01BSk9SX09GRlNFVAkJCTI0CisjZGVmaW5lCUJDSF9WRVJTSU9OX01JTk9SX01BU0sJCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUJDSF9WRVJTSU9OX01JTk9SX09GRlNFVAkJCTE2CisjZGVmaW5lCUJDSF9WRVJTSU9OX1NURVBfTUFTSwkJCQkweGZmZmYKKyNkZWZpbmUJQkNIX1ZFUlNJT05fU1RFUF9PRkZTRVQJCQkJMAorCisjZW5kaWYJLyogX19NWDI4X1JFR1NfQkNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtY2xrY3RybC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtY2xrY3RybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZDAzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1jbGtjdHJsLmgKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IENMS0NUUkwgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfUkVHU19DTEtDVFJMX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19DTEtDVFJMX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyB7CisJbXgyOF9yZWcoaHdfY2xrY3RybF9wbGwwY3RybDApCQkvKiAweDAwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9wbGwwY3RybDEpCQkvKiAweDEwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9wbGwxY3RybDApCQkvKiAweDIwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9wbGwxY3RybDEpCQkvKiAweDMwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9wbGwyY3RybDApCQkvKiAweDQwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9jcHUpCQkvKiAweDUwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9oYnVzKQkJLyogMHg2MCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfeGJ1cykJCS8qIDB4NzAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3h0YWwpCQkvKiAweDgwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9zc3AwKQkJLyogMHg5MCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfc3NwMSkJCS8qIDB4YTAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3NzcDIpCQkvKiAweGIwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9zc3AzKQkJLyogMHhjMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfZ3BtaSkJCS8qIDB4ZDAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3NwZGlmKQkJLyogMHhlMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfZW1pKQkJLyogMHhmMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfc2FpZjApCQkvKiAweDEwMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfc2FpZjEpCQkvKiAweDExMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfbGNkaWYpCQkvKiAweDEyMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfZXRtKQkJLyogMHgxMzAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2VuZXQpCQkvKiAweDE0MCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfaHNhZGMpCQkvKiAweDE1MCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfZmxleGNhbikJCS8qIDB4MTYwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZFsxNl07CisKKwlteDI4X3JlZyhod19jbGtjdHJsX2ZyYWMwKQkJLyogMHgxYjAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2ZyYWMxKQkJLyogMHgxYzAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2Nsa3NlcSkJCS8qIDB4MWQwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9yZXNldCkJCS8qIDB4MWUwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9zdGF0dXMpCQkvKiAweDFmMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfdmVyc2lvbikJCS8qIDB4MjAwICovCit9OworI2VuZGlmCisKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMX09GRlNFVAkyOAorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMX0RFRkFVTFQJKDB4MCA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9USU1FU18yCSgweDEgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0xGUl9TRUxfVElNRVNfMDUJKDB4MiA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9VTkRFRklORUQJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfQ1BfU0VMX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0NQX1NFTF9PRkZTRVQJCTI0CisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0NQX1NFTF9ERUZBVUxUCSgweDAgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0NQX1NFTF9USU1FU18yCSgweDEgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0NQX1NFTF9USU1FU18wNQkoMHgyIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfVU5ERUZJTkVECSgweDMgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTF9PRkZTRVQJMjAKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTF9ERUZBVUxUCSgweDAgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfTE9XRVIJCSgweDEgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfTE9XRVNUCSgweDIgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfVU5ERUZJTkVECSgweDMgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0VOX1VTQl9DTEtTCQkoMSA8PCAxOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfUE9XRVIJCQkoMSA8PCAxNykKKworI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMV9MT0NLCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwxX0ZPUkNFX0xPQ0sJCSgxIDw8IDMwKQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMV9MT0NLX0NPVU5UX01BU0sJMHhmZmZmCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwxX0xPQ0tfQ09VTlRfT0ZGU0VUCTAKKworI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9DTEtHQVRFRU1JCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9MRlJfU0VMX09GRlNFVAkyOAorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9MRlJfU0VMX0RFRkFVTFQJKDB4MCA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9USU1FU18yCSgweDEgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUxfVElNRVNfMDUJKDB4MiA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9VTkRFRklORUQJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfQ1BfU0VMX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9PRkZTRVQJCTI0CisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9ERUZBVUxUCSgweDAgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9USU1FU18yCSgweDEgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9USU1FU18wNQkoMHgyIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUxfVU5ERUZJTkVECSgweDMgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfRElWX1NFTF9PRkZTRVQJMjAKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfRElWX1NFTF9ERUZBVUxUCSgweDAgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfTE9XRVIJCSgweDEgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfTE9XRVNUCSgweDIgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfVU5ERUZJTkVECSgweDMgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0VOX1VTQl9DTEtTCQkoMSA8PCAxOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfUE9XRVIJCQkoMSA8PCAxNykKKworI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMV9MT0NLCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwxX0ZPUkNFX0xPQ0sJCSgxIDw8IDMwKQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMV9MT0NLX0NPVU5UX01BU0sJMHhmZmZmCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwxX0xPQ0tfQ09VTlRfT0ZGU0VUCTAKKworI2RlZmluZQlDTEtDVFJMX1BMTDJDVFJMMF9DTEtHQVRFCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwyQ1RSTDBfTEZSX1NFTF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX1BMTDJDVFJMMF9MRlJfU0VMX09GRlNFVAkyOAorI2RlZmluZQlDTEtDVFJMX1BMTDJDVFJMMF9IT0xEX1JJTkdfT0ZGX0IJKDEgPDwgMjYpCisjZGVmaW5lCUNMS0NUUkxfUExMMkNUUkwwX0NQX1NFTF9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDJDVFJMMF9DUF9TRUxfT0ZGU0VUCQkyNAorI2RlZmluZQlDTEtDVFJMX1BMTDJDVFJMMF9QT1dFUgkJCSgxIDw8IDIzKQorCisjZGVmaW5lCUNMS0NUUkxfQ1BVX0JVU1lfUkVGX1hUQUwJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX0NQVV9CVVNZX1JFRl9DUFUJCSgxIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX0NQVV9ESVZfWFRBTF9GUkFDX0VOCQkoMSA8PCAyNikKKyNkZWZpbmUJQ0xLQ1RSTF9DUFVfRElWX1hUQUxfTUFTSwkJKDB4M2ZmIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0NQVV9ESVZfWFRBTF9PRkZTRVQJCTE2CisjZGVmaW5lCUNMS0NUUkxfQ1BVX0lOVEVSUlVQVF9XQUlUCQkoMSA8PCAxMikKKyNkZWZpbmUJQ0xLQ1RSTF9DUFVfRElWX0NQVV9GUkFDX0VOCQkoMSA8PCAxMCkKKyNkZWZpbmUJQ0xLQ1RSTF9DUFVfRElWX0NQVV9NQVNLCQkweDNmCisjZGVmaW5lCUNMS0NUUkxfQ1BVX0RJVl9DUFVfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0FTTV9CVVNZCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfSEJVU19EQ1BfQVNfRU5BQkxFCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1BYUF9BU19FTkFCTEUJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfQVNNX0VNSVBPUlRfQVNfRU5BQkxFCSgxIDw8IDI3KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfQVBCSERNQV9BU19FTkFCTEUJCSgxIDw8IDI2KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfQVBCWERNQV9BU19FTkFCTEUJCSgxIDw8IDI1KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfVFJBRkZJQ19KQU1fQVNfRU5BQkxFCSgxIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfVFJBRkZJQ19BU19FTkFCTEUJCSgxIDw8IDIzKQorI2RlZmluZQlDTEtDVFJMX0hCVVNfQ1BVX0RBVEFfQVNfRU5BQkxFCQkoMSA8PCAyMikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0NQVV9JTlNUUl9BU19FTkFCTEUJKDEgPDwgMjEpCisjZGVmaW5lCUNMS0NUUkxfSEJVU19BU01fRU5BQkxFCQkJKDEgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfSEJVU19BVVRPX0NMRUFSX0RJVl9FTkFCTEUJKDEgPDwgMTkpCisjZGVmaW5lCUNMS0NUUkxfSEJVU19TTE9XX0RJVl9NQVNLCQkoMHg3IDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfU0xPV19ESVZfT0ZGU0VUCQkxNgorI2RlZmluZQlDTEtDVFJMX0hCVVNfU0xPV19ESVZfQlkxCQkoMHgwIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfU0xPV19ESVZfQlkyCQkoMHgxIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfU0xPV19ESVZfQlk0CQkoMHgyIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfU0xPV19ESVZfQlk4CQkoMHgzIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfU0xPV19ESVZfQlkxNgkJKDB4NCA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX0JZMzIJCSgweDUgPDwgMTYpCisjZGVmaW5lCUNMS0NUUkxfSEJVU19ESVZfRlJBQ19FTgkJKDEgPDwgNSkKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0RJVl9NQVNLCQkJMHgxZgorI2RlZmluZQlDTEtDVFJMX0hCVVNfRElWX09GRlNFVAkJCTAKKworI2RlZmluZQlDTEtDVFJMX1hCVVNfQlVTWQkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX1hCVVNfQVVUT19DTEVBUl9ESVZfRU5BQkxFCSgxIDw8IDExKQorI2RlZmluZQlDTEtDVFJMX1hCVVNfRElWX0ZSQUNfRU4JCSgxIDw8IDEwKQorI2RlZmluZQlDTEtDVFJMX1hCVVNfRElWX01BU0sJCQkweDNmZgorI2RlZmluZQlDTEtDVFJMX1hCVVNfRElWX09GRlNFVAkJCTAKKworI2RlZmluZQlDTEtDVFJMX1hUQUxfVUFSVF9DTEtfR0FURQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfWFRBTF9QV01fQ0xLMjRNX0dBVEUJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX1hUQUxfVElNUk9UX0NMSzMyS19HQVRFCQkoMSA8PCAyNikKKyNkZWZpbmUJQ0xLQ1RSTF9YVEFMX0RJVl9VQVJUX01BU0sJCTB4MworI2RlZmluZQlDTEtDVFJMX1hUQUxfRElWX1VBUlRfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9TU1BfQ0xLR0FURQkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX1NTUF9CVVNZCQkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfU1NQX0RJVl9GUkFDX0VOCQkJKDEgPDwgOSkKKyNkZWZpbmUJQ0xLQ1RSTF9TU1BfRElWX01BU0sJCQkweDFmZgorI2RlZmluZQlDTEtDVFJMX1NTUF9ESVZfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUNMS0NUUkxfR1BNSV9DTEtHQVRFCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfR1BNSV9CVVNZCQkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfR1BNSV9ESVZfRlJBQ19FTgkJKDEgPDwgMTApCisjZGVmaW5lCUNMS0NUUkxfR1BNSV9ESVZfTUFTSwkJCTB4M2ZmCisjZGVmaW5lCUNMS0NUUkxfR1BNSV9ESVZfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUNMS0NUUkxfU1BESUZfQ0xLR0FURQkJCSgxIDw8IDMxKQorCisjZGVmaW5lCUNMS0NUUkxfRU1JX0NMS0dBVEUJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9FTUlfU1lOQ19NT0RFX0VOCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfWFRBTAkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfRU1JX0JVU1lfUkVGX0VNSQkJKDEgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfRU1JX0JVU1lfUkVGX0NQVQkJKDEgPDwgMjcpCisjZGVmaW5lCUNMS0NUUkxfRU1JX0JVU1lfU1lOQ19NT0RFCQkoMSA8PCAyNikKKyNkZWZpbmUJQ0xLQ1RSTF9FTUlfQlVTWV9EQ0NfUkVTWU5DCQkoMSA8PCAxNykKKyNkZWZpbmUJQ0xLQ1RSTF9FTUlfRENDX1JFU1lOQ19FTkFCTEUJCSgxIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0VNSV9ESVZfWFRBTF9NQVNLCQkoMHhmIDw8IDgpCisjZGVmaW5lCUNMS0NUUkxfRU1JX0RJVl9YVEFMX09GRlNFVAkJOAorI2RlZmluZQlDTEtDVFJMX0VNSV9ESVZfRU1JX01BU0sJCTB4M2YKKyNkZWZpbmUJQ0xLQ1RSTF9FTUlfRElWX0VNSV9PRkZTRVQJCTAKKworI2RlZmluZQlDTEtDVFJMX1NBSUYwX0NMS0dBVEUJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9TQUlGMF9CVVNZCQkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfU0FJRjBfRElWX0ZSQUNfRU4JCSgxIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX1NBSUYwX0RJVl9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUNMS0NUUkxfU0FJRjBfRElWX09GRlNFVAkJMAorCisjZGVmaW5lCUNMS0NUUkxfU0FJRjFfQ0xLR0FURQkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX1NBSUYxX0JVU1kJCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9TQUlGMV9ESVZfRlJBQ19FTgkJKDEgPDwgMTYpCisjZGVmaW5lCUNMS0NUUkxfU0FJRjFfRElWX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJQ0xLQ1RSTF9TQUlGMV9ESVZfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9ESVNfTENESUZfQ0xLR0FURQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfRElTX0xDRElGX0JVU1kJCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9ESVNfTENESUZfRElWX0ZSQUNfRU4JCSgxIDw8IDEzKQorI2RlZmluZQlDTEtDVFJMX0RJU19MQ0RJRl9ESVZfTUFTSwkJMHgxZmZmCisjZGVmaW5lCUNMS0NUUkxfRElTX0xDRElGX0RJVl9PRkZTRVQJCTAKKworI2RlZmluZQlDTEtDVFJMX0VUTV9DTEtHQVRFCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfRVRNX0JVU1kJCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9FVE1fRElWX0ZSQUNfRU4JCQkoMSA8PCA3KQorI2RlZmluZQlDTEtDVFJMX0VUTV9ESVZfTUFTSwkJCTB4N2YKKyNkZWZpbmUJQ0xLQ1RSTF9FVE1fRElWX09GRlNFVAkJCTAKKworI2RlZmluZQlDTEtDVFJMX0VORVRfU0xFRVAJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX0RJU0FCTEUJCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX1NUQVRVUwkJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX0VORVRfQlVTWV9USU1FCQkJKDEgPDwgMjcpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9ESVZfVElNRV9NQVNLCQkoMHgzZiA8PCAyMSkKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX0RJVl9USU1FX09GRlNFVAkJMjEKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMX01BU0sJCSgweDMgPDwgMTkpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9USU1FX1NFTF9PRkZTRVQJCTE5CisjZGVmaW5lCUNMS0NUUkxfRU5FVF9USU1FX1NFTF9YVEFMCQkoMHgwIDw8IDE5KQorI2RlZmluZQlDTEtDVFJMX0VORVRfVElNRV9TRUxfUExMCQkoMHgxIDw8IDE5KQorI2RlZmluZQlDTEtDVFJMX0VORVRfVElNRV9TRUxfUk1JSV9DTEsJCSgweDIgPDwgMTkpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9USU1FX1NFTF9VTkRFRklORUQJCSgweDMgPDwgMTkpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9DTEtfT1VUX0VOCQkJKDEgPDwgMTgpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9SRVNFVF9CWV9TV19DSElQCQkoMSA8PCAxNykKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX1JFU0VUX0JZX1NXCQkoMSA8PCAxNikKKworI2RlZmluZQlDTEtDVFJMX0hTQURDX1JFU0VUQgkJCSgxIDw8IDMwKQorI2RlZmluZQlDTEtDVFJMX0hTQURDX0ZSRVFESVZfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9IU0FEQ19GUkVRRElWX09GRlNFVAkJMjgKKworI2RlZmluZQlDTEtDVFJMX0ZMRVhDQU5fU1RPUF9DQU4wCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9GTEVYQ0FOX0NBTjBfU1RBVFVTCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9GTEVYQ0FOX1NUT1BfQ0FOMQkJKDEgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfRkxFWENBTl9DQU4xX1NUQVRVUwkJKDEgPDwgMjcpCisKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFSU8wCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9JTzBfU1RBQkxFCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9JTzBGUkFDX01BU0sJCSgweDNmIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0lPMEZSQUNfT0ZGU0VUCQkyNAorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0NMS0dBVEVJTzEJCSgxIDw8IDIzKQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0lPMV9TVEFCTEUJCSgxIDw8IDIyKQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0lPMUZSQUNfTUFTSwkJKDB4M2YgPDwgMTYpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfSU8xRlJBQ19PRkZTRVQJCTE2CisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfQ0xLR0FURUVNSQkJKDEgPDwgMTUpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfRU1JX1NUQUJMRQkJKDEgPDwgMTQpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfRU1JRlJBQ19NQVNLCQkoMHgzZiA8PCA4KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0VNSUZSQUNfT0ZGU0VUCQk4CisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfQ0xLR0FURUNQVQkJKDEgPDwgNykKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9DUFVfU1RBQkxFCQkoMSA8PCA2KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0NQVUZSQUNfTUFTSwkJMHgzZgorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0NQVUZSQUNfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9DTEtHQVRFR1BNSQkJKDEgPDwgMjMpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfR1BNSV9TVEFCTEUJCSgxIDw8IDIyKQorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX0dQTUlGUkFDX01BU0sJCSgweDNmIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX0dQTUlGUkFDX09GRlNFVAkJMTYKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9DTEtHQVRFSFNBREMJCSgxIDw8IDE1KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX0hTQURDX1NUQUJMRQkJKDEgPDwgMTQpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfSFNBRENGUkFDX01BU0sJCSgweDNmIDw8IDgpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfSFNBRENGUkFDX09GRlNFVAkJOAorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX0NMS0dBVEVQSVgJCSgxIDw8IDcpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfUElYX1NUQUJMRQkJKDEgPDwgNikKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9QSVhGUkFDX01BU0sJCTB4M2YKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9QSVhGUkFDX09GRlNFVAkJMAorCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19DUFUJCSgxIDw8IDE4KQorI2RlZmluZQlDTEtDVFJMX0NMS1NFUV9CWVBBU1NfRElTX0xDRElGCQkoMSA8PCAxNCkKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0RJU19MQ0RJRl9CWVBBU1MJKDB4MSA8PCAxNCkKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0RJU19MQ0RJRl9QRkQJKDB4MCA8PCAxNCkKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VUTQkJKDEgPDwgOCkKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VNSQkJKDEgPDwgNykKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUDMJCSgxIDw8IDYpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AyCQkoMSA8PCA1KQorI2RlZmluZQlDTEtDVFJMX0NMS1NFUV9CWVBBU1NfU1NQMQkJKDEgPDwgNCkKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUDAJCSgxIDw8IDMpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19HUE1JCQkoMSA8PCAyKQorI2RlZmluZQlDTEtDVFJMX0NMS1NFUV9CWVBBU1NfU0FJRjEJCSgxIDw8IDEpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19TQUlGMAkJKDEgPDwgMCkKKworI2RlZmluZQlDTEtDVFJMX1JFU0VUX1dET0dfUE9SX0RJU0FCTEUJCSgxIDw8IDUpCisjZGVmaW5lCUNMS0NUUkxfUkVTRVRfRVhURVJOQUxfUkVTRVRfRU5BQkxFCSgxIDw8IDQpCisjZGVmaW5lCUNMS0NUUkxfUkVTRVRfVEhFUk1BTF9SRVNFVF9FTkFCTEUJKDEgPDwgMykKKyNkZWZpbmUJQ0xLQ1RSTF9SRVNFVF9USEVSTUFMX1JFU0VUX0RFRkFVTFQJKDEgPDwgMikKKyNkZWZpbmUJQ0xLQ1RSTF9SRVNFVF9DSElQCQkJKDEgPDwgMSkKKyNkZWZpbmUJQ0xLQ1RSTF9SRVNFVF9ESUcJCQkoMSA8PCAwKQorCisjZGVmaW5lCUNMS0NUUkxfU1RBVFVTX0NQVV9MSU1JVF9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZQlDTEtDVFJMX1NUQVRVU19DUFVfTElNSVRfT0ZGU0VUCQkzMAorCisjZGVmaW5lCUNMS0NUUkxfVkVSU0lPTl9NQUpPUl9NQVNLCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJQ0xLQ1RSTF9WRVJTSU9OX01BSk9SX09GRlNFVAkJMjQKKyNkZWZpbmUJQ0xLQ1RSTF9WRVJTSU9OX01JTk9SX01BU0sJCSgweGZmIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX1ZFUlNJT05fTUlOT1JfT0ZGU0VUCQkxNgorI2RlZmluZQlDTEtDVFJMX1ZFUlNJT05fU1RFUF9NQVNLCQkweGZmZmYKKyNkZWZpbmUJQ0xLQ1RSTF9WRVJTSU9OX1NURVBfT0ZGU0VUCQkwCisKKyNlbmRpZiAvKiBfX01YMjhfUkVHU19DTEtDVFJMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtY29tbW9uLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmU5NzViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtY29tbW9uLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggUmVnaXN0ZXIgQWNjZXNzb3JzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfQ09NTU9OX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19DT01NT05fSF9fCisKKy8qCisgKiBUaGUgaS5NWDI4IGhhcyBpbnRlcmVzdGluZyBmZWF0dXJlIHdoZW4gaXQgY29tZXMgdG8gcmVnaXN0ZXIgYWNjZXNzLiBUaGVyZQorICogYXJlIGZvdXIga2luZHMgb2YgYWNjZXNzIHRvIG9uZSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBUaG9zZSBhcmU6CisgKgorICogMSkgQ29tbW9uIHJlYWQvd3JpdGUgYWNjZXNzLiBUbyB1c2UgdGhpcyBtb2RlLCBqdXN0IHdyaXRlIHRvIHRoZSBhZGRyZXNzIG9mCisgKiAgICB0aGUgcmVnaXN0ZXIuCisgKiAyKSBTZXQgYml0cyBvbmx5IGFjY2Vzcy4gVG8gc2V0IGJpdHMsIHdyaXRlIHdoaWNoIGJpdHMgeW91IHdhbnQgdG8gc2V0IHRvIHRoZQorICogICAgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgKyAweDQuCisgKiAzKSBDbGVhciBiaXRzIG9ubHkgYWNjZXNzLiBUbyBjbGVhciBiaXRzLCB3cml0ZSB3aGljaCBiaXRzIHlvdSB3YW50IHRvIGNsZWFyCisgKiAgICB0byB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgKyAweDguCisgKiA0KSBUb2dnbGUgYml0cyBvbmx5IGFjY2Vzcy4gVG8gdG9nZ2xlIGJpdHMsIHdyaXRlIHdoaWNoIGJpdHMgeW91IHdhbnQgdG8KKyAqICAgIHRvZ2dsZSB0byB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgKyAweGMuCisgKgorICogSU1QT1JUQU5UIE5PVEU6IE5vdCBhbGwgcmVnaXN0ZXJzIHN1cHBvcnQgYWNjZXNzZXMgMi00ISBBbHNvLCBub3QgYWxsIGJpdHMKKyAqIGNhbiBiZSBzZXQvY2xlYXJlZCBieSBwdXJlIHdyaXRlIGFzIGluIGFjY2VzcyB0eXBlIDEsIHNvbWUgbmVlZCB0byBiZQorICogZXhwbGljaXRseSBzZXQvY2xlYXJlZCBieSB1c2luZyBhY2Nlc3MgdHlwZSAyLTMuCisgKgorICogVGhlIGZvbGxvd2luZyBtYWNyb3MgYW5kIHN0cnVjdHVyZXMgYWxsb3cgdGhlIHVzZXIgdG8gZWl0aGVyIGFjY2VzcyB0aGUKKyAqIHJlZ2lzdGVyIGluIGFsbCBhZm9yZW1lbnRpb25lZCBtb2RlcyAoYnkgYWNjZXNzaW5nIHJlZ19uYW1lLCByZWdfbmFtZV9zZXQsCisgKiByZWdfbmFtZV9jbHIsIHJlZ19uYW1lX3RvZykgb3IgcGFzcyB0aGUgcmVnaXN0ZXIgc3RydWN0dXJlIGZ1cnRoZXIgaW50bworICogdmFyaW91cyBmdW5jdGlvbnMgd2l0aCBjb3JyZWN0IHR5cGUgaW5mb3JtYXRpb24gKGJ5IGFjY2Vzc2luZyByZWdfbmFtZV9yZWcpLgorICoKKyAqLworCisjZGVmaW5lCV9fbXgyOF9yZWcobmFtZSkJCVwKKwl1aW50MzJfdCBuYW1lOwkJCVwKKwl1aW50MzJfdCBuYW1lIyNfc2V0OwkJXAorCXVpbnQzMl90IG5hbWUjI19jbHI7CQlcCisJdWludDMyX3QgbmFtZSMjX3RvZzsKKworc3RydWN0IG14MjhfcmVnaXN0ZXIgeworCV9fbXgyOF9yZWcocmVnKQorfTsKKworI2RlZmluZQlteDI4X3JlZyhuYW1lKQkJCQkJXAorCXVuaW9uIHsJCQkJCQlcCisJCXN0cnVjdCB7IF9fbXgyOF9yZWcobmFtZSkgfTsJCVwKKwkJc3RydWN0IG14MjhfcmVnaXN0ZXIgbmFtZSMjX3JlZzsJXAorCX07CisKKyNlbmRpZgkvKiBfX01YMjhfUkVHU19DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1ncG1pLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1ncG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5Njc5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWdwbWkuaApAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggR1BNSSBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9SRUdTX0dQTUlfSF9fCisjZGVmaW5lIF9fTVgyOF9SRUdTX0dQTUlfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNvbW1vbi5oPgorCisjaWZuZGVmCV9fQVNTRU1CTFlfXworc3RydWN0IG14MjhfZ3BtaV9yZWdzIHsKKwlteDI4X3JlZyhod19ncG1pX2N0cmwwKQorCW14MjhfcmVnKGh3X2dwbWlfY29tcGFyZSkKKwlteDI4X3JlZyhod19ncG1pX2VjY2N0cmwpCisJbXgyOF9yZWcoaHdfZ3BtaV9lY2Njb3VudCkKKwlteDI4X3JlZyhod19ncG1pX3BheWxvYWQpCisJbXgyOF9yZWcoaHdfZ3BtaV9hdXhpbGlhcnkpCisJbXgyOF9yZWcoaHdfZ3BtaV9jdHJsMSkKKwlteDI4X3JlZyhod19ncG1pX3RpbWluZzApCisJbXgyOF9yZWcoaHdfZ3BtaV90aW1pbmcxKQorCisJdWludDMyX3QJcmVzZXJ2ZWRbNF07CisKKwlteDI4X3JlZyhod19ncG1pX2RhdGEpCisJbXgyOF9yZWcoaHdfZ3BtaV9zdGF0KQorCW14MjhfcmVnKGh3X2dwbWlfZGVidWcpCisJbXgyOF9yZWcoaHdfZ3BtaV92ZXJzaW9uKQorfTsKKyNlbmRpZgorCisjZGVmaW5lCUdQTUlfQ1RSTDBfU0ZUUlNUCQkJCSgxIDw8IDMxKQorI2RlZmluZQlHUE1JX0NUUkwwX0NMS0dBVEUJCQkJKDEgPDwgMzApCisjZGVmaW5lCUdQTUlfQ1RSTDBfUlVOCQkJCQkoMSA8PCAyOSkKKyNkZWZpbmUJR1BNSV9DVFJMMF9ERVZfSVJRX0VOCQkJCSgxIDw8IDI4KQorI2RlZmluZQlHUE1JX0NUUkwwX0xPQ0tfQ1MJCQkJKDEgPDwgMjcpCisjZGVmaW5lCUdQTUlfQ1RSTDBfVURNQQkJCQkJKDEgPDwgMjYpCisjZGVmaW5lCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX01BU0sJCQkoMHgzIDw8IDI0KQorI2RlZmluZQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9PRkZTRVQJCQkyNAorI2RlZmluZQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9XUklURQkJCSgweDAgPDwgMjQpCisjZGVmaW5lCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1JFQUQJCQkoMHgxIDw8IDI0KQorI2RlZmluZQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9SRUFEX0FORF9DT01QQVJFCSgweDIgPDwgMjQpCisjZGVmaW5lCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1dBSVRfRk9SX1JFQURZCQkoMHgzIDw8IDI0KQorI2RlZmluZQlHUE1JX0NUUkwwX1dPUkRfTEVOR1RICQkJCSgxIDw8IDIzKQorI2RlZmluZQlHUE1JX0NUUkwwX0NTX01BU0sJCQkJKDB4NyA8PCAyMCkKKyNkZWZpbmUJR1BNSV9DVFJMMF9DU19PRkZTRVQJCQkJMjAKKyNkZWZpbmUJR1BNSV9DVFJMMF9BRERSRVNTX01BU0sJCQkJKDB4NyA8PCAxNykKKyNkZWZpbmUJR1BNSV9DVFJMMF9BRERSRVNTX09GRlNFVAkJCTE3CisjZGVmaW5lCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEEJCQkoMHgwIDw8IDE3KQorI2RlZmluZQlHUE1JX0NUUkwwX0FERFJFU1NfTkFORF9DTEUJCQkoMHgxIDw8IDE3KQorI2RlZmluZQlHUE1JX0NUUkwwX0FERFJFU1NfTkFORF9BTEUJCQkoMHgyIDw8IDE3KQorI2RlZmluZQlHUE1JX0NUUkwwX0FERFJFU1NfSU5DUkVNRU5UCQkJKDEgPDwgMTYpCisjZGVmaW5lCUdQTUlfQ1RSTDBfWEZFUl9DT1VOVF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUdQTUlfQ1RSTDBfWEZFUl9DT1VOVF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJR1BNSV9DT01QQVJFX01BU0tfTUFTSwkJCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlHUE1JX0NPTVBBUkVfTUFTS19PRkZTRVQJCQkxNgorI2RlZmluZQlHUE1JX0NPTVBBUkVfUkVGRVJFTkNFX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJR1BNSV9DT01QQVJFX1JFRkVSRU5DRV9PRkZTRVQJCQkwCisKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0hBTkRMRV9NQVNLCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0hBTkRMRV9PRkZTRVQJCQkxNgorI2RlZmluZQlHUE1JX0VDQ0NUUkxfRUNDX0NNRF9NQVNLCQkJKDB4MyA8PCAxMykKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0VDQ19DTURfT0ZGU0VUCQkJMTMKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0VDQ19DTURfREVDT0RFCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0VDQ19DTURfRU5DT0RFCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0VOQUJMRV9FQ0MJCQkJKDEgPDwgMTIpCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9CVUZGRVJfTUFTS19NQVNLCQkJMHgxZmYKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0JVRkZFUl9NQVNLX09GRlNFVAkJCTAKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0JVRkZFUl9NQVNLX0JDSF9BVVhPTkxZCQkweDEwMAorI2RlZmluZQlHUE1JX0VDQ0NUUkxfQlVGRkVSX01BU0tfQkNIX1BBR0UJCTB4MWZmCisKKyNkZWZpbmUJR1BNSV9FQ0NDT1VOVF9DT1VOVF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUdQTUlfRUNDQ09VTlRfQ09VTlRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfUEFZTE9BRF9BRERSRVNTX01BU0sJCQkoMHgzZmZmZmZmZiA8PCAyKQorI2RlZmluZQlHUE1JX1BBWUxPQURfQUREUkVTU19PRkZTRVQJCQkyCisKKyNkZWZpbmUJR1BNSV9BVVhJTElBUllfQUREUkVTU19NQVNLCQkJKDB4M2ZmZmZmZmYgPDwgMikKKyNkZWZpbmUJR1BNSV9BVVhJTElBUllfQUREUkVTU19PRkZTRVQJCQkyCisKKyNkZWZpbmUJR1BNSV9DVFJMMV9ERUNPVVBMRV9DUwkJCQkoMSA8PCAyNCkKKyNkZWZpbmUJR1BNSV9DVFJMMV9XUk5fRExZX1NFTF9NQVNLCQkJKDB4MyA8PCAyMikKKyNkZWZpbmUJR1BNSV9DVFJMMV9XUk5fRExZX1NFTF9PRkZTRVQJCQkyMgorI2RlZmluZQlHUE1JX0NUUkwxX1RJTUVPVVRfSVJRX0VOCQkJKDEgPDwgMjApCisjZGVmaW5lCUdQTUlfQ1RSTDFfR0FOR0VEX1JEWUJVU1kJCQkoMSA8PCAxOSkKKyNkZWZpbmUJR1BNSV9DVFJMMV9CQ0hfTU9ERQkJCQkoMSA8PCAxOCkKKyNkZWZpbmUJR1BNSV9DVFJMMV9ETExfRU5BQkxFCQkJCSgxIDw8IDE3KQorI2RlZmluZQlHUE1JX0NUUkwxX0hBTEZfUEVSSU9ECQkJCSgxIDw8IDE2KQorI2RlZmluZQlHUE1JX0NUUkwxX1JETl9ERUxBWV9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUJR1BNSV9DVFJMMV9SRE5fREVMQVlfT0ZGU0VUCQkJMTIKKyNkZWZpbmUJR1BNSV9DVFJMMV9ETUEyRUNDX01PREUJCQkJKDEgPDwgMTEpCisjZGVmaW5lCUdQTUlfQ1RSTDFfREVWX0lSUQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUJR1BNSV9DVFJMMV9USU1FT1VUX0lSUQkJCQkoMSA8PCA5KQorI2RlZmluZQlHUE1JX0NUUkwxX0JVUlNUX0VOCQkJCSgxIDw8IDgpCisjZGVmaW5lCUdQTUlfQ1RSTDFfQUJPUlRfV0FJVF9SRVFVRVNUCQkJKDEgPDwgNykKKyNkZWZpbmUJR1BNSV9DVFJMMV9BQk9SVF9XQUlUX0ZPUl9SRUFEWV9DSEFOTkVMX01BU0sJKDB4NyA8PCA0KQorI2RlZmluZQlHUE1JX0NUUkwxX0FCT1JUX1dBSVRfRk9SX1JFQURZX0NIQU5ORUxfT0ZGU0VUCTQKKyNkZWZpbmUJR1BNSV9DVFJMMV9ERVZfUkVTRVQJCQkJKDEgPDwgMykKKyNkZWZpbmUJR1BNSV9DVFJMMV9BVEFfSVJRUkRZX1BPTEFSSVRZCQkJKDEgPDwgMikKKyNkZWZpbmUJR1BNSV9DVFJMMV9DQU1FUkFfTU9ERQkJCQkoMSA8PCAxKQorI2RlZmluZQlHUE1JX0NUUkwxX0dQTUlfTU9ERQkJCQkoMSA8PCAwKQorCisjZGVmaW5lCUdQTUlfVElNSU5HMF9BRERSRVNTX1NFVFVQX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJR1BNSV9USU1JTkcwX0FERFJFU1NfU0VUVVBfT0ZGU0VUCQkxNgorI2RlZmluZQlHUE1JX1RJTUlORzBfREFUQV9IT0xEX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZQlHUE1JX1RJTUlORzBfREFUQV9IT0xEX09GRlNFVAkJCTgKKyNkZWZpbmUJR1BNSV9USU1JTkcwX0RBVEFfU0VUVVBfTUFTSwkJCTB4ZmYKKyNkZWZpbmUJR1BNSV9USU1JTkcwX0RBVEFfU0VUVVBfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfVElNSU5HMV9ERVZJQ0VfQlVTWV9USU1FT1VUX01BU0sJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCUdQTUlfVElNSU5HMV9ERVZJQ0VfQlVTWV9USU1FT1VUX09GRlNFVAkJMTYKKworI2RlZmluZQlHUE1JX1RJTUlORzJfVURNQV9UUlBfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlHUE1JX1RJTUlORzJfVURNQV9UUlBfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJR1BNSV9USU1JTkcyX1VETUFfRU5WX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJR1BNSV9USU1JTkcyX1VETUFfRU5WX09GRlNFVAkJCTE2CisjZGVmaW5lCUdQTUlfVElNSU5HMl9VRE1BX0hPTERfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lCUdQTUlfVElNSU5HMl9VRE1BX0hPTERfT0ZGU0VUCQkJOAorI2RlZmluZQlHUE1JX1RJTUlORzJfVURNQV9TRVRVUF9NQVNLCQkJMHhmZgorI2RlZmluZQlHUE1JX1RJTUlORzJfVURNQV9TRVRVUF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJR1BNSV9EQVRBX0RBVEFfTUFTSwkJCQkweGZmZmZmZmZmCisjZGVmaW5lCUdQTUlfREFUQV9EQVRBX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJR1BNSV9TVEFUX1JFQURZX0JVU1lfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlHUE1JX1NUQVRfUkVBRFlfQlVTWV9PRkZTRVQJCQkyNAorI2RlZmluZQlHUE1JX1NUQVRfUkRZX1RJTUVPVVRfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlHUE1JX1NUQVRfUkRZX1RJTUVPVVRfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJR1BNSV9TVEFUX0RFVjdfRVJST1IJCQkJKDEgPDwgMTUpCisjZGVmaW5lCUdQTUlfU1RBVF9ERVY2X0VSUk9SCQkJCSgxIDw8IDE0KQorI2RlZmluZQlHUE1JX1NUQVRfREVWNV9FUlJPUgkJCQkoMSA8PCAxMykKKyNkZWZpbmUJR1BNSV9TVEFUX0RFVjRfRVJST1IJCQkJKDEgPDwgMTIpCisjZGVmaW5lCUdQTUlfU1RBVF9ERVYzX0VSUk9SCQkJCSgxIDw8IDExKQorI2RlZmluZQlHUE1JX1NUQVRfREVWMl9FUlJPUgkJCQkoMSA8PCAxMCkKKyNkZWZpbmUJR1BNSV9TVEFUX0RFVjFfRVJST1IJCQkJKDEgPDwgOSkKKyNkZWZpbmUJR1BNSV9TVEFUX0RFVjBfRVJST1IJCQkJKDEgPDwgOCkKKyNkZWZpbmUJR1BNSV9TVEFUX0FUQV9JUlEJCQkJKDEgPDwgNCkKKyNkZWZpbmUJR1BNSV9TVEFUX0lOVkFMSURfQlVGRkVSX01BU0sJCQkoMSA8PCAzKQorI2RlZmluZQlHUE1JX1NUQVRfRklGT19FTVBUWQkJCQkoMSA8PCAyKQorI2RlZmluZQlHUE1JX1NUQVRfRklGT19GVUxMCQkJCSgxIDw8IDEpCisjZGVmaW5lCUdQTUlfU1RBVF9QUkVTRU5UCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJR1BNSV9ERUJVR19XQUlUX0ZPUl9SRUFEWV9FTkRfTUFTSwkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUdQTUlfREVCVUdfV0FJVF9GT1JfUkVBRFlfRU5EX09GRlNFVAkJMjQKKyNkZWZpbmUJR1BNSV9ERUJVR19ETUFfU0VOU0VfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHX0RNQV9TRU5TRV9PRkZTRVQJCQkxNgorI2RlZmluZQlHUE1JX0RFQlVHX0RNQVJFUV9NQVNLCQkJCSgweGZmIDw8IDgpCisjZGVmaW5lCUdQTUlfREVCVUdfRE1BUkVRX09GRlNFVAkJCTgKKyNkZWZpbmUJR1BNSV9ERUJVR19DTURfRU5EX01BU0sJCQkJMHhmZgorI2RlZmluZQlHUE1JX0RFQlVHX0NNRF9FTkRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfVkVSU0lPTl9NQUpPUl9NQVNLCQkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlHUE1JX1ZFUlNJT05fTUFKT1JfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJR1BNSV9WRVJTSU9OX01JTk9SX01BU0sJCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUdQTUlfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCQkxNgorI2RlZmluZQlHUE1JX1ZFUlNJT05fU1RFUF9NQVNLCQkJCTB4ZmZmZgorI2RlZmluZQlHUE1JX1ZFUlNJT05fU1RFUF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJR1BNSV9ERUJVRzJfVURNQV9TVEFURV9NQVNLCQkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfVURNQV9TVEFURV9PRkZTRVQJCQkyNAorI2RlZmluZQlHUE1JX0RFQlVHMl9CVVNZCQkJCSgxIDw8IDIzKQorI2RlZmluZQlHUE1JX0RFQlVHMl9QSU5fU1RBVEVfTUFTSwkJCSgweDcgPDwgMjApCisjZGVmaW5lCUdQTUlfREVCVUcyX1BJTl9TVEFURV9PRkZTRVQJCQkyMAorI2RlZmluZQlHUE1JX0RFQlVHMl9QSU5fU1RBVEVfUFNNX0lETEUJCQkoMHgwIDw8IDIwKQorI2RlZmluZQlHUE1JX0RFQlVHMl9QSU5fU1RBVEVfUFNNX0JZVENOVAkJKDB4MSA8PCAyMCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUElOX1NUQVRFX1BTTV9BRERSCQkJKDB4MiA8PCAyMCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUElOX1NUQVRFX1BTTV9TVEFMTAkJCSgweDMgPDwgMjApCisjZGVmaW5lCUdQTUlfREVCVUcyX1BJTl9TVEFURV9QU01fU1RST0JFCQkoMHg0IDw8IDIwKQorI2RlZmluZQlHUE1JX0RFQlVHMl9QSU5fU1RBVEVfUFNNX0FUQVJEWQkJKDB4NSA8PCAyMCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUElOX1NUQVRFX1BTTV9ESE9MRAkJCSgweDYgPDwgMjApCisjZGVmaW5lCUdQTUlfREVCVUcyX1BJTl9TVEFURV9QU01fRE9ORQkJCSgweDcgPDwgMjApCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fSURMRQkJCSgweDAgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX0JZVENOVAkJKDB4MSA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fV0FJVEZFCQkoMHgyIDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX01TTV9XQUlURlIJCSgweDMgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX0RNQVJFUQkJKDB4NCA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fRE1BQUNLCQkoMHg1IDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX01TTV9XQUlURkYJCSgweDYgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX0xERklGTwkJKDB4NyA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fTERETUFSCQkoMHg4IDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX01TTV9SRENNUAkJKDB4OSA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fRE9ORQkJCSgweGEgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX1NZTkQyR1BNSV9CRV9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfU1lORDJHUE1JX0JFX09GRlNFVAkJCTEyCisjZGVmaW5lCUdQTUlfREVCVUcyX0dQTUkyU1lORF9WQUxJRAkJCSgxIDw8IDExKQorI2RlZmluZQlHUE1JX0RFQlVHMl9HUE1JMlNZTkRfUkVBRFkJCQkoMSA8PCAxMCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfU1lORDJHUE1JX1ZBTElECQkJKDEgPDwgOSkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfU1lORDJHUE1JX1JFQURZCQkJKDEgPDwgOCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfVklFV19ERUxBWUVEX1JETgkJCSgxIDw8IDcpCisjZGVmaW5lCUdQTUlfREVCVUcyX1VQREFURV9XSU5ET1cJCQkoMSA8PCA2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9SRE5fVEFQX01BU0sJCQkweDNmCisjZGVmaW5lCUdQTUlfREVCVUcyX1JETl9UQVBfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfREVCVUczX0FQQl9XT1JEX0NOVFJfTUFTSwkJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUczX0FQQl9XT1JEX0NOVFJfT0ZGU0VUCQkxNgorI2RlZmluZQlHUE1JX0RFQlVHM19ERVZfV09SRF9DTlRSX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJR1BNSV9ERUJVRzNfREVWX1dPUkRfQ05UUl9PRkZTRVQJCTAKKworI2VuZGlmCS8qIF9fTVgyOF9SRUdTX0dQTUlfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1pMmMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWkyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTBlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1pMmMuaApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggSTJDIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfSTJDX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19JMkNfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNvbW1vbi5oPgorCisjaWZuZGVmCV9fQVNTRU1CTFlfXworc3RydWN0IG14MjhfaTJjX3JlZ3MgeworCW14MjhfcmVnKGh3X2kyY19jdHJsMCkKKwlteDI4X3JlZyhod19pMmNfdGltaW5nMCkKKwlteDI4X3JlZyhod19pMmNfdGltaW5nMSkKKwlteDI4X3JlZyhod19pMmNfdGltaW5nMikKKwlteDI4X3JlZyhod19pMmNfY3RybDEpCisJbXgyOF9yZWcoaHdfaTJjX3N0YXQpCisJbXgyOF9yZWcoaHdfaTJjX3F1ZXVlY3RybCkKKwlteDI4X3JlZyhod19pMmNfcXVldWVzdGF0KQorCW14MjhfcmVnKGh3X2kyY19xdWV1ZWNtZCkKKwlteDI4X3JlZyhod19pMmNfcXVldWVkYXRhKQorCW14MjhfcmVnKGh3X2kyY19kYXRhKQorCW14MjhfcmVnKGh3X2kyY19kZWJ1ZzApCisJbXgyOF9yZWcoaHdfaTJjX2RlYnVnMSkKKwlteDI4X3JlZyhod19pMmNfdmVyc2lvbikKK307CisjZW5kaWYKKworI2RlZmluZQlJMkNfQ1RSTF9TRlRSU1QJCQkJKDEgPDwgMzEpCisjZGVmaW5lCUkyQ19DVFJMX0NMS0dBVEUJCQkoMSA8PCAzMCkKKyNkZWZpbmUJSTJDX0NUUkxfUlVOCQkJCSgxIDw8IDI5KQorI2RlZmluZQlJMkNfQ1RSTF9QUkVBQ0sJCQkJKDEgPDwgMjcpCisjZGVmaW5lCUkyQ19DVFJMX0FDS05PV0xFREdFCQkJKDEgPDwgMjYpCisjZGVmaW5lCUkyQ19DVFJMX1NFTkRfTkFLX09OX0xBU1QJCSgxIDw8IDI1KQorI2RlZmluZQlJMkNfQ1RSTF9NVUxUSV9NQVNURVIJCQkoMSA8PCAyMykKKyNkZWZpbmUJSTJDX0NUUkxfQ0xPQ0tfSEVMRAkJCSgxIDw8IDIyKQorI2RlZmluZQlJMkNfQ1RSTF9SRVRBSU5fQ0xPQ0sJCQkoMSA8PCAyMSkKKyNkZWZpbmUJSTJDX0NUUkxfUE9TVF9TRU5EX1NUT1AJCQkoMSA8PCAyMCkKKyNkZWZpbmUJSTJDX0NUUkxfUFJFX1NFTkRfU1RBUlQJCQkoMSA8PCAxOSkKKyNkZWZpbmUJSTJDX0NUUkxfU0xBVkVfQUREUkVTU19FTkFCTEUJCSgxIDw8IDE4KQorI2RlZmluZQlJMkNfQ1RSTF9NQVNURVJfTU9ERQkJCSgxIDw8IDE3KQorI2RlZmluZQlJMkNfQ1RSTF9ESVJFQ1RJT04JCQkoMSA8PCAxNikKKyNkZWZpbmUJSTJDX0NUUkxfWEZFUl9DT1VOVF9NQVNLCQkweGZmZmYKKyNkZWZpbmUJSTJDX0NUUkxfWEZFUl9DT1VOVF9PRkZTRVQJCTAKKworI2RlZmluZQlJMkNfVElNSU5HMF9ISUdIX0NPVU5UX01BU0sJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUJSTJDX1RJTUlORzBfSElHSF9DT1VOVF9PRkZTRVQJCTE2CisjZGVmaW5lCUkyQ19USU1JTkcwX1JDVl9DT1VOVF9NQVNLCQkweDNmZgorI2RlZmluZQlJMkNfVElNSU5HMF9SQ1ZfQ09VTlRfT0ZGU0VUCQkwCisKKyNkZWZpbmUJSTJDX1RJTUlORzFfTE9XX0NPVU5UX01BU0sJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUJSTJDX1RJTUlORzFfTE9XX0NPVU5UX09GRlNFVAkJMTYKKyNkZWZpbmUJSTJDX1RJTUlORzFfWE1JVF9DT1VOVF9NQVNLCQkweDNmZgorI2RlZmluZQlJMkNfVElNSU5HMV9YTUlUX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCUkyQ19USU1JTkcyX0JVU19GUkVFX01BU0sJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUJSTJDX1RJTUlORzJfQlVTX0ZSRUVfT0ZGU0VUCQkxNgorI2RlZmluZQlJMkNfVElNSU5HMl9MRUFESU5fQ09VTlRfTUFTSwkJMHgzZmYKKyNkZWZpbmUJSTJDX1RJTUlORzJfTEVBRElOX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCUkyQ19DVFJMMV9SRF9RVUVVRV9JUlEJCQkoMSA8PCAzMCkKKyNkZWZpbmUJSTJDX0NUUkwxX1dSX1FVRVVFX0lSUQkJCSgxIDw8IDI5KQorI2RlZmluZQlJMkNfQ1RSTDFfQ0xSX0dPVF9BX05BSwkJCSgxIDw8IDI4KQorI2RlZmluZQlJMkNfQ1RSTDFfQUNLX01PREUJCQkoMSA8PCAyNykKKyNkZWZpbmUJSTJDX0NUUkwxX0ZPUkNFX0RBVEFfSURMRQkJKDEgPDwgMjYpCisjZGVmaW5lCUkyQ19DVFJMMV9GT1JDRV9DTEtfSURMRQkJKDEgPDwgMjUpCisjZGVmaW5lCUkyQ19DVFJMMV9CQ0FTVF9TTEFWRV9FTgkJKDEgPDwgMjQpCisjZGVmaW5lCUkyQ19DVFJMMV9TTEFWRV9BRERSRVNTX0JZVEVfTUFTSwkoMHhmZiA8PCAxNikKKyNkZWZpbmUJSTJDX0NUUkwxX1NMQVZFX0FERFJFU1NfQllURV9PRkZTRVQJMTYKKyNkZWZpbmUJSTJDX0NUUkwxX0JVU19GUkVFX0lSUV9FTgkJKDEgPDwgMTUpCisjZGVmaW5lCUkyQ19DVFJMMV9EQVRBX0VOR0lORV9DTVBMVF9JUlFfRU4JKDEgPDwgMTQpCisjZGVmaW5lCUkyQ19DVFJMMV9OT19TTEFWRV9BQ0tfSVJRX0VOCQkoMSA8PCAxMykKKyNkZWZpbmUJSTJDX0NUUkwxX09WRVJTSVpFX1hGRVJfVEVSTV9JUlFfRU4JKDEgPDwgMTIpCisjZGVmaW5lCUkyQ19DVFJMMV9FQVJMWV9URVJNX0lSUV9FTgkJKDEgPDwgMTEpCisjZGVmaW5lCUkyQ19DVFJMMV9NQVNURVJfTE9TU19JUlFfRU4JCSgxIDw8IDEwKQorI2RlZmluZQlJMkNfQ1RSTDFfU0xBVkVfU1RPUF9JUlFfRU4JCSgxIDw8IDkpCisjZGVmaW5lCUkyQ19DVFJMMV9TTEFWRV9JUlFfRU4JCQkoMSA8PCA4KQorI2RlZmluZQlJMkNfQ1RSTDFfQlVTX0ZSRUVfSVJRCQkJKDEgPDwgNykKKyNkZWZpbmUJSTJDX0NUUkwxX0RBVEFfRU5HSU5FX0NNUExUX0lSUQkJKDEgPDwgNikKKyNkZWZpbmUJSTJDX0NUUkwxX05PX1NMQVZFX0FDS19JUlEJCSgxIDw8IDUpCisjZGVmaW5lCUkyQ19DVFJMMV9PVkVSU0laRV9YRkVSX1RFUk1fSVJRCSgxIDw8IDQpCisjZGVmaW5lCUkyQ19DVFJMMV9FQVJMWV9URVJNX0lSUQkJKDEgPDwgMykKKyNkZWZpbmUJSTJDX0NUUkwxX01BU1RFUl9MT1NTX0lSUQkJKDEgPDwgMikKKyNkZWZpbmUJSTJDX0NUUkwxX1NMQVZFX1NUT1BfSVJRCQkoMSA8PCAxKQorI2RlZmluZQlJMkNfQ1RSTDFfU0xBVkVfSVJRCQkJKDEgPDwgMCkKKworI2RlZmluZQlJMkNfU1RBVF9NQVNURVJfUFJFU0VOVAkJCSgxIDw8IDMxKQorI2RlZmluZQlJMkNfU1RBVF9TTEFWRV9QUkVTRU5UCQkJKDEgPDwgMzApCisjZGVmaW5lCUkyQ19TVEFUX0FOWV9FTkFCTEVEX0lSUQkJKDEgPDwgMjkpCisjZGVmaW5lCUkyQ19TVEFUX0dPVF9BX05BSwkJCSgxIDw8IDI4KQorI2RlZmluZQlJMkNfU1RBVF9SQ1ZEX1NMQVZFX0FERFJfTUFTSwkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUkyQ19TVEFUX1JDVkRfU0xBVkVfQUREUl9PRkZTRVQJCTE2CisjZGVmaW5lCUkyQ19TVEFUX1NMQVZFX0FERFJfRVFfWkVSTwkJKDEgPDwgMTUpCisjZGVmaW5lCUkyQ19TVEFUX1NMQVZFX0ZPVU5ECQkJKDEgPDwgMTQpCisjZGVmaW5lCUkyQ19TVEFUX1NMQVZFX1NFQVJDSElORwkJKDEgPDwgMTMpCisjZGVmaW5lCUkyQ19TVEFUX0RBVEFfRU5HSU5HX0RNQV9XQUlUCQkoMSA8PCAxMikKKyNkZWZpbmUJSTJDX1NUQVRfQlVTX0JVU1kJCQkoMSA8PCAxMSkKKyNkZWZpbmUJSTJDX1NUQVRfQ0xLX0dFTl9CVVNZCQkJKDEgPDwgMTApCisjZGVmaW5lCUkyQ19TVEFUX0RBVEFfRU5HSU5FX0JVU1kJCSgxIDw8IDkpCisjZGVmaW5lCUkyQ19TVEFUX1NMQVZFX0JVU1kJCQkoMSA8PCA4KQorI2RlZmluZQlJMkNfU1RBVF9CVVNfRlJFRV9JUlFfU1VNTUFSWQkJKDEgPDwgNykKKyNkZWZpbmUJSTJDX1NUQVRfREFUQV9FTkdJTkVfQ01QTFRfSVJRX1NVTU1BUlkJKDEgPDwgNikKKyNkZWZpbmUJSTJDX1NUQVRfTk9fU0xBVkVfQUNLX0lSUV9TVU1NQVJZCSgxIDw8IDUpCisjZGVmaW5lCUkyQ19TVEFUX09WRVJTSVpFX1hGRVJfVEVSTV9JUlFfU1VNTUFSWQkoMSA8PCA0KQorI2RlZmluZQlJMkNfU1RBVF9FQVJMWV9URVJNX0lSUV9TVU1NQVJZCQkoMSA8PCAzKQorI2RlZmluZQlJMkNfU1RBVF9NQVNURVJfTE9TU19JUlFfU1VNTUFSWQkoMSA8PCAyKQorI2RlZmluZQlJMkNfU1RBVF9TTEFWRV9TVE9QX0lSUV9TVU1NQVJZCQkoMSA8PCAxKQorI2RlZmluZQlJMkNfU1RBVF9TTEFWRV9JUlFfU1VNTUFSWQkJKDEgPDwgMCkKKworI2RlZmluZQlJMkNfUVVFVUVDVFJMX1JEX1RIUkVTSF9NQVNLCQkoMHgxZiA8PCAxNikKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9SRF9USFJFU0hfT0ZGU0VUCQkxNgorI2RlZmluZQlJMkNfUVVFVUVDVFJMX1dSX1RIUkVTSF9NQVNLCQkoMHgxZiA8PCA4KQorI2RlZmluZQlJMkNfUVVFVUVDVFJMX1dSX1RIUkVTSF9PRkZTRVQJCTgKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9RVUVVRV9SVU4JCQkoMSA8PCA1KQorI2RlZmluZQlJMkNfUVVFVUVDVFJMX1JEX0NMRUFSCQkJKDEgPDwgNCkKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9XUl9DTEVBUgkJCSgxIDw8IDMpCisjZGVmaW5lCUkyQ19RVUVVRUNUUkxfUElPX1FVRVVFX01PREUJCSgxIDw8IDIpCisjZGVmaW5lCUkyQ19RVUVVRUNUUkxfUkRfUVVFVUVfSVJRX0VOCQkoMSA8PCAxKQorI2RlZmluZQlJMkNfUVVFVUVDVFJMX1dSX1FVRVVFX0lSUV9FTgkJKDEgPDwgMCkKKworI2RlZmluZQlJMkNfUVVFVUVTVEFUX1JEX1FVRVVFX0ZVTEwJCSgxIDw8IDE0KQorI2RlZmluZQlJMkNfUVVFVUVTVEFUX1JEX1FVRVVFX0VNUFRZCQkoMSA8PCAxMykKKyNkZWZpbmUJSTJDX1FVRVVFU1RBVF9SRF9RVUVVRV9DTlRfTUFTSwkJKDB4MWYgPDwgOCkKKyNkZWZpbmUJSTJDX1FVRVVFU1RBVF9SRF9RVUVVRV9DTlRfT0ZGU0VUCTgKKyNkZWZpbmUJSTJDX1FVRVVFU1RBVF9XUl9RVUVVRV9GVUxMCQkoMSA8PCA2KQorI2RlZmluZQlJMkNfUVVFVUVTVEFUX1dSX1FVRVVFX0VNUFRZCQkoMSA8PCA1KQorI2RlZmluZQlJMkNfUVVFVUVTVEFUX1dSX1FVRVVFX0NOVF9NQVNLCQkweDFmCisjZGVmaW5lCUkyQ19RVUVVRVNUQVRfV1JfUVVFVUVfQ05UX09GRlNFVAkwCisKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX1BSRUFDSwkJCSgxIDw8IDI3KQorI2RlZmluZQlJMkNfUVVFVUVDTURfQUNLTk9XTEVER0UJCSgxIDw8IDI2KQorI2RlZmluZQlJMkNfUVVFVUVDTURfU0VORF9OQUtfT05fTEFTVAkJKDEgPDwgMjUpCisjZGVmaW5lCUkyQ19RVUVVRUNNRF9NVUxUSV9NQVNURVIJCSgxIDw8IDIzKQorI2RlZmluZQlJMkNfUVVFVUVDTURfQ0xPQ0tfSEVMRAkJCSgxIDw8IDIyKQorI2RlZmluZQlJMkNfUVVFVUVDTURfUkVUQUlOX0NMT0NLCQkoMSA8PCAyMSkKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX1BPU1RfU0VORF9TVE9QCQkoMSA8PCAyMCkKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX1BSRV9TRU5EX1NUQVJUCQkoMSA8PCAxOSkKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX1NMQVZFX0FERFJFU1NfRU5BQkxFCSgxIDw8IDE4KQorI2RlZmluZQlJMkNfUVVFVUVDTURfTUFTVEVSX01PREUJCSgxIDw8IDE3KQorI2RlZmluZQlJMkNfUVVFVUVDTURfRElSRUNUSU9OCQkJKDEgPDwgMTYpCisjZGVmaW5lCUkyQ19RVUVVRUNNRF9YRkVSX0NPVU5UX01BU0sJCTB4ZmZmZgorI2RlZmluZQlJMkNfUVVFVUVDTURfWEZFUl9DT1VOVF9PRkZTRVQJCTAKKworI2RlZmluZQlJMkNfUVVFVUVEQVRBX0RBVEFfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJSTJDX1FVRVVFREFUQV9EQVRBX09GRlNFVAkJMAorCisjZGVmaW5lCUkyQ19EQVRBX0RBVEFfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJSTJDX0RBVEFfREFUQV9PRkZTRVQJCQkwCisKKyNkZWZpbmUJSTJDX0RFQlVHMF9ETUFSRVEJCQkoMSA8PCAzMSkKKyNkZWZpbmUJSTJDX0RFQlVHMF9ETUFFTkRDTUQJCQkoMSA8PCAzMCkKKyNkZWZpbmUJSTJDX0RFQlVHMF9ETUFLSUNLCQkJKDEgPDwgMjkpCisjZGVmaW5lCUkyQ19ERUJVRzBfRE1BVEVSTUlOQVRFCQkJKDEgPDwgMjgpCisjZGVmaW5lCUkyQ19ERUJVRzBfU1RBVEVfVkFMVUVfTUFTSwkJKDB4MyA8PCAyNikKKyNkZWZpbmUJSTJDX0RFQlVHMF9TVEFURV9WQUxVRV9PRkZTRVQJCTI2CisjZGVmaW5lCUkyQ19ERUJVRzBfRE1BX1NUQVRFX01BU0sJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUJSTJDX0RFQlVHMF9ETUFfU1RBVEVfT0ZGU0VUCQkxNgorI2RlZmluZQlJMkNfREVCVUcwX1NUQVJUX1RPR0dMRQkJCSgxIDw8IDE1KQorI2RlZmluZQlJMkNfREVCVUcwX1NUT1BfVE9HR0xFCQkJKDEgPDwgMTQpCisjZGVmaW5lCUkyQ19ERUJVRzBfR1JBQl9UT0dHTEUJCQkoMSA8PCAxMykKKyNkZWZpbmUJSTJDX0RFQlVHMF9DSEFOR0VfVE9HR0xFCQkoMSA8PCAxMikKKyNkZWZpbmUJSTJDX0RFQlVHMF9TVEFURV9MQVRDSAkJCSgxIDw8IDExKQorI2RlZmluZQlJMkNfREVCVUcwX1NMQVZFX0hPTERfQ0xLCQkoMSA8PCAxMCkKKyNkZWZpbmUJSTJDX0RFQlVHMF9TVEFURV9TVEFURV9NQVNLCQkweDNmZgorI2RlZmluZQlJMkNfREVCVUcwX1NUQVRFX1NUQVRFX09GRlNFVAkJMAorCisjZGVmaW5lCUkyQ19ERUJVRzFfSTJDX0NMS19JTgkJCSgxIDw8IDMxKQorI2RlZmluZQlJMkNfREVCVUcxX0kyQ19EQVRBX0lOCQkJKDEgPDwgMzApCisjZGVmaW5lCUkyQ19ERUJVRzFfRE1BX0JZVEVfRU5BQkxFU19NQVNLCSgweGYgPDwgMjQpCisjZGVmaW5lCUkyQ19ERUJVRzFfRE1BX0JZVEVfRU5BQkxFU19PRkZTRVQJMjQKKyNkZWZpbmUJSTJDX0RFQlVHMV9DTEtfR0VOX1NUQVRFX01BU0sJCSgweGZmIDw8IDE2KQorI2RlZmluZQlJMkNfREVCVUcxX0NMS19HRU5fU1RBVEVfT0ZGU0VUCQkxNgorI2RlZmluZQlJMkNfREVCVUcxX0xTVF9NT0RFX01BU0sJCSgweDMgPDwgOSkKKyNkZWZpbmUJSTJDX0RFQlVHMV9MU1RfTU9ERV9PRkZTRVQJCTkKKyNkZWZpbmUJSTJDX0RFQlVHMV9MT0NBTF9TTEFWRV9URVNUCQkoMSA8PCA4KQorI2RlZmluZQlJMkNfREVCVUcxX0ZPUkNFX0NMS19PTgkJCSgxIDw8IDQpCisjZGVmaW5lCUkyQ19ERUJVRzFfRk9SQ0VfQUJSX0xPU1MJCSgxIDw8IDMpCisjZGVmaW5lCUkyQ19ERUJVRzFfRk9SQ0VfUkNWX0FDSwkJKDEgPDwgMikKKyNkZWZpbmUJSTJDX0RFQlVHMV9GT1JDRV9JMkNfREFUQV9PRQkJKDEgPDwgMSkKKyNkZWZpbmUJSTJDX0RFQlVHMV9GT1JDRV9JMkNfQ0xLX09FCQkoMSA8PCAwKQorCisjZGVmaW5lCUkyQ19WRVJTSU9OX01BSk9SX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJSTJDX1ZFUlNJT05fTUFKT1JfT0ZGU0VUCQkyNAorI2RlZmluZQlJMkNfVkVSU0lPTl9NSU5PUl9NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUkyQ19WRVJTSU9OX01JTk9SX09GRlNFVAkJMTYKKyNkZWZpbmUJSTJDX1ZFUlNJT05fU1RFUF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUkyQ19WRVJTSU9OX1NURVBfT0ZGU0VUCQkJMAorCisjZW5kaWYJLyogX19NWDI4X1JFR1NfSTJDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3Mtb2NvdHAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLW9jb3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyZmQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLW9jb3RwLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IE9DT1RQIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfT0NPVFBfSF9fCisjZGVmaW5lIF9fTVgyOF9SRUdTX09DT1RQX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X29jb3RwX3JlZ3MgeworCW14MjhfcmVnKGh3X29jb3RwX2N0cmwpCQkvKiAweDAgKi8KKwlteDI4X3JlZyhod19vY290cF9kYXRhKQkJLyogMHgxMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2N1c3QwKQkvKiAweDIwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfY3VzdDEpCS8qIDB4MzAgKi8KKwlteDI4X3JlZyhod19vY290cF9jdXN0MikJLyogMHg0MCAqLworCW14MjhfcmVnKGh3X29jb3RwX2N1c3QzKQkvKiAweDUwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfY3J5cHRvMCkJLyogMHg2MCAqLworCW14MjhfcmVnKGh3X29jb3RwX2NyeXB0bzEpCS8qIDB4NzAgKi8KKwlteDI4X3JlZyhod19vY290cF9jcnlwdG8yKQkvKiAweDgwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfY3J5cHRvMykJLyogMHg5MCAqLworCW14MjhfcmVnKGh3X29jb3RwX2h3Y2FwMCkJLyogMHhhMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2h3Y2FwMSkJLyogMHhiMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2h3Y2FwMikJLyogMHhjMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2h3Y2FwMykJLyogMHhkMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2h3Y2FwNCkJLyogMHhlMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2h3Y2FwNSkJLyogMHhmMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3N3Y2FwKQkvKiAweDEwMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2N1c3RjYXApCS8qIDB4MTEwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfbG9jaykJCS8qIDB4MTIwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfb3BzMCkJCS8qIDB4MTMwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfb3BzMSkJCS8qIDB4MTQwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfb3BzMikJCS8qIDB4MTUwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfb3BzMykJCS8qIDB4MTYwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfdW4wKQkJLyogMHgxNzAgKi8KKwlteDI4X3JlZyhod19vY290cF91bjEpCQkvKiAweDE4MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3VuMikJCS8qIDB4MTkwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tMCkJCS8qIDB4MWEwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tMSkJCS8qIDB4MWIwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tMikJCS8qIDB4MWMwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tMykJCS8qIDB4MWQwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tNCkJCS8qIDB4MWUwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tNSkJCS8qIDB4MWYwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tNikJCS8qIDB4MjAwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfcm9tNykJCS8qIDB4MjEwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrMCkJCS8qIDB4MjIwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrMSkJCS8qIDB4MjMwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrMikJCS8qIDB4MjQwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrMykJCS8qIDB4MjUwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrNCkJCS8qIDB4MjYwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrNSkJCS8qIDB4MjcwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrNikJCS8qIDB4MjgwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfc3JrNykJCS8qIDB4MjkwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfdmVyc2lvbikJLyogMHgyYTAgKi8KK307CisjZW5kaWYKKworI2RlZmluZQlPQ09UUF9DVFJMX1dSX1VOTE9DS19NQVNLCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlPQ09UUF9DVFJMX1dSX1VOTE9DS19PRkZTRVQJCTE2CisjZGVmaW5lCU9DT1RQX0NUUkxfV1JfVU5MT0NLX0tFWQkJKDB4M2U3NyA8PCAxNikKKyNkZWZpbmUJT0NPVFBfQ1RSTF9SRUxPQURfU0hBRE9XUwkJKDEgPDwgMTMpCisjZGVmaW5lCU9DT1RQX0NUUkxfUkRfQkFOS19PUEVOCQkJKDEgPDwgMTIpCisjZGVmaW5lCU9DT1RQX0NUUkxfRVJST1IJCQkoMSA8PCA5KQorI2RlZmluZQlPQ09UUF9DVFJMX0JVU1kJCQkJKDEgPDwgOCkKKyNkZWZpbmUJT0NPVFBfQ1RSTF9BRERSX01BU0sJCQkweDNmCisjZGVmaW5lCU9DT1RQX0NUUkxfQUREUl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJT0NPVFBfREFUQV9EQVRBX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCU9DT1RQX0RBVEFfREFUQV9PRkZTRVQJCQkwCisKKyNkZWZpbmUJT0NPVFBfQ1VTVF9CSVRTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCU9DT1RQX0NVU1RfQklUU19PRkZTRVQJCQkwCisKKyNkZWZpbmUJT0NPVFBfQ1JZUFRPX0JJVFNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJT0NPVFBfQ1JZUFRPX0JJVFNfT0ZGU0VUCQkwCisKKyNkZWZpbmUJT0NPVFBfSFdDQVBfQklUU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlPQ09UUF9IV0NBUF9CSVRTX09GRlNFVAkJCTAKKworI2RlZmluZQlPQ09UUF9TV0NBUF9CSVRTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCU9DT1RQX1NXQ0FQX0JJVFNfT0ZGU0VUCQkJMAorCisjZGVmaW5lCU9DT1RQX0NVU1RDQVBfUlRDX1hUQUxfMzI3NjhfUFJFU0VOVAkoMSA8PCAyKQorI2RlZmluZQlPQ09UUF9DVVNUQ0FQX1JUQ19YVEFMXzMyMDAwX1BSRVNFTlQJKDEgPDwgMSkKKworI2RlZmluZQlPQ09UUF9MT0NLX1JPTTcJCQkJKDEgPDwgMzEpCisjZGVmaW5lCU9DT1RQX0xPQ0tfUk9NNgkJCQkoMSA8PCAzMCkKKyNkZWZpbmUJT0NPVFBfTE9DS19ST001CQkJCSgxIDw8IDI5KQorI2RlZmluZQlPQ09UUF9MT0NLX1JPTTQJCQkJKDEgPDwgMjgpCisjZGVmaW5lCU9DT1RQX0xPQ0tfUk9NMwkJCQkoMSA8PCAyNykKKyNkZWZpbmUJT0NPVFBfTE9DS19ST00yCQkJCSgxIDw8IDI2KQorI2RlZmluZQlPQ09UUF9MT0NLX1JPTTEJCQkJKDEgPDwgMjUpCisjZGVmaW5lCU9DT1RQX0xPQ0tfUk9NMAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUJT0NPVFBfTE9DS19IV1NXX1NIQURPV19BTFQJCSgxIDw8IDIzKQorI2RlZmluZQlPQ09UUF9MT0NLX0NSWVBUT0RDUF9BTFQJCSgxIDw8IDIyKQorI2RlZmluZQlPQ09UUF9MT0NLX0NSWVBUT0tFWV9BTFQJCSgxIDw8IDIxKQorI2RlZmluZQlPQ09UUF9MT0NLX1BJTgkJCQkoMSA8PCAyMCkKKyNkZWZpbmUJT0NPVFBfTE9DS19PUFMJCQkJKDEgPDwgMTkpCisjZGVmaW5lCU9DT1RQX0xPQ0tfVU4yCQkJCSgxIDw8IDE4KQorI2RlZmluZQlPQ09UUF9MT0NLX1VOMQkJCQkoMSA8PCAxNykKKyNkZWZpbmUJT0NPVFBfTE9DS19VTjAJCQkJKDEgPDwgMTYpCisjZGVmaW5lCU9DT1RQX0xPQ0tfU1JLCQkJCSgxIDw8IDE1KQorI2RlZmluZQlPQ09UUF9MT0NLX1VOQUxMT0NBVEVEX01BU0sJCSgweDcgPDwgMTIpCisjZGVmaW5lCU9DT1RQX0xPQ0tfVU5BTExPQ0FURURfT0ZGU0VUCQkxMgorI2RlZmluZQlPQ09UUF9MT0NLX1NSS19TSEFET1cJCQkoMSA8PCAxMSkKKyNkZWZpbmUJT0NPVFBfTE9DS19ST01fU0hBRE9XCQkJKDEgPDwgMTApCisjZGVmaW5lCU9DT1RQX0xPQ0tfQ1VTVENBUAkJCSgxIDw8IDkpCisjZGVmaW5lCU9DT1RQX0xPQ0tfSFdTVwkJCQkoMSA8PCA4KQorI2RlZmluZQlPQ09UUF9MT0NLX0NVU1RDQVBfU0hBRE9XCQkoMSA8PCA3KQorI2RlZmluZQlPQ09UUF9MT0NLX0hXU1dfU0hBRE9XCQkJKDEgPDwgNikKKyNkZWZpbmUJT0NPVFBfTE9DS19DUllQVE9EQ1AJCQkoMSA8PCA1KQorI2RlZmluZQlPQ09UUF9MT0NLX0NSWVBUT0tFWQkJCSgxIDw8IDQpCisjZGVmaW5lCU9DT1RQX0xPQ0tfQ1VTVDMJCQkoMSA8PCAzKQorI2RlZmluZQlPQ09UUF9MT0NLX0NVU1QyCQkJKDEgPDwgMikKKyNkZWZpbmUJT0NPVFBfTE9DS19DVVNUMQkJCSgxIDw8IDEpCisjZGVmaW5lCU9DT1RQX0xPQ0tfQ1VTVDAJCQkoMSA8PCAwKQorCisjZGVmaW5lCU9DT1RQX09QU19CSVRTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCU9DT1RQX09QU19CSVRTX09GRlNFVAkJCTAKKworI2RlZmluZQlPQ09UUF9VTl9CSVRTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCU9DT1RQX1VOX0JJVFNfT0ZGU0VUCQkJMAorCisjZGVmaW5lCU9DT1RQX1JPTV9CT09UX01PREVfTUFTSwkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCU9DT1RQX1JPTV9CT09UX01PREVfT0ZGU0VUCQkyNAorI2RlZmluZQlPQ09UUF9ST01fU0RfTU1DX01PREVfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJT0NPVFBfUk9NX1NEX01NQ19NT0RFX09GRlNFVAkJMjIKKyNkZWZpbmUJT0NPVFBfUk9NX1NEX1BPV0VSX0dBVEVfR1BJT19NQVNLCSgweDMgPDwgMjApCisjZGVmaW5lCU9DT1RQX1JPTV9TRF9QT1dFUl9HQVRFX0dQSU9fT0ZGU0VUCTIwCisjZGVmaW5lCU9DT1RQX1JPTV9TRF9QT1dFUl9VUF9ERUxBWV9NQVNLCSgweDNmIDw8IDE0KQorI2RlZmluZQlPQ09UUF9ST01fU0RfUE9XRVJfVVBfREVMQVlfT0ZGU0VUCTE0CisjZGVmaW5lCU9DT1RQX1JPTV9TRF9CVVNfV0lEVEhfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJT0NPVFBfUk9NX1NEX0JVU19XSURUSF9PRkZTRVQJCTEyCisjZGVmaW5lCU9DT1RQX1JPTV9TU1BfU0NLX0lOREVYX01BU0sJCSgweGYgPDwgOCkKKyNkZWZpbmUJT0NPVFBfUk9NX1NTUF9TQ0tfSU5ERVhfT0ZGU0VUCQk4CisjZGVmaW5lCU9DT1RQX1JPTV9FTU1DX1VTRV9ERFIJCQkoMSA8PCA3KQorI2RlZmluZQlPQ09UUF9ST01fRElTQUJMRV9TUElfTk9SX0ZBU1RfUkVBRAkoMSA8PCA2KQorI2RlZmluZQlPQ09UUF9ST01fRU5BQkxFX1VTQl9CT09UX1NFUklBTF9OVU0JKDEgPDwgNSkKKyNkZWZpbmUJT0NPVFBfUk9NX0VOQUJMRV9VTkVOQ1JZUFRFRF9CT09UCSgxIDw8IDQpCisjZGVmaW5lCU9DT1RQX1JPTV9TRF9NQlJfQk9PVAkJCSgxIDw8IDMpCisKKyNkZWZpbmUJT0NPVFBfU1JLX0JJVFNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJT0NPVFBfU1JLX0JJVFNfT0ZGU0VUCQkJMAorCisjZGVmaW5lCU9DT1RQX1ZFUlNJT05fTUFKT1JfTUFTSwkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCU9DT1RQX1ZFUlNJT05fTUFKT1JfT0ZGU0VUCQkyNAorI2RlZmluZQlPQ09UUF9WRVJTSU9OX01JTk9SX01BU0sJCSgweGZmIDw8IDE2KQorI2RlZmluZQlPQ09UUF9WRVJTSU9OX01JTk9SX09GRlNFVAkJMTYKKyNkZWZpbmUJT0NPVFBfVkVSU0lPTl9TVEVQX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJT0NPVFBfVkVSU0lPTl9TVEVQX09GRlNFVAkJMAorCisjZW5kaWYgLyogX19NWDI4X1JFR1NfT0NPVFBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1waW5jdHJsLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1waW5jdHJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3MzljYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXBpbmN0cmwuaApAQCAtMCwwICsxLDEyODQgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFBJTkNUUkwgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfUkVHU19QSU5DVFJMX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19QSU5DVFJMX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X3BpbmN0cmxfcmVncyB7CisJbXgyOF9yZWcoaHdfcGluY3RybF9jdHJsKQkJLyogMHgwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDFbNjBdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWwwKQkJLyogMHgxMDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDEpCQkvKiAweDExMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfbXV4c2VsMikJCS8qIDB4MTIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWwzKQkJLyogMHgxMzAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDQpCQkvKiAweDE0MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfbXV4c2VsNSkJCS8qIDB4MTUwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWw2KQkJLyogMHgxNjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDcpCQkvKiAweDE3MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfbXV4c2VsOCkJCS8qIDB4MTgwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWw5KQkJLyogMHgxOTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDEwKQkJLyogMHgxYTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDExKQkJLyogMHgxYjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDEyKQkJLyogMHgxYzAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDEzKQkJLyogMHgxZDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkMls3Ml07CisKKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMCkJCS8qIDB4MzAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTEpCQkvKiAweDMxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUyKQkJLyogMHgzMjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMykJCS8qIDB4MzMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTQpCQkvKiAweDM0MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmU1KQkJLyogMHgzNTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlNikJCS8qIDB4MzYwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTcpCQkvKiAweDM3MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmU4KQkJLyogMHgzODAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlOSkJCS8qIDB4MzkwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTEwKQkJLyogMHgzYTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMTEpCQkvKiAweDNiMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxMikJCS8qIDB4M2MwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTEzKQkJLyogMHgzZDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMTQpCQkvKiAweDNlMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxNSkJCS8qIDB4M2YwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTE2KQkJLyogMHg0MDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMTcpCQkvKiAweDQxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxOCkJCS8qIDB4NDIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTE5KQkJLyogMHg0MzAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkM1sxMTJdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9wdWxsMCkJCS8qIDB4NjAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9wdWxsMSkJCS8qIDB4NjEwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9wdWxsMikJCS8qIDB4NjIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9wdWxsMykJCS8qIDB4NjMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9wdWxsNCkJCS8qIDB4NjQwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9wdWxsNSkJCS8qIDB4NjUwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9wdWxsNikJCS8qIDB4NjYwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDRbMzZdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb3V0MCkJCS8qIDB4NzAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb3V0MSkJCS8qIDB4NzEwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb3V0MikJCS8qIDB4NzIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb3V0MykJCS8qIDB4NzMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb3V0NCkJCS8qIDB4NzQwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDVbMTA4XTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfZGluMCkJCS8qIDB4OTAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kaW4xKQkJLyogMHg5MTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RpbjIpCQkvKiAweDkyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZGluMykJCS8qIDB4OTMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kaW40KQkJLyogMHg5NDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkNlsxMDhdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb2UwKQkJLyogMHhiMDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RvZTEpCQkvKiAweGIxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG9lMikJCS8qIDB4YjIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb2UzKQkJLyogMHhiMzAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RvZTQpCQkvKiAweGI0MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQ3WzMwMF07CisKKwlteDI4X3JlZyhod19waW5jdHJsX3BpbjJpcnEwKQkJLyogMHgxMDAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9waW4yaXJxMSkJCS8qIDB4MTAxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcGluMmlycTIpCQkvKiAweDEwMjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX3BpbjJpcnEzKQkJLyogMHgxMDMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9waW4yaXJxNCkJCS8qIDB4MTA0MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQ4WzQ0XTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxZW4wKQkJLyogMHgxMTAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFlbjEpCQkvKiAweDExMTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycWVuMikJCS8qIDB4MTEyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxZW4zKQkJLyogMHgxMTMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFlbjQpCQkvKiAweDExNDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkOVs0NF07CisKKwlteDI4X3JlZyhod19waW5jdHJsX2lycWxldmVsMCkJCS8qIDB4MTIwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxbGV2ZWwxKQkJLyogMHgxMjEwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFsZXZlbDIpCQkvKiAweDEyMjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycWxldmVsMykJCS8qIDB4MTIzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxbGV2ZWw0KQkJLyogMHgxMjQwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDEwWzQ0XTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxcG9sMCkJCS8qIDB4MTMwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxcG9sMSkJCS8qIDB4MTMxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxcG9sMikJCS8qIDB4MTMyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxcG9sMykJCS8qIDB4MTMzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxcG9sNCkJCS8qIDB4MTM0MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQxMVs0NF07CisKKwlteDI4X3JlZyhod19waW5jdHJsX2lycXN0YXQwKQkJLyogMHgxNDAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFzdGF0MSkJCS8qIDB4MTQxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxc3RhdDIpCQkvKiAweDE0MjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycXN0YXQzKQkJLyogMHgxNDMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFzdGF0NCkJCS8qIDB4MTQ0MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQxMlszODBdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9lbWlfb2R0X2N0cmwpCS8qIDB4MWE0MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQxM1s3Nl07CisKKwlteDI4X3JlZyhod19waW5jdHJsX2VtaV9kc19jdHJsKQkvKiAweDFiODAgKi8KK307CisjZW5kaWYKKworI2RlZmluZQlQSU5DVFJMX0NUUkxfU0ZUUlNUCQkJCSgxIDw8IDMxKQorI2RlZmluZQlQSU5DVFJMX0NUUkxfQ0xLR0FURQkJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9DVFJMX1BSRVNFTlQ0CQkJCSgxIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0NUUkxfUFJFU0VOVDMJCQkJKDEgPDwgMjMpCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9QUkVTRU5UMgkJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9DVFJMX1BSRVNFTlQxCQkJCSgxIDw8IDIxKQorI2RlZmluZQlQSU5DVFJMX0NUUkxfUFJFU0VOVDAJCQkJKDEgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9JUlFPVVQ0CQkJCSgxIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9JUlFPVVQzCQkJCSgxIDw8IDMpCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9JUlFPVVQyCQkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9JUlFPVVQxCQkJCSgxIDw8IDEpCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9JUlFPVVQwCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjA3X01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wN19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wNl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDZfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDVfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjA1X09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjA0X01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjA0X09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDNfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDNfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wMl9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wMl9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjAxX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjAxX09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDBfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDBfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjI4X01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yOF9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yN19NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjdfT0ZGU0VUCQkyMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjZfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjI2X09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjI1X01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yNV9PRkZTRVQJCTE4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yNF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjRfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjNfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjIzX09GRlNFVAkJMTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjIyX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yMl9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yMV9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjFfT0ZGU0VUCQkxMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjBfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjBfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4xOV9NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4xOV9PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjE4X01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjE4X09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMTdfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMTdfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4xNl9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4xNl9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTVfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjE1X09GRlNFVAkJMzAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjE0X01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xNF9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xM19NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTNfT0ZGU0VUCQkyNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTJfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjEyX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjExX01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xMV9PRkZTRVQJCTIyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xMF9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTBfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDlfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjA5X09GRlNFVAkJMTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjA4X01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wOF9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wN19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDdfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDZfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjA2X09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjA1X01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wNV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wNF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wNF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjAzX01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjAzX09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDJfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDJfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wMV9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wMV9PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjAwX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjAwX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4zMV9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMzFfT0ZGU0VUCQkzMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMzBfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjMwX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI5X01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yOV9PRkZTRVQJCTI2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yOF9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjhfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjdfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI3X09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI2X01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yNl9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yNV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjVfT0ZGU0VUCQkxOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjRfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI0X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjIzX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yM19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yMl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjJfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjFfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjIxX09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjIwX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjIwX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMTlfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMTlfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4xOF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4xOF9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjE3X01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjE3X09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMTZfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMTZfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjE1X01BU0sJCSgweDMgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4xNV9PRkZTRVQJCTMwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4xNF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMTRfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMTNfTUFTSwkJKDB4MyA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjEzX09GRlNFVAkJMjYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjEyX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4xMl9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4xMF9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMTBfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDlfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjA5X09GRlNFVAkJMTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjA4X01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wOF9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wN19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDdfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDZfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjA2X09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjA1X01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wNV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wNF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wNF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjAzX01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjAzX09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDJfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDJfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wMV9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wMV9PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjAwX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjAwX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yN19NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMjdfT0ZGU0VUCQkyMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMjZfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjI2X09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjI1X01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yNV9PRkZTRVQJCTE4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yNF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMjRfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMjFfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjIxX09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjIwX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjIwX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMTlfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMTlfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4xOF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4xOF9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjE3X01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjE3X09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMTZfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMTZfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjE1X01BU0sJCSgweDMgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xNV9PRkZTRVQJCTMwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xNF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTRfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTNfTUFTSwkJKDB4MyA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjEzX09GRlNFVAkJMjYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjEyX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xMl9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xMV9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTFfT0ZGU0VUCQkyMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTBfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjEwX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA5X01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wOV9PRkZTRVQJCTE4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wOF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDhfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDdfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA3X09GRlNFVAkJMTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA2X01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wNl9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wNV9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDVfT0ZGU0VUCQkxMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDRfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDRfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wM19NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wM19PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjAyX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjAyX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDFfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDFfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wMF9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wMF9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMzBfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjMwX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI5X01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yOV9PRkZTRVQJCTI2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yOF9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjhfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjdfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI3X09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI2X01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yNl9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yNV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjVfT0ZGU0VUCQkxOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjRfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI0X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjIzX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yM19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yMl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjJfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjFfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjIxX09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjIwX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjIwX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMThfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMThfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4xN19NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4xN19PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjE2X01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjE2X09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xNV9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTVfT0ZGU0VUCQkzMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTRfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjE0X09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjEzX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xM19PRkZTRVQJCTI2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xMl9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTJfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTFfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjExX09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjEwX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xMF9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wOV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDlfT0ZGU0VUCQkxOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDhfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA4X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA3X01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wN19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wNl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDZfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDVfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA1X09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA0X01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA0X09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDNfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDNfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wMl9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wMl9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjAxX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjAxX09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDBfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDBfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw5X0JBTks0X1BJTjIwX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw5X0JBTks0X1BJTjIwX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDlfQkFOSzRfUElOMTZfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDlfQkFOSzRfUElOMTZfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xNV9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjE1X09GRlNFVAkJMzAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xNF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjE0X09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xM19NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjEzX09GRlNFVAkJMjYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xMl9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjEyX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xMV9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjExX09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xMF9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjEwX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wOV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjA5X09GRlNFVAkJMTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wOF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjA4X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wN19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjA3X09GRlNFVAkJMTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wNl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjA2X09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wNV9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjA1X09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wNF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDRfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDNfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjAzX09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjAyX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wMl9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wMV9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDFfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDBfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjAwX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjZfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4yNl9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjNfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4yM19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjJfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4yMl9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjFfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4yMV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjBfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjIwX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjE5X01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4xOV9PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4xOF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMThfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMTdfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjE3X09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjE2X01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4xNl9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjE0X01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMTRfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjEzX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMTNfT0ZGU0VUCQkyNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjEyX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMTJfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjExX01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMTFfT0ZGU0VUCQkyMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjEwX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMTBfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA5X01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDlfT0ZGU0VUCQkxOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA4X01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDhfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA3X01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDdfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA2X01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDZfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA1X01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDVfT0ZGU0VUCQkxMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA0X01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wNF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wM19NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDNfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDJfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjAyX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjAxX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wMV9PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wMF9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDBfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yNF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjI0X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yM19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjIzX09GRlNFVAkJMTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yMl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjIyX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yMV9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjIxX09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yMF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMjBfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMTlfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjE5X09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjE4X01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4xOF9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4xN19NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMTdfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMTZfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjE2X09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA3X1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDdfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDdfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wNl9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA2X01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA2X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDVfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wNV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wNV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA0X1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDRfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDRfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wM19WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAzX01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAzX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDJfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wMl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAyX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wMV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDFfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wMV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDBfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAwX01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDBfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjNfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yM19NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yM19NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjIyX1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjJfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjJfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yMV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjIxX01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjIxX01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjBfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yMF9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yMF9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE5X1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMTlfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMTlfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xOF9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE4X01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMThfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE3X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xN19NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE3X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xNl9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMTZfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xNl9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yOF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI4X01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI4X01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjdfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yN19NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yN19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI2X1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjZfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yNl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjVfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI1X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjVfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI0X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yNF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI0X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA3X1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDdfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDdfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wNl9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA2X01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA2X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDVfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wNV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wNV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA0X1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDRfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDRfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wM19WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAzX01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAzX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDJfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wMl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAyX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wMV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDFfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wMV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDBfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAwX01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDBfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTVfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xNV9NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xNV9NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjE0X1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTRfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTRfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xM19WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjEzX01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjEzX01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTJfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xMl9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xMl9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjExX1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTFfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTFfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xMF9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjEwX01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTBfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjA5X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4wOV9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjA5X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4wOF9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMDhfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4wOF9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yM19WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIzX01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIzX01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMjJfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yMl9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yMl9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIxX1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMjFfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMjFfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yMF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIwX01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIwX01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMTlfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xOV9NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xOV9NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE4X1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMThfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xOF9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMTdfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE3X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMTdfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE2X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xNl9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE2X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjMxX1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMzFfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMzFfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4zMF9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjMwX01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjMwX01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjlfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yOV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yOV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI4X1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjhfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjhfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yN19WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI3X01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI3X01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjZfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yNl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI2X01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yNV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjVfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yNV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjRfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI0X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjRfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDdfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wN19NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wN19NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjA2X1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDZfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDZfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wNV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjA1X01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjA1X01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDRfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wNF9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wNF9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAzX1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDNfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDNfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wMl9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAyX01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDJfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAxX1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wMV9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAxX01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wMF9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDBfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wMF9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xNV9WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjE1X01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjE1X01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTRfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xNF9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xNF9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjEzX1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTNfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTNfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xMl9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjEyX01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjEyX01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTBfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xMF9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjEwX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4wOV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMDlfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4wOV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMDhfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjA4X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMDhfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjIxX1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjIxX01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4yMV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4yMF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4yMF9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMjBfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMTlfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMTlfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE5X01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE4X1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE4X01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE4X01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMTdfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4xN19NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4xN19NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE2X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMTZfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMTZfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTExX0JBTksyX1BJTjI3X1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTExX0JBTksyX1BJTjI3X01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yN19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yNl9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yNl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yNl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTExX0JBTksyX1BJTjI1X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTFfQkFOSzJfUElOMjVfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTFfQkFOSzJfUElOMjVfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yNF9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTExX0JBTksyX1BJTjI0X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTExX0JBTksyX1BJTjI0X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wN19WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wN19NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDdfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDZfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDZfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjA2X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjA1X1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjA1X01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wNV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wNF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wNF9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDRfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDNfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDNfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAzX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAyX1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAyX01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAyX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDFfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wMV9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wMV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAwX1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDBfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDBfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjE1X1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjE1X01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xNV9NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xNF9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xNF9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTRfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTNfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTNfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEzX01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEyX1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEyX01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xMl9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xMV9WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xMV9NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTFfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTBfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTBfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTBfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4wOV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjA5X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjA5X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMDhfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4wOF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4wOF9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjNfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjNfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIzX01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIyX1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIyX01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4yMl9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4yMV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4yMV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjFfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjBfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjBfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIwX01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjE4X1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjE4X01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjE4X01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMTdfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4xN19NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4xN19NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjE2X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMTZfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMTZfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjMwX1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjMwX01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4zMF9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yOV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yOV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjlfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjhfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjhfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI4X01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI3X1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI3X01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yN19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yNl9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yNl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yNl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI1X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjVfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjVfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yNF9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI0X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI0X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wN19WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wN19NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDdfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDZfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDZfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjA2X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjA1X1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjA1X01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wNV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wNF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wNF9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDRfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDNfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDNfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAzX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAyX1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAyX01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAyX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDFfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wMV9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wMV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAwX1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDBfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDBfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjE1X1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjE1X01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xNV9NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xNF9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xNF9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTRfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTNfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTNfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEzX01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEyX1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEyX01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xMl9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xMV9WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xMV9NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTFfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTBfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTBfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTBfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4wOV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjA5X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjA5X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMDhfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4wOF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4wOF9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFMThfQkFOSzRfUElOMjBfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMThfQkFOSzRfUElOMjBfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE4X0JBTks0X1BJTjIwX01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE4X0JBTks0X1BJTjE2X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMThfQkFOSzRfUElOMTZfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMThfQkFOSzRfUElOMTZfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4yOAkJCSgxIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjI3CQkJKDEgPDwgMjcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMjYJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4yNQkJCSgxIDw8IDI1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjI0CQkJKDEgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMjMJCQkoMSA8PCAyMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4yMgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjIxCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMjAJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4xOQkJCSgxIDw8IDE5KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjE4CQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMTcJCQkoMSA8PCAxNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4xNgkJCSgxIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjA3CQkJKDEgPDwgNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4wNgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMDUJCQkoMSA8PCA1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjA0CQkJKDEgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4wMwkJCSgxIDw8IDMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMDIJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjAxCQkJKDEgPDwgMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4wMAkJCSgxIDw8IDApCisKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4zMQkJCSgxIDw8IDMxKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjMwCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMjkJCQkoMSA8PCAyOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4yOAkJCSgxIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjI3CQkJKDEgPDwgMjcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMjYJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4yNQkJCSgxIDw8IDI1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjI0CQkJKDEgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMjMJCQkoMSA8PCAyMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4yMgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjIxCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMjAJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4xOQkJCSgxIDw8IDE5KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjE4CQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMTcJCQkoMSA8PCAxNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4xNgkJCSgxIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjE1CQkJKDEgPDwgMTUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMTQJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4xMwkJCSgxIDw8IDEzKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjEyCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMTEJCQkoMSA8PCAxMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4xMAkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjA5CQkJKDEgPDwgOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4wOAkJCSgxIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMDcJCQkoMSA8PCA3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjA2CQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4wNQkJCSgxIDw8IDUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMDQJCQkoMSA8PCA0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjAzCQkJKDEgPDwgMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4wMgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMDEJCQkoMSA8PCAxKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjAwCQkJKDEgPDwgMCkKKworI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjI3CQkJKDEgPDwgMjcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMjYJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4yNQkJCSgxIDw8IDI1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjI0CQkJKDEgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMjEJCQkoMSA8PCAyMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4yMAkJCSgxIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjE5CQkJKDEgPDwgMTkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMTgJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4xNwkJCSgxIDw8IDE3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjE2CQkJKDEgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMTUJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4xNAkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjEzCQkJKDEgPDwgMTMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMTIJCQkoMSA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4xMAkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjA5CQkJKDEgPDwgOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4wOAkJCSgxIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMDcJCQkoMSA8PCA3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjA2CQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4wNQkJCSgxIDw8IDUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMDQJCQkoMSA8PCA0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjAzCQkJKDEgPDwgMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4wMgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMDEJCQkoMSA8PCAxKQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjAwCQkJKDEgPDwgMCkKKworI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjMwCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMjkJCQkoMSA8PCAyOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4yOAkJCSgxIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjI3CQkJKDEgPDwgMjcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMjYJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4yNQkJCSgxIDw8IDI1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjI0CQkJKDEgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMjMJCQkoMSA8PCAyMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4yMgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjIxCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMjAJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4xOAkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjE3CQkJKDEgPDwgMTcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMTYJCQkoMSA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4xNQkJCSgxIDw8IDE1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjE0CQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMTMJCQkoMSA8PCAxMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4xMgkJCSgxIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjExCQkJKDEgPDwgMTEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMTAJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4wOQkJCSgxIDw8IDkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMDgJCQkoMSA8PCA4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjA3CQkJKDEgPDwgNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4wNgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMDUJCQkoMSA8PCA1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjA0CQkJKDEgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4wMwkJCSgxIDw8IDMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMDIJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjAxCQkJKDEgPDwgMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4wMAkJCSgxIDw8IDApCisKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4yMAkJCSgxIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjE2CQkJKDEgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMTUJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4xNAkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjEzCQkJKDEgPDwgMTMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMTIJCQkoMSA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4xMQkJCSgxIDw8IDExKQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjEwCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMDkJCQkoMSA8PCA5KQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjA4CQkJKDEgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4wNwkJCSgxIDw8IDcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMDYJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjA1CQkJKDEgPDwgNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4wNAkJCSgxIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMDMJCQkoMSA8PCAzKQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjAyCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4wMQkJCSgxIDw8IDEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMDAJCQkoMSA8PCAwKQorCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMjYJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4yMwkJCSgxIDw8IDIzKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjIyCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMjEJCQkoMSA8PCAyMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4yMAkJCSgxIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjE5CQkJKDEgPDwgMTkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMTgJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4xNwkJCSgxIDw8IDE3KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjE2CQkJKDEgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMTUJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4xNAkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjEzCQkJKDEgPDwgMTMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMTIJCQkoMSA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4xMQkJCSgxIDw8IDExKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjEwCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMDkJCQkoMSA8PCA5KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjA4CQkJKDEgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4wNwkJCSgxIDw8IDcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMDYJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjA1CQkJKDEgPDwgNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4wNAkJCSgxIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMDMJCQkoMSA8PCAzKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjAyCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4wMQkJCSgxIDw8IDEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMDAJCQkoMSA8PCAwKQorCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMjQJCQkoMSA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4yMwkJCSgxIDw8IDIzKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjIyCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMjEJCQkoMSA8PCAyMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4yMAkJCSgxIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjE5CQkJKDEgPDwgMTkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMTgJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4xNwkJCSgxIDw8IDE3KQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjE2CQkJKDEgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMTQJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4xMwkJCSgxIDw8IDEzKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjEyCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMTEJCQkoMSA8PCAxMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4xMAkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjA5CQkJKDEgPDwgOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4wOAkJCSgxIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMDcJCQkoMSA8PCA3KQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjA2CQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4wNQkJCSgxIDw8IDUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMDQJCQkoMSA8PCA0KQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjAzCQkJKDEgPDwgMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4wMgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMDEJCQkoMSA8PCAxKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjAwCQkJKDEgPDwgMCkKKworI2RlZmluZQlQSU5DVFJMX0RPVVQwX0RPVVRfTUFTSwkJCQkweDFmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRE9VVDBfRE9VVF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ET1VUMV9ET1VUX01BU0sJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPVVQxX0RPVVRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRE9VVDJfRE9VVF9NQVNLCQkJCTB4ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPVVQyX0RPVVRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRE9VVDNfRE9VVF9NQVNLCQkJCTB4N2ZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ET1VUM19ET1VUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RPVVQ0X0RPVVRfTUFTSwkJCQkweDFmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPVVQ0X0RPVVRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRElOMF9ESU5fTUFTSwkJCQkweDFmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRElOMF9ESU5fT0ZGU0VUCQkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RJTjFfRElOX01BU0sJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RJTjFfRElOX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ESU4yX0RJTl9NQVNLCQkJCTB4ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RJTjJfRElOX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ESU4zX0RJTl9NQVNLCQkJCTB4N2ZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ESU4zX0RJTl9PRkZTRVQJCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRElONF9ESU5fTUFTSwkJCQkweDFmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RJTjRfRElOX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ET0UwX0RPRV9NQVNLCQkJCTB4MWZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ET0UwX0RPRV9PRkZTRVQJCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRE9FMV9ET0VfTUFTSwkJCQkweGZmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRE9FMV9ET0VfT0ZGU0VUCQkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RPRTJfRE9FX01BU0sJCQkJMHhmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRE9FMl9ET0VfT0ZGU0VUCQkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RPRTNfRE9FX01BU0sJCQkJMHg3ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPRTNfRE9FX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ET0U0X0RPRV9NQVNLCQkJCTB4MWZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRE9FNF9ET0VfT0ZGU0VUCQkJCTAKKworI2RlZmluZQlQSU5DVFJMX1BJTjJJUlEwX1BJTjJJUlFfTUFTSwkJCTB4MWZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRMF9QSU4ySVJRX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX1BJTjJJUlExX1BJTjJJUlFfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRMV9QSU4ySVJRX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX1BJTjJJUlEyX1BJTjJJUlFfTUFTSwkJCTB4ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX1BJTjJJUlEyX1BJTjJJUlFfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfUElOMklSUTNfUElOMklSUV9NQVNLCQkJMHg3ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX1BJTjJJUlEzX1BJTjJJUlFfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfUElOMklSUTRfUElOMklSUV9NQVNLCQkJMHgxZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRNF9QSU4ySVJRX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUUVOMF9JUlFFTl9NQVNLCQkJMHgxZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUUVOMF9JUlFFTl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTjFfSVJRRU5fTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTjFfSVJRRU5fT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRRU4yX0lSUUVOX01BU0sJCQkweGZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTjJfSVJRRU5fT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRRU4zX0lSUUVOX01BU0sJCQkweDdmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRRU4zX0lSUUVOX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUUVONF9JUlFFTl9NQVNLCQkJMHgxZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTjRfSVJRRU5fT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwwX0lSUUxFVkVMX01BU0sJCQkweDFmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwwX0lSUUxFVkVMX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwxX0lSUUxFVkVMX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwxX0lSUUxFVkVMX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwyX0lSUUxFVkVMX01BU0sJCQkweGZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFMRVZFTDJfSVJRTEVWRUxfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFMRVZFTDNfSVJRTEVWRUxfTUFTSwkJCTB4N2ZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFMRVZFTDNfSVJRTEVWRUxfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFMRVZFTDRfSVJRTEVWRUxfTUFTSwkJCTB4MWZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUw0X0lSUUxFVkVMX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRUE9MMF9JUlFQT0xfTUFTSwkJCTB4MWZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0wwX0lSUVBPTF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0wxX0lSUVBPTF9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUVBPTDFfSVJRUE9MX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVBPTDJfSVJRUE9MX01BU0sJCQkweGZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0wyX0lSUVBPTF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0wzX0lSUVBPTF9NQVNLCQkJMHg3ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUVBPTDNfSVJRUE9MX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVBPTDRfSVJRUE9MX01BU0sJCQkweDFmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUVBPTDRfSVJRUE9MX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQwX0lSUVNUQVRfTUFTSwkJCTB4MWZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUMF9JUlFTVEFUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQxX0lSUVNUQVRfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUMV9JUlFTVEFUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQyX0lSUVNUQVRfTUFTSwkJCTB4ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQyX0lSUVNUQVRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRU1RBVDNfSVJRU1RBVF9NQVNLCQkJMHg3ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQzX0lSUVNUQVRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRU1RBVDRfSVJRU1RBVF9NQVNLCQkJMHgxZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUNF9JUlFTVEFUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9BRERSRVNTX0NBTElCX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0FERFJFU1NfQ0FMSUJfT0ZGU0VUCTI2CisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0FERFJFU1NfVExPQURfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfQUREUkVTU19UTE9BRF9PRkZTRVQJMjQKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfQ09OVFJPTF9DQUxJQl9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9DT05UUk9MX0NBTElCX09GRlNFVAkyMgorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9DT05UUk9MX1RMT0FEX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0NPTlRST0xfVExPQURfT0ZGU0VUCTIwCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0RVQUxQQURfQ0FMSUJfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfRFVBTFBBRF9DQUxJQl9PRkZTRVQJMTgKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfRFVBTFBBRF9UTE9BRF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9EVUFMUEFEX1RMT0FEX09GRlNFVAkxNgorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTNfQ0FMSUJfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UzX0NBTElCX09GRlNFVAkxNAorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTNfVExPQURfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UzX1RMT0FEX09GRlNFVAkxMgorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTJfQ0FMSUJfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UyX0NBTElCX09GRlNFVAkxMAorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTJfVExPQURfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTJfVExPQURfT0ZGU0VUCTgKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UxX0NBTElCX01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UxX0NBTElCX09GRlNFVAk2CisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFMV9UTE9BRF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFMV9UTE9BRF9PRkZTRVQJNAorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTBfQ0FMSUJfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTBfQ0FMSUJfT0ZGU0VUCTIKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UwX1RMT0FEX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UwX1RMT0FEX09GRlNFVAkwCisKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9ERFJfTU9ERV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX0REUl9NT0RFX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9ERFJfTU9ERV9tRERSCQkoMHgwIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX0REUl9NT0RFX0dQSU8JCSgweDEgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfRERSX01PREVfTFZERFIyCQkoMHgyIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX0REUl9NT0RFX0REUjIJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfQUREUkVTU19NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX0FERFJFU1NfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX0NPTlRST0xfTUFfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9DT05UUk9MX01BX09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9EVUFMUEFEX01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9EVUFMUEFEX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFM19NQV9NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfU0xJQ0UzX01BX09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFMl9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfU0xJQ0UyX01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFMV9NQV9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfU0xJQ0UxX01BX09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFMF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfU0xJQ0UwX01BX09GRlNFVAkJMAorCisjZW5kaWYgLyogX19NWDI4X1JFR1NfUElOQ1RSTF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXBvd2VyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1wb3dlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTYzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1wb3dlci5oCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBQb3dlciBDb250cm9sbGVyIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfUE9XRVJfSF9fCisjZGVmaW5lIF9fTVgyOF9SRUdTX1BPV0VSX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgeworCW14MjhfcmVnKGh3X3Bvd2VyX2N0cmwpCisJbXgyOF9yZWcoaHdfcG93ZXJfNXZjdHJsKQorCW14MjhfcmVnKGh3X3Bvd2VyX21pbnB3cikKKwlteDI4X3JlZyhod19wb3dlcl9jaGFyZ2UpCisJdWludDMyX3QJaHdfcG93ZXJfdmRkZGN0cmw7CisJdWludDMyX3QJcmVzZXJ2ZWRfdmRkZFszXTsKKwl1aW50MzJfdAlod19wb3dlcl92ZGRhY3RybDsKKwl1aW50MzJfdAlyZXNlcnZlZF92ZGRhWzNdOworCXVpbnQzMl90CWh3X3Bvd2VyX3ZkZGlvY3RybDsKKwl1aW50MzJfdAlyZXNlcnZlZF92ZGRpb1szXTsKKwl1aW50MzJfdAlod19wb3dlcl92ZGRtZW1jdHJsOworCXVpbnQzMl90CXJlc2VydmVkX3ZkZG1lbVszXTsKKwl1aW50MzJfdAlod19wb3dlcl9kY2RjNHAyOworCXVpbnQzMl90CXJlc2VydmVkX2RjZGM0cDJbM107CisJdWludDMyX3QJaHdfcG93ZXJfbWlzYzsKKwl1aW50MzJfdAlyZXNlcnZlZF9taXNjWzNdOworCXVpbnQzMl90CWh3X3Bvd2VyX2RjbGltaXRzOworCXVpbnQzMl90CXJlc2VydmVkX2RjbGltaXRzWzNdOworCW14MjhfcmVnKGh3X3Bvd2VyX2xvb3BjdHJsKQorCXVpbnQzMl90CWh3X3Bvd2VyX3N0czsKKwl1aW50MzJfdAlyZXNlcnZlZF9zdHNbM107CisJbXgyOF9yZWcoaHdfcG93ZXJfc3BlZWQpCisJdWludDMyX3QJaHdfcG93ZXJfYmF0dG1vbml0b3I7CisJdWludDMyX3QJcmVzZXJ2ZWRfYmF0dG1vbml0b3JbM107CisKKwl1aW50MzJfdAlyZXNlcnZlZFs0XTsKKworCW14MjhfcmVnKGh3X3Bvd2VyX3Jlc2V0KQorCW14MjhfcmVnKGh3X3Bvd2VyX2RlYnVnKQorCW14MjhfcmVnKGh3X3Bvd2VyX3RoZXJtYWwpCisJbXgyOF9yZWcoaHdfcG93ZXJfdXNiMWN0cmwpCisJbXgyOF9yZWcoaHdfcG93ZXJfc3BlY2lhbCkKKwlteDI4X3JlZyhod19wb3dlcl92ZXJzaW9uKQorCW14MjhfcmVnKGh3X3Bvd2VyX2FuYWNsa2N0cmwpCisJbXgyOF9yZWcoaHdfcG93ZXJfcmVmY3RybCkKK307CisjZW5kaWYKKworI2RlZmluZQlQT1dFUl9DVFJMX1BTV0lUQ0hfTUlEX1RSQU4JCQkoMSA8PCAyNykKKyNkZWZpbmUJUE9XRVJfQ1RSTF9EQ0RDNFAyX0JPX0lSUQkJCSgxIDw8IDI0KQorI2RlZmluZQlQT1dFUl9DVFJMX0VOSVJRX0RDREM0UDJfQk8JCQkoMSA8PCAyMykKKyNkZWZpbmUJUE9XRVJfQ1RSTF9WREQ1Vl9EUk9PUF9JUlEJCQkoMSA8PCAyMikKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FTklSUV9WREQ1Vl9EUk9PUAkJCSgxIDw8IDIxKQorI2RlZmluZQlQT1dFUl9DVFJMX1BTV0lUQ0hfSVJRCQkJCSgxIDw8IDIwKQorI2RlZmluZQlQT1dFUl9DVFJMX1BTV0lUQ0hfSVJRX1NSQwkJCSgxIDw8IDE5KQorI2RlZmluZQlQT1dFUl9DVFJMX1BPTEFSSVRZX1BTV0lUQ0gJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FTklSUV9QU1dJVENICQkJKDEgPDwgMTcpCisjZGVmaW5lCVBPV0VSX0NUUkxfUE9MQVJJVFlfRENfT0sJCQkoMSA8PCAxNikKKyNkZWZpbmUJUE9XRVJfQ1RSTF9EQ19PS19JUlEJCQkJKDEgPDwgMTUpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfRENfT0sJCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBPV0VSX0NUUkxfQkFUVF9CT19JUlEJCQkJKDEgPDwgMTMpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfQkFUVF9CTwkJCSgxIDw8IDEyKQorI2RlZmluZQlQT1dFUl9DVFJMX1ZERElPX0JPX0lSUQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FTklSUV9WRERJT19CTwkJCSgxIDw8IDEwKQorI2RlZmluZQlQT1dFUl9DVFJMX1ZEREFfQk9fSVJRCQkJCSgxIDw8IDkpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfVkREQV9CTwkJCSgxIDw8IDgpCisjZGVmaW5lCVBPV0VSX0NUUkxfVkRERF9CT19JUlEJCQkJKDEgPDwgNykKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FTklSUV9WREREX0JPCQkJKDEgPDwgNikKKyNkZWZpbmUJUE9XRVJfQ1RSTF9QT0xBUklUWV9WQlVTVkFMSUQJCQkoMSA8PCA1KQorI2RlZmluZQlQT1dFUl9DVFJMX1ZCVVNfVkFMSURfSVJRCQkJKDEgPDwgNCkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FTklSUV9WQlVTX1ZBTElECQkJKDEgPDwgMykKKyNkZWZpbmUJUE9XRVJfQ1RSTF9QT0xBUklUWV9WREQ1Vl9HVF9WRERJTwkJKDEgPDwgMikKKyNkZWZpbmUJUE9XRVJfQ1RSTF9WREQ1Vl9HVF9WRERJT19JUlEJCQkoMSA8PCAxKQorI2RlZmluZQlQT1dFUl9DVFJMX0VOSVJRX1ZERDVWX0dUX1ZERElPCQkJKDEgPDwgMCkKKworI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU0RST09QX1RSU0hfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNEUk9PUF9UUlNIX09GRlNFVAkJMzAKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNEUk9PUF9UUlNIXzRWMwkJCSgweDAgPDwgMzApCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTRFJPT1BfVFJTSF80VjQJCQkoMHgxIDw8IDMwKQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU0RST09QX1RSU0hfNFY1CQkJKDB4MiA8PCAzMCkKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNEUk9PUF9UUlNIXzRWNwkJCSgweDMgPDwgMzApCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9IRUFEUk9PTV9BREpfTUFTSwkJCSgweDcgPDwgMjQpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9IRUFEUk9PTV9BREpfT0ZGU0VUCQkyNAorI2RlZmluZQlQT1dFUl81VkNUUkxfUFdEX0NIQVJHRV80UDJfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1BXRF9DSEFSR0VfNFAyX09GRlNFVAkJMjAKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX01BU0sJCSgweDNmIDw8IDEyKQorI2RlZmluZQlQT1dFUl81VkNUUkxfQ0hBUkdFXzRQMl9JTElNSVRfT0ZGU0VUCQkxMgorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfTUFTSwkJKDB4NyA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfT0ZGU0VUCQk4CisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF8yVjkJCQkoMHgwIDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjAJCQkoMHgxIDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjEJCQkoMHgyIDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjIJCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjMJCQkoMHg0IDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjQJCQkoMHg1IDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjUJCQkoMHg2IDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjYJCQkoMHg3IDw8IDgpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9QV0ROXzVWQlJOT1VUCQkJKDEgPDwgNykKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX0VOQUJMRV9MSU5SRUdfSUxJTUlUCQkoMSA8PCA2KQorI2RlZmluZQlQT1dFUl81VkNUUkxfRENEQ19YRkVSCQkJCSgxIDw8IDUpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfNVZERVRFQ1QJCQkoMSA8PCA0KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RPX0IJCQkoMSA8PCAzKQorI2RlZmluZQlQT1dFUl81VkNUUkxfSUxJTUlUX0VRX1pFUk8JCQkoMSA8PCAyKQorI2RlZmluZQlQT1dFUl81VkNUUkxfUFdSVVBfVkJVU19DTVBTCQkJKDEgPDwgMSkKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX0VOQUJMRV9EQ0RDCQkJKDEgPDwgMCkKKworI2RlZmluZQlQT1dFUl9NSU5QV1JfTE9XUFdSXzRQMgkJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUE9XRVJfTUlOUFdSX1BXRF9CTwkJCQkoMSA8PCAxMikKKyNkZWZpbmUJUE9XRVJfTUlOUFdSX1VTRV9WRERYVEFMX1ZCRwkJCSgxIDw8IDExKQorI2RlZmluZQlQT1dFUl9NSU5QV1JfUFdEX0FOQV9DTVBTCQkJKDEgPDwgMTApCisjZGVmaW5lCVBPV0VSX01JTlBXUl9FTkFCTEVfT1NDCQkJCSgxIDw8IDkpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9TRUxFQ1RfT1NDCQkJCSgxIDw8IDgpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9GQkdfT0ZGCQkJCSgxIDw8IDcpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9ET1VCTEVfRkVUUwkJCSgxIDw8IDYpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9IQUxGRkVUUwkJCQkoMSA8PCA1KQorI2RlZmluZQlQT1dFUl9NSU5QV1JfTEVTU0FOQV9JCQkJCSgxIDw8IDQpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9QV0RfWFRBTDI0CQkJCSgxIDw8IDMpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9EQ19TVE9QQ0xLCQkJCSgxIDw8IDIpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9FTl9EQ19QRk0JCQkJKDEgPDwgMSkKKyNkZWZpbmUJUE9XRVJfTUlOUFdSX0RDX0hBTEZDTEsJCQkJKDEgPDwgMCkKKworI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfTUFTSwkJCSgweDcgPDwgMjQpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9BREpfVk9MVF9PRkZTRVQJCQkyNAorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfTTAyNVAJCQkoMHgxIDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfUDA1MFAJCQkoMHgyIDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfTTA3NVAJCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfUDAyNVAJCQkoMHg0IDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfTTA1MFAJCQkoMHg1IDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfUDA3NVAJCQkoMHg2IDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfTTEwMFAJCQkoMHg3IDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfRU5BQkxFX0xPQUQJCQkoMSA8PCAyMikKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0VOQUJMRV9GQVVMVF9ERVRFQ1QJCSgxIDw8IDIwKQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQ0hSR19TVFNfT0ZGCQkJKDEgPDwgMTkpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9MSUlPTl80UDEJCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9QV0RfQkFUVENIUkcJCQkoMSA8PCAxNikKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0VOQUJMRV9DSEFSR0VSX1VTQjEJCSgxIDw8IDEzKQorI2RlZmluZQlQT1dFUl9DSEFSR0VfRU5BQkxFX0NIQVJHRVJfVVNCMAkJKDEgPDwgMTIpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9TVE9QX0lMSU1JVF9NQVNLCQkJKDB4ZiA8PCA4KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfT0ZGU0VUCQkJOAorI2RlZmluZQlQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfMTBNQQkJCSgweDEgPDwgOCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX1NUT1BfSUxJTUlUXzIwTUEJCQkoMHgyIDw8IDgpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9TVE9QX0lMSU1JVF81ME1BCQkJKDB4NCA8PCA4KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfMTAwTUEJCQkoMHg4IDw8IDgpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JX01BU0sJCQkweDNmCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JX09GRlNFVAkJCTAKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0JBVFRDSFJHX0lfMTBNQQkJCTB4MDEKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0JBVFRDSFJHX0lfMjBNQQkJCTB4MDIKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0JBVFRDSFJHX0lfNTBNQQkJCTB4MDQKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0JBVFRDSFJHX0lfMTAwTUEJCQkweDA4CisjZGVmaW5lCVBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JXzIwME1BCQkJMHgxMAorI2RlZmluZQlQT1dFUl9DSEFSR0VfQkFUVENIUkdfSV80MDBNQQkJCTB4MjAKKworI2RlZmluZQlQT1dFUl9WREREQ1RSTF9BREpUTl9NQVNLCQkJKDB4ZiA8PCAyOCkKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfQURKVE5fT0ZGU0VUCQkJMjgKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfUFdETl9CUk5PVVQJCQkoMSA8PCAyMykKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfRElTQUJMRV9TVEVQUElORwkJCSgxIDw8IDIyKQorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9FTkFCTEVfTElOUkVHCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX0RJU0FCTEVfRkVUCQkJKDEgPDwgMjApCisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF9PRkZTRVQJCTE2CisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfMFNURVBTCQkoMHgwIDw8IDE2KQorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzFTVEVQU19BQk9WRQkoMHgxIDw8IDE2KQorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzFTVEVQU19CRUxPVwkoMHgyIDw8IDE2KQorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzJTVEVQU19CRUxPVwkoMHgzIDw8IDE2KQorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9CT19PRkZTRVRfTUFTSwkJCSgweDcgPDwgOCkKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfQk9fT0ZGU0VUX09GRlNFVAkJCTgKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfVFJHX01BU0sJCQkJMHgxZgorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9UUkdfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX1BXRE5fQlJOT1VUCQkJKDEgPDwgMTkpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0RJU0FCTEVfU1RFUFBJTkcJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfRU5BQkxFX0xJTlJFRwkJCSgxIDw8IDE3KQorI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9ESVNBQkxFX0ZFVAkJCSgxIDw8IDE2KQorI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0xJTlJFR19PRkZTRVRfT0ZGU0VUCQkxMgorI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9MSU5SRUdfT0ZGU0VUXzBTVEVQUwkJKDB4MCA8PCAxMikKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQUJPVkUJKDB4MSA8PCAxMikKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1cJKDB4MiA8PCAxMikKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF8yU1RFUFNfQkVMT1cJKDB4MyA8PCAxMikKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfQk9fT0ZGU0VUX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0JPX09GRlNFVF9PRkZTRVQJCQk4CisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX1RSR19NQVNLCQkJCTB4MWYKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfVFJHX09GRlNFVAkJCTAKKworI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfQURKVE5fTUFTSwkJCSgweGYgPDwgMjApCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9BREpUTl9PRkZTRVQJCQkyMAorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfUFdETl9CUk5PVVQJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0RJU0FCTEVfU1RFUFBJTkcJCSgxIDw8IDE3KQorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfRElTQUJMRV9GRVQJCQkoMSA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfT0ZGU0VUCQkxMgorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfTElOUkVHX09GRlNFVF8wU1RFUFMJCSgweDAgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9MSU5SRUdfT0ZGU0VUXzFTVEVQU19BQk9WRQkoMHgxIDw8IDEyKQorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1cJKDB4MiA8PCAxMikKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfMlNURVBTX0JFTE9XCSgweDMgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9CT19PRkZTRVRfTUFTSwkJCSgweDcgPDwgOCkKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0JPX09GRlNFVF9PRkZTRVQJCTgKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX1RSR19NQVNLCQkJMHgxZgorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfVFJHX09GRlNFVAkJCTAKKworI2RlZmluZQlQT1dFUl9WRERNRU1DVFJMX1BVTExET1dOX0FDVElWRQkJKDEgPDwgMTApCisjZGVmaW5lCVBPV0VSX1ZERE1FTUNUUkxfRU5BQkxFX0lMSU1JVAkJCSgxIDw8IDkpCisjZGVmaW5lCVBPV0VSX1ZERE1FTUNUUkxfRU5BQkxFX0xJTlJFRwkJCSgxIDw8IDgpCisjZGVmaW5lCVBPV0VSX1ZERE1FTUNUUkxfQk9fT0ZGU0VUX01BU0sJCQkoMHg3IDw8IDUpCisjZGVmaW5lCVBPV0VSX1ZERE1FTUNUUkxfQk9fT0ZGU0VUX09GRlNFVAkJNQorI2RlZmluZQlQT1dFUl9WRERNRU1DVFJMX1RSR19NQVNLCQkJMHgxZgorI2RlZmluZQlQT1dFUl9WRERNRU1DVFJMX1RSR19PRkZTRVQJCQkwCisKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9EUk9QT1VUX0NUUkxfTUFTSwkJCSgweGYgPDwgMjgpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMX09GRlNFVAkJMjgKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9EUk9QT1VUX0NUUkxfMjAwTVYJCSgweDMgPDwgMzApCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMXzEwME1WCQkoMHgyIDw8IDMwKQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF81ME1WCQkJKDB4MSA8PCAzMCkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9EUk9QT1VUX0NUUkxfMjVNVgkJCSgweDAgPDwgMzApCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMX1NSQ180UDIJCSgweDAgPDwgMjgpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMX1NSQ180UDJfTFRfQkFUVAkoMHgxIDw8IDI4KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF9TUkNfU0VMCQkoMHgyIDw8IDI4KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0lTVEVBTF9USFJFU0hfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9JU1RFQUxfVEhSRVNIX09GRlNFVAkJMjQKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9FTkFCTEVfNFAyCQkJKDEgPDwgMjMpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRU5BQkxFX0RDREMJCQkoMSA8PCAyMikKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9IWVNUX0RJUgkJCQkoMSA8PCAyMSkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9IWVNUX1RIUkVTSAkJCSgxIDw8IDIwKQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX1RSR19NQVNLCQkJCSgweDcgPDwgMTYpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfVFJHX09GRlNFVAkJCTE2CisjZGVmaW5lCVBPV0VSX0RDREM0UDJfVFJHXzRWMgkJCQkoMHgwIDw8IDE2KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX1RSR180VjEJCQkJKDB4MSA8PCAxNikKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9UUkdfNFYwCQkJCSgweDIgPDwgMTYpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfVFJHXzNWOQkJCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX1RSR19CQVRUCQkJCSgweDQgPDwgMTYpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfQk9fTUFTSwkJCQkoMHgxZiA8PCA4KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0JPX09GRlNFVAkJCQk4CisjZGVmaW5lCVBPV0VSX0RDREM0UDJfQ01QVFJJUF9NQVNLCQkJMHgxZgorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0NNUFRSSVBfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBPV0VSX01JU0NfRlJFUVNFTF9NQVNLCQkJCSgweDcgPDwgNCkKKyNkZWZpbmUJUE9XRVJfTUlTQ19GUkVRU0VMX09GRlNFVAkJCTQKKyNkZWZpbmUJUE9XRVJfTUlTQ19GUkVRU0VMXzIwTUhaCQkJKDB4MSA8PCA0KQorI2RlZmluZQlQT1dFUl9NSVNDX0ZSRVFTRUxfMjRNSFoJCQkoMHgyIDw8IDQpCisjZGVmaW5lCVBPV0VSX01JU0NfRlJFUVNFTF8xOU1IWgkJCSgweDMgPDwgNCkKKyNkZWZpbmUJUE9XRVJfTUlTQ19GUkVRU0VMXzE0TUhaCQkJKDB4NCA8PCA0KQorI2RlZmluZQlQT1dFUl9NSVNDX0ZSRVFTRUxfMThNSFoJCQkoMHg1IDw8IDQpCisjZGVmaW5lCVBPV0VSX01JU0NfRlJFUVNFTF8yMU1IWgkJCSgweDYgPDwgNCkKKyNkZWZpbmUJUE9XRVJfTUlTQ19GUkVRU0VMXzE3TUhaCQkJKDB4NyA8PCA0KQorI2RlZmluZQlQT1dFUl9NSVNDX0RJU0FCTEVfRkVUX0JPX0xPR0lDCQkJKDEgPDwgMykKKyNkZWZpbmUJUE9XRVJfTUlTQ19ERUxBWV9USU1JTkcJCQkJKDEgPDwgMikKKyNkZWZpbmUJUE9XRVJfTUlTQ19URVNUCQkJCQkoMSA8PCAxKQorI2RlZmluZQlQT1dFUl9NSVNDX1NFTF9QTExDTEsJCQkJKDEgPDwgMCkKKworI2RlZmluZQlQT1dFUl9EQ0xJTUlUU19QT1NMSU1JVF9CVUNLX01BU0sJCSgweDdmIDw8IDgpCisjZGVmaW5lCVBPV0VSX0RDTElNSVRTX1BPU0xJTUlUX0JVQ0tfT0ZGU0VUCQk4CisjZGVmaW5lCVBPV0VSX0RDTElNSVRTX05FR0xJTUlUX01BU0sJCQkweDdmCisjZGVmaW5lCVBPV0VSX0RDTElNSVRTX05FVExJTUlUX09GRlNFVAkJCTAKKworI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9UT0dHTEVfRElGCQkJKDEgPDwgMjApCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0hZU1RfU0lHTgkJCSgxIDw8IDE5KQorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9FTl9DTV9IWVNUCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0VOX0RGX0hZU1QJCQkoMSA8PCAxNykKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfQ01fSFlTVF9USFJFU0gJCQkoMSA8PCAxNikKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfREZfSFlTVF9USFJFU0gJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfUkNTQ0FMRV9USFJFU0gJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRU5fUkNTQ0FMRV9NQVNLCQkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRU5fUkNTQ0FMRV9PRkZTRVQJCTEyCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0VOX1JDU0NBTEVfRElTCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRU5fUkNTQ0FMRV8yWAkJCSgweDEgPDwgMTIpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0VOX1JDU0NBTEVfNFgJCQkoMHgyIDw8IDEyKQorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9FTl9SQ1NDQUxFXzhYCQkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfRkZfTUFTSwkJCSgweDcgPDwgOCkKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfRkZfT0ZGU0VUCQkJOAorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9EQ19SX01BU0sJCQkoMHhmIDw8IDQpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0RDX1JfT0ZGU0VUCQkJNAorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9EQ19DX01BU0sJCQkweDMKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfQ19PRkZTRVQJCQkwCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0RDX0NfTUFYCQkJCTB4MAorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9EQ19DXzJYCQkJCTB4MQorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9EQ19DXzRYCQkJCTB4MgorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9EQ19DX01JTgkJCQkweDMKKworI2RlZmluZQlQT1dFUl9TVFNfUFdSVVBfU09VUkNFX01BU0sJCQkoMHgzZiA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfU1RTX1BXUlVQX1NPVVJDRV9PRkZTRVQJCQkyNAorI2RlZmluZQlQT1dFUl9TVFNfUFdSVVBfU09VUkNFXzVWCQkJKDB4MjAgPDwgMjQpCisjZGVmaW5lCVBPV0VSX1NUU19QV1JVUF9TT1VSQ0VfUlRDCQkJKDB4MTAgPDwgMjQpCisjZGVmaW5lCVBPV0VSX1NUU19QV1JVUF9TT1VSQ0VfUFNXSVRDSF9ISUdICQkoMHgwMiA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfU1RTX1BXUlVQX1NPVVJDRV9QU1dJVENIX01JRAkJKDB4MDEgPDwgMjQpCisjZGVmaW5lCVBPV0VSX1NUU19QU1dJVENIX01BU0sJCQkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUE9XRVJfU1RTX1BTV0lUQ0hfT0ZGU0VUCQkJMjAKKyNkZWZpbmUJUE9XRVJfU1RTX1RIRVJNQUxfV0FSTklORwkJCSgxIDw8IDE5KQorI2RlZmluZQlQT1dFUl9TVFNfVkRETUVNX0JPCQkJCSgxIDw8IDE4KQorI2RlZmluZQlQT1dFUl9TVFNfQVZBTElEMF9TVEFUVVMJCQkoMSA8PCAxNykKKyNkZWZpbmUJUE9XRVJfU1RTX0JWQUxJRDBfU1RBVFVTCQkJKDEgPDwgMTYpCisjZGVmaW5lCVBPV0VSX1NUU19WQlVTVkFMSUQwX1NUQVRVUwkJCSgxIDw8IDE1KQorI2RlZmluZQlQT1dFUl9TVFNfU0VTU0VORDBfU1RBVFVTCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBPV0VSX1NUU19CQVRUX0JPCQkJCSgxIDw8IDEzKQorI2RlZmluZQlQT1dFUl9TVFNfVkRENVZfRkFVTFQJCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1NUU19DSFJHU1RTCQkJCSgxIDw8IDExKQorI2RlZmluZQlQT1dFUl9TVFNfRENEQ180UDJfQk8JCQkJKDEgPDwgMTApCisjZGVmaW5lCVBPV0VSX1NUU19EQ19PSwkJCQkJKDEgPDwgOSkKKyNkZWZpbmUJUE9XRVJfU1RTX1ZERElPX0JPCQkJCSgxIDw8IDgpCisjZGVmaW5lCVBPV0VSX1NUU19WRERBX0JPCQkJCSgxIDw8IDcpCisjZGVmaW5lCVBPV0VSX1NUU19WREREX0JPCQkJCSgxIDw8IDYpCisjZGVmaW5lCVBPV0VSX1NUU19WREQ1Vl9HVF9WRERJTwkJCSgxIDw8IDUpCisjZGVmaW5lCVBPV0VSX1NUU19WREQ1Vl9EUk9PUAkJCQkoMSA8PCA0KQorI2RlZmluZQlQT1dFUl9TVFNfQVZBTElEMAkJCQkoMSA8PCAzKQorI2RlZmluZQlQT1dFUl9TVFNfQlZBTElEMAkJCQkoMSA8PCAyKQorI2RlZmluZQlQT1dFUl9TVFNfVkJVU1ZBTElEMAkJCQkoMSA8PCAxKQorI2RlZmluZQlQT1dFUl9TVFNfU0VTU0VORDAJCQkJKDEgPDwgMCkKKworI2RlZmluZQlQT1dFUl9TUEVFRF9TVEFUVVNfTUFTSwkJCQkoMHhmZmZmIDw8IDgpCisjZGVmaW5lCVBPV0VSX1NQRUVEX1NUQVRVU19PRkZTRVQJCQk4CisjZGVmaW5lCVBPV0VSX1NQRUVEX1NUQVRVU19TRUxfTUFTSwkJCSgweDMgPDwgNikKKyNkZWZpbmUJUE9XRVJfU1BFRURfU1RBVFVTX1NFTF9PRkZTRVQJCQk2CisjZGVmaW5lCVBPV0VSX1NQRUVEX1NUQVRVU19TRUxfRENEQ19TVEFUCQkoMHgwIDw8IDYpCisjZGVmaW5lCVBPV0VSX1NQRUVEX1NUQVRVU19TRUxfQ09SRV9TVEFUCQkoMHgxIDw8IDYpCisjZGVmaW5lCVBPV0VSX1NQRUVEX1NUQVRVU19TRUxfQVJNX1NUQVQJCQkoMHgyIDw8IDYpCisjZGVmaW5lCVBPV0VSX1NQRUVEX0NUUkxfTUFTSwkJCQkweDMKKyNkZWZpbmUJUE9XRVJfU1BFRURfQ1RSTF9PRkZTRVQJCQkJMAorI2RlZmluZQlQT1dFUl9TUEVFRF9DVFJMX1NTX09GRgkJCQkweDAKKyNkZWZpbmUJUE9XRVJfU1BFRURfQ1RSTF9TU19PTgkJCQkweDEKKyNkZWZpbmUJUE9XRVJfU1BFRURfQ1RSTF9TU19FTkFCTEUJCQkweDMKKworI2RlZmluZQlQT1dFUl9CQVRUTU9OSVRPUl9CQVRUX1ZBTF9NQVNLCQkJKDB4M2ZmIDw8IDE2KQorI2RlZmluZQlQT1dFUl9CQVRUTU9OSVRPUl9CQVRUX1ZBTF9PRkZTRVQJCTE2CisjZGVmaW5lCVBPV0VSX0JBVFRNT05JVE9SX1BXRE5fQkFUVEJSTk9VVF81VkRFVEVDVF9FTgkoMSA8PCAxMSkKKyNkZWZpbmUJUE9XRVJfQkFUVE1PTklUT1JfRU5fQkFUQURKCQkJKDEgPDwgMTApCisjZGVmaW5lCVBPV0VSX0JBVFRNT05JVE9SX1BXRE5fQkFUVEJSTk9VVAkJKDEgPDwgOSkKKyNkZWZpbmUJUE9XRVJfQkFUVE1PTklUT1JfQlJXTk9VVF9QV0QJCQkoMSA8PCA4KQorI2RlZmluZQlQT1dFUl9CQVRUTU9OSVRPUl9CUldOT1VUX0xWTF9NQVNLCQkweDFmCisjZGVmaW5lCVBPV0VSX0JBVFRNT05JVE9SX0JSV05PVVRfTFZMX09GRlNFVAkJMAorCisjZGVmaW5lCVBPV0VSX1JFU0VUX1VOTE9DS19NQVNLCQkJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCVBPV0VSX1JFU0VUX1VOTE9DS19PRkZTRVQJCQkxNgorI2RlZmluZQlQT1dFUl9SRVNFVF9VTkxPQ0tfS0VZCQkJCSgweDNlNzcgPDwgMTYpCisjZGVmaW5lCVBPV0VSX1JFU0VUX0ZBU1RGQUxMX1BTV0lUQ0hfT0ZGCQkoMSA8PCAyKQorI2RlZmluZQlQT1dFUl9SRVNFVF9QV0RfT0ZGCQkJCSgxIDw8IDEpCisjZGVmaW5lCVBPV0VSX1JFU0VUX1BXRAkJCQkJKDEgPDwgMCkKKworI2RlZmluZQlQT1dFUl9ERUJVR19WQlVTVkFMSURQSU9MT0NLCQkJKDEgPDwgMykKKyNkZWZpbmUJUE9XRVJfREVCVUdfQVZBTElEUElPTE9DSwkJCSgxIDw8IDIpCisjZGVmaW5lCVBPV0VSX0RFQlVHX0JWQUxJRFBJT0xPQ0sJCQkoMSA8PCAxKQorI2RlZmluZQlQT1dFUl9ERUJVR19TRVNTRU5EUElPTE9DSwkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfVEhFUk1BTF9URVNUCQkJCSgxIDw8IDgpCisjZGVmaW5lCVBPV0VSX1RIRVJNQUxfUFdECQkJCSgxIDw8IDcpCisjZGVmaW5lCVBPV0VSX1RIRVJNQUxfTE9XX1BPV0VSCQkJCSgxIDw8IDYpCisjZGVmaW5lCVBPV0VSX1RIRVJNQUxfT0ZGU0VUX0FESl9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZQlQT1dFUl9USEVSTUFMX09GRlNFVF9BREpfT0ZGU0VUCQkJNAorI2RlZmluZQlQT1dFUl9USEVSTUFMX09GRlNFVF9BREpfRU5BQkxFCQkJKDEgPDwgMykKKyNkZWZpbmUJUE9XRVJfVEhFUk1BTF9URU1QX1RIUkVTSE9MRF9NQVNLCQkweDcKKyNkZWZpbmUJUE9XRVJfVEhFUk1BTF9URU1QX1RIUkVTSE9MRF9PRkZTRVQJCTAKKworI2RlZmluZQlQT1dFUl9VU0IxQ1RSTF9BVkFMSUQxCQkJCSgxIDw8IDMpCisjZGVmaW5lCVBPV0VSX1VTQjFDVFJMX0JWQUxJRDEJCQkJKDEgPDwgMikKKyNkZWZpbmUJUE9XRVJfVVNCMUNUUkxfVkJVU1ZBTElEMQkJCSgxIDw8IDEpCisjZGVmaW5lCVBPV0VSX1VTQjFDVFJMX1NFU1NFTkQxCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfU1BFQ0lBTF9URVNUX01BU0sJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlQT1dFUl9TUEVDSUFMX1RFU1RfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBPV0VSX1ZFUlNJT05fTUFKT1JfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlQT1dFUl9WRVJTSU9OX01BSk9SX09GRlNFVAkJCTI0CisjZGVmaW5lCVBPV0VSX1ZFUlNJT05fTUlOT1JfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlQT1dFUl9WRVJTSU9OX01JTk9SX09GRlNFVAkJCTE2CisjZGVmaW5lCVBPV0VSX1ZFUlNJT05fU1RFUF9NQVNLCQkJCTB4ZmZmZgorI2RlZmluZQlQT1dFUl9WRVJTSU9OX1NURVBfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBPV0VSX0FOQUNMS0NUUkxfQ0xLR0FURV8wCQkJKDEgPDwgMzEpCisjZGVmaW5lCVBPV0VSX0FOQUNMS0NUUkxfT1VURElWX01BU0sJCQkoMHg3IDw8IDI4KQorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX09VVERJVl9PRkZTRVQJCQkyOAorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX0lOVkVSVF9PVVRDTEsJCQkoMSA8PCAyNykKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9DTEtHQVRFX0kJCQkoMSA8PCAyNikKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9ESVRIRVJfT0ZGCQkJKDEgPDwgMTApCisjZGVmaW5lCVBPV0VSX0FOQUNMS0NUUkxfU0xPV19ESVRIRVIJCQkoMSA8PCA5KQorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX0lOVkVSVF9JTkNMSwkJCSgxIDw8IDgpCisjZGVmaW5lCVBPV0VSX0FOQUNMS0NUUkxfSU5DTEtfU0hJRlRfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX0lOQ0xLX1NISUZUX09GRlNFVAkJNAorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX0lORElWX01BU0sJCQkweDcKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9JTkRJVl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9GQVNUU0VUVExJTkcJCQkoMSA8PCAyNikKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9SQUlTRV9SRUYJCQkJKDEgPDwgMjUpCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfWFRBTF9CR1JfQklBUwkJCSgxIDw8IDI0KQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX1ZCR19BREpfTUFTSwkJCSgweDcgPDwgMjApCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfVkJHX0FESl9PRkZTRVQJCQkyMAorI2RlZmluZQlQT1dFUl9SRUZDVFJMX0xPV19QV1IJCQkJKDEgPDwgMTkpCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfQklBU19DVFJMX01BU0sJCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX0JJQVNfQ1RSTF9PRkZTRVQJCQkxNgorI2RlZmluZQlQT1dFUl9SRUZDVFJMX1ZERFhUQUxfVE9fVkRERAkJCSgxIDw8IDE0KQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX0FESl9BTkEJCQkJKDEgPDwgMTMpCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfQURKX1ZBRwkJCQkoMSA8PCAxMikKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9BTkFfUkVGVkFMX01BU0sJCQkoMHhmIDw8IDgpCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfQU5BX1JFRlZBTF9PRkZTRVQJCQk4CisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfVkFHX1ZBTF9NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX1ZBR19WQUxfT0ZGU0VUCQkJNAorCisjZW5kaWYJLyogX19NWDI4X1JFR1NfUE9XRVJfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1ydGMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMmZkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1ydGMuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggUlRDIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfUlRDX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19SVENfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNvbW1vbi5oPgorCisjaWZuZGVmCV9fQVNTRU1CTFlfXworc3RydWN0IG14MjhfcnRjX3JlZ3MgeworCW14MjhfcmVnKGh3X3J0Y19jdHJsKQorCW14MjhfcmVnKGh3X3J0Y19zdGF0KQorCW14MjhfcmVnKGh3X3J0Y19taWxsaXNlY29uZHMpCisJbXgyOF9yZWcoaHdfcnRjX3NlY29uZHMpCisJbXgyOF9yZWcoaHdfcnRjX3J0Y19hbGFybSkKKwlteDI4X3JlZyhod19ydGNfd2F0Y2hkb2cpCisJbXgyOF9yZWcoaHdfcnRjX3BlcnNpc3RlbnQwKQorCW14MjhfcmVnKGh3X3J0Y19wZXJzaXN0ZW50MSkKKwlteDI4X3JlZyhod19ydGNfcGVyc2lzdGVudDIpCisJbXgyOF9yZWcoaHdfcnRjX3BlcnNpc3RlbnQzKQorCW14MjhfcmVnKGh3X3J0Y19wZXJzaXN0ZW50NCkKKwlteDI4X3JlZyhod19ydGNfcGVyc2lzdGVudDUpCisJbXgyOF9yZWcoaHdfcnRjX2RlYnVnKQorCW14MjhfcmVnKGh3X3J0Y192ZXJzaW9uKQorfTsKKyNlbmRpZgorCisjZGVmaW5lCVJUQ19DVFJMX1NGVFJTVAkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJUlRDX0NUUkxfQ0xLR0FURQkJCSgxIDw8IDMwKQorI2RlZmluZQlSVENfQ1RSTF9TVVBQUkVTU19DT1BZMkFOQUxPRwkJKDEgPDwgNikKKyNkZWZpbmUJUlRDX0NUUkxfRk9SQ0VfVVBEQVRFCQkJKDEgPDwgNSkKKyNkZWZpbmUJUlRDX0NUUkxfV0FUQ0hET0dFTgkJCSgxIDw8IDQpCisjZGVmaW5lCVJUQ19DVFJMX09ORU1TRUNfSVJRCQkJKDEgPDwgMykKKyNkZWZpbmUJUlRDX0NUUkxfQUxBUk1fSVJRCQkJKDEgPDwgMikKKyNkZWZpbmUJUlRDX0NUUkxfT05FTVNFQ19JUlFfRU4JCQkoMSA8PCAxKQorI2RlZmluZQlSVENfQ1RSTF9BTEFSTV9JUlFfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lCVJUQ19TVEFUX1JUQ19QUkVTRU5UCQkJKDEgPDwgMzEpCisjZGVmaW5lCVJUQ19TVEFUX0FMQVJNX1BSRVNFTlQJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUlRDX1NUQVRfV0FUQ0hET0dfUFJFU0VOVAkJKDEgPDwgMjkpCisjZGVmaW5lCVJUQ19TVEFUX1hUQUwzMjAwMF9QUkVTRU5UCQkoMSA8PCAyOCkKKyNkZWZpbmUJUlRDX1NUQVRfWFRBTDMyNzY4X1BSRVNFTlQJCSgxIDw8IDI3KQorI2RlZmluZQlSVENfU1RBVF9TVEFMRV9SRUdTX01BU0sJCSgweGZmIDw8IDE2KQorI2RlZmluZQlSVENfU1RBVF9TVEFMRV9SRUdTX09GRlNFVAkJMTYKKyNkZWZpbmUJUlRDX1NUQVRfTkVXX1JFR1NfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lCVJUQ19TVEFUX05FV19SRUdTX09GRlNFVAkJOAorCisjZGVmaW5lCVJUQ19NSUxMSVNFQ09ORFNfQ09VTlRfTUFTSwkJMHhmZmZmZmZmZgorI2RlZmluZQlSVENfTUlMTElTRUNPTkRTX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCVJUQ19TRUNPTkRTX0NPVU5UX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCVJUQ19TRUNPTkRTX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCVJUQ19BTEFSTV9WQUxVRV9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlSVENfQUxBUk1fVkFMVUVfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVJUQ19XQVRDSERPR19DT1VOVF9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlSVENfV0FUQ0hET0dfQ09VTlRfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfTUFTSwkoMHhmIDw8IDI4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQURKX1BPU0xJTUlUQlVDS19PRkZTRVQJMjgKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfMlY4MwkoMHgwIDw8IDI4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQURKX1BPU0xJTUlUQlVDS18yVjc4CSgweDEgPDwgMjgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BREpfUE9TTElNSVRCVUNLXzJWNzMJKDB4MiA8PCAyOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfMlY2OAkoMHgzIDw8IDI4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQURKX1BPU0xJTUlUQlVDS18yVjYyCSgweDQgPDwgMjgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BREpfUE9TTElNSVRCVUNLXzJWNTcJKDB4NSA8PCAyOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfMlY1MgkoMHg2IDw8IDI4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQURKX1BPU0xJTUlUQlVDS18yVjQ4CSgweDcgPDwgMjgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9FWFRFUk5BTF9SRVNFVAkJKDEgPDwgMjEpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9USEVSTUFMX1JFU0VUCQkoMSA8PCAyMCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0VOQUJMRV9MUkFEQ19QV1JVUAkoMSA8PCAxOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FVVE9fUkVTVEFSVAkJKDEgPDwgMTcpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9ESVNBQkxFX1BTV0lUQ0gJCSgxIDw8IDE2KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfTE9XRVJCSUFTX01BU0sJCSgweGYgPDwgMTQpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9MT1dFUkJJQVNfT0ZGU0VUCTE0CisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9MT1dFUkJJQVNfTk9NSU5BTAkoMHgwIDw8IDE0KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfTE9XRVJCSUFTX00yNVAJCSgweDEgPDwgMTQpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9MT1dFUkJJQVNfTTUwUAkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0RJU0FCTEVfWFRBTE9LCQkoMSA8PCAxMykKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX01TRUNfUkVTX01BU0sJCSgweDFmIDw8IDgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9NU0VDX1JFU19PRkZTRVQJCTgKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX01TRUNfUkVTXzFNUwkJKDB4MDEgPDwgOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX01TRUNfUkVTXzJNUwkJKDB4MDIgPDwgOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX01TRUNfUkVTXzRNUwkJKDB4MDQgPDwgOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX01TRUNfUkVTXzhNUwkJKDB4MDggPDwgOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX01TRUNfUkVTXzE2TVMJCSgweDEwIDw8IDgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BTEFSTV9XQUtFCQkoMSA8PCA3KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfWFRBTDMyX0ZSRVEJCSgxIDw8IDYpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9YVEFMMzJLSFpfUFdSVVAJCSgxIDw8IDUpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9YVEFMMjRLSFpfUFdSVVAJCSgxIDw8IDQpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9MQ0tfU0VDUwkJKDEgPDwgMykKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FMQVJNX0VOCQkoMSA8PCAyKQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQUxBUk1fV0FLRV9FTgkJKDEgPDwgMSkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0NMT0NLU09VUkNFCQkoMSA8PCAwKQorCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMV9HRU5FUkFMX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQxX0dFTkVSQUxfT0ZGU0VUCQkwCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMV9HRU5FUkFMX09UR19BTFRfUk9MRQkweDAwODAKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQxX0dFTkVSQUxfT1RHX0hOUAkJMHgwMTAwCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMV9HRU5FUkFMX1VTQl9MUE0JCTB4MDIwMAorI2RlZmluZQlSVENfUEVSU0lTVEVOVDFfR0VORVJBTF9TS0lQX0NIRUNLRElTSwkweDA0MDAKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQxX0dFTkVSQUxfVVNCX0JPT1RfUExBWUVSCTB4MDgwMAorI2RlZmluZQlSVENfUEVSU0lTVEVOVDFfR0VORVJBTF9FTlVNXzUwME1BXzJYCTB4MTAwMAorCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMl9HRU5FUkFMX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQyX0dFTkVSQUxfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQzX0dFTkVSQUxfTUFTSwkJMHhmZmZmZmZmZgorI2RlZmluZQlSVENfUEVSU0lTVEVOVDNfR0VORVJBTF9PRkZTRVQJCTAKKworI2RlZmluZQlSVENfUEVSU0lTVEVOVDRfR0VORVJBTF9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UNF9HRU5FUkFMX09GRlNFVAkJMAorCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UNV9HRU5FUkFMX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQ1X0dFTkVSQUxfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUlRDX0RFQlVHX1dBVENIRE9HX1JFU0VUX01BU0sJCSgxIDw8IDEpCisjZGVmaW5lCVJUQ19ERUJVR19XQVRDSERPR19SRVNFVAkJKDEgPDwgMCkKKworI2RlZmluZQlSVENfVkVSU0lPTl9NQUpPUl9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCVJUQ19WRVJTSU9OX01BSk9SX09GRlNFVAkJMjQKKyNkZWZpbmUJUlRDX1ZFUlNJT05fTUlOT1JfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlSVENfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCTE2CisjZGVmaW5lCVJUQ19WRVJTSU9OX1NURVBfTUFTSwkJCTB4ZmZmZgorI2RlZmluZQlSVENfVkVSU0lPTl9TVEVQX09GRlNFVAkJCTAKKworI2VuZGlmCS8qIF9fTVgyOF9SRUdTX1JUQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXNzcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3Mtc3NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzODcwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXNzcC5oCkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBTU1AgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfUkVHU19TU1BfSF9fCisjZGVmaW5lIF9fTVgyOF9SRUdTX1NTUF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF9zc3BfcmVncyB7CisJbXgyOF9yZWcoaHdfc3NwX2N0cmwwKQorCW14MjhfcmVnKGh3X3NzcF9jbWQwKQorCW14MjhfcmVnKGh3X3NzcF9jbWQxKQorCW14MjhfcmVnKGh3X3NzcF94ZmVyX3NpemUpCisJbXgyOF9yZWcoaHdfc3NwX2Jsb2NrX3NpemUpCisJbXgyOF9yZWcoaHdfc3NwX2NvbXByZWYpCisJbXgyOF9yZWcoaHdfc3NwX2NvbXBtYXNrKQorCW14MjhfcmVnKGh3X3NzcF90aW1pbmcpCisJbXgyOF9yZWcoaHdfc3NwX2N0cmwxKQorCW14MjhfcmVnKGh3X3NzcF9kYXRhKQorCW14MjhfcmVnKGh3X3NzcF9zZHJlc3AwKQorCW14MjhfcmVnKGh3X3NzcF9zZHJlc3AxKQorCW14MjhfcmVnKGh3X3NzcF9zZHJlc3AyKQorCW14MjhfcmVnKGh3X3NzcF9zZHJlc3AzKQorCW14MjhfcmVnKGh3X3NzcF9kZHJfY3RybCkKKwlteDI4X3JlZyhod19zc3BfZGxsX2N0cmwpCisJbXgyOF9yZWcoaHdfc3NwX3N0YXR1cykKKwlteDI4X3JlZyhod19zc3BfZGxsX3N0cykKKwlteDI4X3JlZyhod19zc3BfZGVidWcpCisJbXgyOF9yZWcoaHdfc3NwX3ZlcnNpb24pCit9OworI2VuZGlmCisKKyNkZWZpbmUJU1NQX0NUUkwwX1NGVFJTVAkJCSgxIDw8IDMxKQorI2RlZmluZQlTU1BfQ1RSTDBfQ0xLR0FURQkJCSgxIDw8IDMwKQorI2RlZmluZQlTU1BfQ1RSTDBfUlVOCQkJCSgxIDw8IDI5KQorI2RlZmluZQlTU1BfQ1RSTDBfU0RJT19JUlFfQ0hFQ0sJCSgxIDw8IDI4KQorI2RlZmluZQlTU1BfQ1RSTDBfTE9DS19DUwkJCSgxIDw8IDI3KQorI2RlZmluZQlTU1BfQ1RSTDBfSUdOT1JFX0NSQwkJCSgxIDw8IDI2KQorI2RlZmluZQlTU1BfQ1RSTDBfUkVBRAkJCQkoMSA8PCAyNSkKKyNkZWZpbmUJU1NQX0NUUkwwX0RBVEFfWEZFUgkJCSgxIDw8IDI0KQorI2RlZmluZQlTU1BfQ1RSTDBfQlVTX1dJRFRIX01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCVNTUF9DVFJMMF9CVVNfV0lEVEhfT0ZGU0VUCQkyMgorI2RlZmluZQlTU1BfQ1RSTDBfQlVTX1dJRFRIX09ORV9CSVQJCSgweDAgPDwgMjIpCisjZGVmaW5lCVNTUF9DVFJMMF9CVVNfV0lEVEhfRk9VUl9CSVQJCSgweDEgPDwgMjIpCisjZGVmaW5lCVNTUF9DVFJMMF9CVVNfV0lEVEhfRUlHSFRfQklUCQkoMHgyIDw8IDIyKQorI2RlZmluZQlTU1BfQ1RSTDBfV0FJVF9GT1JfSVJRCQkJKDEgPDwgMjEpCisjZGVmaW5lCVNTUF9DVFJMMF9XQUlUX0ZPUl9DTUQJCQkoMSA8PCAyMCkKKyNkZWZpbmUJU1NQX0NUUkwwX0xPTkdfUkVTUAkJCSgxIDw8IDE5KQorI2RlZmluZQlTU1BfQ1RSTDBfQ0hFQ0tfUkVTUAkJCSgxIDw8IDE4KQorI2RlZmluZQlTU1BfQ1RSTDBfR0VUX1JFU1AJCQkoMSA8PCAxNykKKyNkZWZpbmUJU1NQX0NUUkwwX0VOQUJMRQkJCSgxIDw8IDE2KQorCisjZGVmaW5lCVNTUF9DTUQwX1NPRlRfVEVSTUlOQVRFCQkJKDEgPDwgMjYpCisjZGVmaW5lCVNTUF9DTUQwX0RCTF9EQVRBX1JBVEVfRU4JCSgxIDw8IDI1KQorI2RlZmluZQlTU1BfQ01EMF9QUklNX0JPT1RfT1BfRU4JCSgxIDw8IDI0KQorI2RlZmluZQlTU1BfQ01EMF9CT09UX0FDS19FTgkJCSgxIDw8IDIzKQorI2RlZmluZQlTU1BfQ01EMF9TTE9XX0NMS0lOR19FTgkJCSgxIDw8IDIyKQorI2RlZmluZQlTU1BfQ01EMF9DT05UX0NMS0lOR19FTgkJCSgxIDw8IDIxKQorI2RlZmluZQlTU1BfQ01EMF9BUFBFTkRfOENZQwkJCSgxIDw8IDIwKQorI2RlZmluZQlTU1BfQ01EMF9DTURfTUFTSwkJCTB4ZmYKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX09GRlNFVAkJCTAKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19HT19JRExFX1NUQVRFCQkweDAwCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU0VORF9PUF9DT05ECQkweDAxCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfQUxMX1NFTkRfQ0lECQkweDAyCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU0VUX1JFTEFUSVZFX0FERFIJMHgwMworI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFVF9EU1IJCTB4MDQKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19SRVNFUlZFRF81CQkweDA1CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU1dJVENICQkJMHgwNgorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFTEVDVF9ERVNFTEVDVF9DQVJECTB4MDcKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRU5EX0VYVF9DU0QJCTB4MDgKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRU5EX0NTRAkJMHgwOQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFTkRfQ0lECQkweDBhCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfUkVBRF9EQVRfVU5USUxfU1RPUAkweDBiCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU1RPUF9UUkFOU01JU1NJT04JMHgwYworI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFTkRfU1RBVFVTCQkweDBkCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfQlVTVEVTVF9SCQkweDBlCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfR09fSU5BQ1RJVkVfU1RBVEUJMHgwZgorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFVF9CTE9DS0xFTgkJMHgxMAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1JFQURfU0lOR0xFX0JMT0NLCTB4MTEKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19SRUFEX01VTFRJUExFX0JMT0NLCTB4MTIKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19CVVNURVNUX1cJCTB4MTMKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19XUklURV9EQVRfVU5USUxfU1RPUAkweDE0CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU0VUX0JMT0NLX0NPVU5UCTB4MTcKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19XUklURV9CTE9DSwkJMHgxOAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1dSSVRFX01VTFRJUExFX0JMT0NLCTB4MTkKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19QUk9HUkFNX0NJRAkJMHgxYQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1BST0dSQU1fQ1NECQkweDFiCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU0VUX1dSSVRFX1BST1QJCTB4MWMKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19DTFJfV1JJVEVfUFJPVAkJMHgxZAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFTkRfV1JJVEVfUFJPVAkweDFlCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfRVJBU0VfR1JPVVBfU1RBUlQJMHgyMworI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0VSQVNFX0dST1VQX0VORAkweDI0CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfRVJBU0UJCQkweDI2CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfRkFTVF9JTwkJMHgyNworI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0dPX0lSUV9TVEFURQkJMHgyOAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0xPQ0tfVU5MT0NLCQkweDJhCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfQVBQX0NNRAkJMHgzNworI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0dFTl9DTUQJCTB4MzgKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0dPX0lETEVfU1RBVEUJCTB4MDAKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0FMTF9TRU5EX0NJRAkJMHgwMgorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfU0VORF9SRUxBVElWRV9BRERSCTB4MDMKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFVF9EU1IJCQkweDA0CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9JT19TRU5EX09QX0NPTkQJCTB4MDUKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFTEVDVF9ERVNFTEVDVF9DQVJECTB4MDcKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFTkRfQ1NECQkweDA5CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9TRU5EX0NJRAkJMHgwYQorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfU1RPUF9UUkFOU01JU1NJT04JMHgwYworI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfU0VORF9TVEFUVVMJCTB4MGQKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0dPX0lOQUNUSVZFX1NUQVRFCTB4MGYKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFVF9CTE9DS0xFTgkJMHgxMAorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfUkVBRF9TSU5HTEVfQkxPQ0sJMHgxMQorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfUkVBRF9NVUxUSVBMRV9CTE9DSwkweDEyCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9XUklURV9CTE9DSwkJMHgxOAorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfV1JJVEVfTVVMVElQTEVfQkxPQ0sJMHgxOQorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfUFJPR1JBTV9DU0QJCTB4MWIKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFVF9XUklURV9QUk9UCQkweDFjCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9DTFJfV1JJVEVfUFJPVAkJMHgxZAorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfU0VORF9XUklURV9QUk9UCQkweDFlCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9FUkFTRV9XUl9CTEtfU1RBUlQJMHgyMAorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfRVJBU0VfV1JfQkxLX0VORAkweDIxCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9FUkFTRV9HUk9VUF9TVEFSVAkweDIzCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9FUkFTRV9HUk9VUF9FTkQJCTB4MjQKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0VSQVNFCQkJMHgyNgorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfTE9DS19VTkxPQ0sJCTB4MmEKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0lPX1JXX0RJUkVDVAkJMHgzNAorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfSU9fUldfRVhURU5ERUQJCTB4MzUKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0FQUF9DTUQJCQkweDM3CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9HRU5fQ01ECQkJMHgzOAorCisjZGVmaW5lCVNTUF9DTUQxX0NNRF9BUkdfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX0NNRDFfQ01EX0FSR19PRkZTRVQJCQkwCisKKyNkZWZpbmUJU1NQX1hGRVJfU0laRV9YRkVSX0NPVU5UX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX1hGRVJfU0laRV9YRkVSX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCVNTUF9CTE9DS19TSVpFX0JMT0NLX0NPVU5UX01BU0sJCSgweGZmZmZmZiA8PCA0KQorI2RlZmluZQlTU1BfQkxPQ0tfU0laRV9CTE9DS19DT1VOVF9PRkZTRVQJNAorI2RlZmluZQlTU1BfQkxPQ0tfU0laRV9CTE9DS19TSVpFX01BU0sJCTB4ZgorI2RlZmluZQlTU1BfQkxPQ0tfU0laRV9CTE9DS19TSVpFX09GRlNFVAkwCisKKyNkZWZpbmUJU1NQX0NPTVBSRUZfUkVGRVJFTkNFX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX0NPTVBSRUZfUkVGRVJFTkNFX09GRlNFVAkJMAorCisjZGVmaW5lCVNTUF9DT01QTUFTS19NQVNLX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCVNTUF9DT01QTUFTS19NQVNLX09GRlNFVAkJMAorCisjZGVmaW5lCVNTUF9USU1JTkdfVElNRU9VVF9NQVNLCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUJU1NQX1RJTUlOR19USU1FT1VUX09GRlNFVAkJMTYKKyNkZWZpbmUJU1NQX1RJTUlOR19DTE9DS19ESVZJREVfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJU1NQX1RJTUlOR19DTE9DS19ESVZJREVfT0ZGU0VUCQk4CisjZGVmaW5lCVNTUF9USU1JTkdfQ0xPQ0tfUkFURV9NQVNLCQkweGZmCisjZGVmaW5lCVNTUF9USU1JTkdfQ0xPQ0tfUkFURV9PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfQ1RSTDFfU0RJT19JUlEJCQkoMSA8PCAzMSkKKyNkZWZpbmUJU1NQX0NUUkwxX1NESU9fSVJRX0VOCQkJKDEgPDwgMzApCisjZGVmaW5lCVNTUF9DVFJMMV9SRVNQX0VSUl9JUlEJCQkoMSA8PCAyOSkKKyNkZWZpbmUJU1NQX0NUUkwxX1JFU1BfRVJSX0lSUV9FTgkJKDEgPDwgMjgpCisjZGVmaW5lCVNTUF9DVFJMMV9SRVNQX1RJTUVPVVRfSVJRCQkoMSA8PCAyNykKKyNkZWZpbmUJU1NQX0NUUkwxX1JFU1BfVElNRU9VVF9JUlFfRU4JCSgxIDw8IDI2KQorI2RlZmluZQlTU1BfQ1RSTDFfREFUQV9USU1FT1VUX0lSUQkJKDEgPDwgMjUpCisjZGVmaW5lCVNTUF9DVFJMMV9EQVRBX1RJTUVPVVRfSVJRX0VOCQkoMSA8PCAyNCkKKyNkZWZpbmUJU1NQX0NUUkwxX0RBVEFfQ1JDX0lSUQkJCSgxIDw8IDIzKQorI2RlZmluZQlTU1BfQ1RSTDFfREFUQV9DUkNfSVJRX0VOCQkoMSA8PCAyMikKKyNkZWZpbmUJU1NQX0NUUkwxX0ZJRk9fVU5ERVJSVU5fSVJRCQkoMSA8PCAyMSkKKyNkZWZpbmUJU1NQX0NUUkwxX0ZJRk9fVU5ERVJSVU5fRU4JCSgxIDw8IDIwKQorI2RlZmluZQlTU1BfQ1RSTDFfQ0VBVEFfQ0NTX0VSUl9JUlEJCSgxIDw8IDE5KQorI2RlZmluZQlTU1BfQ1RSTDFfQ0VBVEFfQ0NTX0VSUl9JUlFfRU4JCSgxIDw8IDE4KQorI2RlZmluZQlTU1BfQ1RSTDFfUkVDVl9USU1FT1VUX0lSUQkJKDEgPDwgMTcpCisjZGVmaW5lCVNTUF9DVFJMMV9SRUNWX1RJTUVPVVRfSVJRX0VOCQkoMSA8PCAxNikKKyNkZWZpbmUJU1NQX0NUUkwxX0ZJRk9fT1ZFUlJVTl9JUlEJCSgxIDw8IDE1KQorI2RlZmluZQlTU1BfQ1RSTDFfRklGT19PVkVSUlVOX0lSUV9FTgkJKDEgPDwgMTQpCisjZGVmaW5lCVNTUF9DVFJMMV9ETUFfRU5BQkxFCQkJKDEgPDwgMTMpCisjZGVmaW5lCVNTUF9DVFJMMV9DRUFUQV9DQ1NfRVJSX0VOCQkoMSA8PCAxMikKKyNkZWZpbmUJU1NQX0NUUkwxX1NMQVZFX09VVF9ESVNBQkxFCQkoMSA8PCAxMSkKKyNkZWZpbmUJU1NQX0NUUkwxX1BIQVNFCQkJCSgxIDw8IDEwKQorI2RlZmluZQlTU1BfQ1RSTDFfUE9MQVJJVFkJCQkoMSA8PCA5KQorI2RlZmluZQlTU1BfQ1RSTDFfU0xBVkVfTU9ERQkJCSgxIDw8IDgpCisjZGVmaW5lCVNTUF9DVFJMMV9XT1JEX0xFTkdUSF9NQVNLCQkoMHhmIDw8IDQpCisjZGVmaW5lCVNTUF9DVFJMMV9XT1JEX0xFTkdUSF9PRkZTRVQJCTQKKyNkZWZpbmUJU1NQX0NUUkwxX1dPUkRfTEVOR1RIX1JFU0VSVkVEMAkJKDB4MCA8PCA0KQorI2RlZmluZQlTU1BfQ1RSTDFfV09SRF9MRU5HVEhfUkVTRVJWRUQxCQkoMHgxIDw8IDQpCisjZGVmaW5lCVNTUF9DVFJMMV9XT1JEX0xFTkdUSF9SRVNFUlZFRDIJCSgweDIgPDwgNCkKKyNkZWZpbmUJU1NQX0NUUkwxX1dPUkRfTEVOR1RIX0ZPVVJfQklUUwkJKDB4MyA8PCA0KQorI2RlZmluZQlTU1BfQ1RSTDFfV09SRF9MRU5HVEhfRUlHSFRfQklUUwkoMHg3IDw8IDQpCisjZGVmaW5lCVNTUF9DVFJMMV9XT1JEX0xFTkdUSF9TSVhURUVOX0JJVFMJKDB4ZiA8PCA0KQorI2RlZmluZQlTU1BfQ1RSTDFfU1NQX01PREVfTUFTSwkJCTB4ZgorI2RlZmluZQlTU1BfQ1RSTDFfU1NQX01PREVfT0ZGU0VUCQkwCisjZGVmaW5lCVNTUF9DVFJMMV9TU1BfTU9ERV9TUEkJCQkweDAKKyNkZWZpbmUJU1NQX0NUUkwxX1NTUF9NT0RFX1NTSQkJCTB4MQorI2RlZmluZQlTU1BfQ1RSTDFfU1NQX01PREVfU0RfTU1DCQkweDMKKyNkZWZpbmUJU1NQX0NUUkwxX1NTUF9NT0RFX01TCQkJMHg0CisKKyNkZWZpbmUJU1NQX0RBVEFfREFUQV9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlTU1BfREFUQV9EQVRBX09GRlNFVAkJCTAKKworI2RlZmluZQlTU1BfU0RSRVNQMF9SRVNQMF9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlTU1BfU0RSRVNQMF9SRVNQMF9PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfU0RSRVNQMV9SRVNQMV9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlTU1BfU0RSRVNQMV9SRVNQMV9PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfU0RSRVNQMl9SRVNQMl9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlTU1BfU0RSRVNQMl9SRVNQMl9PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfU0RSRVNQM19SRVNQM19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlTU1BfU0RSRVNQM19SRVNQM19PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfRERSX0NUUkxfRE1BX0JVUlNUX1RZUEVfTUFTSwkoMHgzIDw8IDMwKQorI2RlZmluZQlTU1BfRERSX0NUUkxfRE1BX0JVUlNUX1RZUEVfT0ZGU0VUCTMwCisjZGVmaW5lCVNTUF9ERFJfQ1RSTF9OSUJCTEVfUE9TCQkJKDEgPDwgMSkKKyNkZWZpbmUJU1NQX0REUl9DVFJMX1RYQ0xLX0RFTEFZX1RZUEUJCSgxIDw8IDApCisKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1JFRl9VUERBVEVfSU5UX01BU0sJKDB4ZiA8PCAyOCkKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1JFRl9VUERBVEVfSU5UX09GRlNFVAkyOAorI2RlZmluZQlTU1BfRExMX0NUUkxfU0xWX1VQREFURV9JTlRfTUFTSwkoMHhmZiA8PCAyMCkKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1NMVl9VUERBVEVfSU5UX09GRlNFVAkyMAorI2RlZmluZQlTU1BfRExMX0NUUkxfU0xWX09WRVJSSURFX1ZBTF9NQVNLCSgweDNmIDw8IDEwKQorI2RlZmluZQlTU1BfRExMX0NUUkxfU0xWX09WRVJSSURFX1ZBTF9PRkZTRVQJMTAKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1NMVl9PVkVSUklERQkJKDEgPDwgOSkKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX0dBVEVfVVBEQVRFCQkoMSA8PCA3KQorI2RlZmluZQlTU1BfRExMX0NUUkxfU0xWX0RMWV9UQVJHRVRfTUFTSwkoMHhmIDw8IDMpCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9TTFZfRExZX1RBUkdFVF9PRkZTRVQJMworI2RlZmluZQlTU1BfRExMX0NUUkxfU0xWX0ZPUkNFX1VQRAkJKDEgPDwgMikKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1JFU0VUCQkJKDEgPDwgMSkKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX0VOQUJMRQkJCSgxIDw8IDApCisKKyNkZWZpbmUJU1NQX1NUQVRVU19QUkVTRU5UCQkJKDEgPDwgMzEpCisjZGVmaW5lCVNTUF9TVEFUVVNfTVNfUFJFU0VOVAkJCSgxIDw8IDMwKQorI2RlZmluZQlTU1BfU1RBVFVTX1NEX1BSRVNFTlQJCQkoMSA8PCAyOSkKKyNkZWZpbmUJU1NQX1NUQVRVU19DQVJEX0RFVEVDVAkJCSgxIDw8IDI4KQorI2RlZmluZQlTU1BfU1RBVFVTX0RNQUJVUlNUCQkJKDEgPDwgMjIpCisjZGVmaW5lCVNTUF9TVEFUVVNfRE1BU0VOU0UJCQkoMSA8PCAyMSkKKyNkZWZpbmUJU1NQX1NUQVRVU19ETUFURVJNCQkJKDEgPDwgMjApCisjZGVmaW5lCVNTUF9TVEFUVVNfRE1BUkVRCQkJKDEgPDwgMTkpCisjZGVmaW5lCVNTUF9TVEFUVVNfRE1BRU5ECQkJKDEgPDwgMTgpCisjZGVmaW5lCVNTUF9TVEFUVVNfU0RJT19JUlEJCQkoMSA8PCAxNykKKyNkZWZpbmUJU1NQX1NUQVRVU19SRVNQX0NSQ19FUlIJCQkoMSA8PCAxNikKKyNkZWZpbmUJU1NQX1NUQVRVU19SRVNQX0VSUgkJCSgxIDw8IDE1KQorI2RlZmluZQlTU1BfU1RBVFVTX1JFU1BfVElNRU9VVAkJCSgxIDw8IDE0KQorI2RlZmluZQlTU1BfU1RBVFVTX0RBVEFfQ1JDX0VSUgkJCSgxIDw8IDEzKQorI2RlZmluZQlTU1BfU1RBVFVTX1RJTUVPVVQJCQkoMSA8PCAxMikKKyNkZWZpbmUJU1NQX1NUQVRVU19SRUNWX1RJTUVPVVRfU1RBVAkJKDEgPDwgMTEpCisjZGVmaW5lCVNTUF9TVEFUVVNfQ0VBVEFfQ0NTX0VSUgkJKDEgPDwgMTApCisjZGVmaW5lCVNTUF9TVEFUVVNfRklGT19PVlJGTFcJCQkoMSA8PCA5KQorI2RlZmluZQlTU1BfU1RBVFVTX0ZJRk9fRlVMTAkJCSgxIDw8IDgpCisjZGVmaW5lCVNTUF9TVEFUVVNfRklGT19FTVBUWQkJCSgxIDw8IDUpCisjZGVmaW5lCVNTUF9TVEFUVVNfRklGT19VTkRSRkxXCQkJKDEgPDwgNCkKKyNkZWZpbmUJU1NQX1NUQVRVU19DTURfQlVTWQkJCSgxIDw8IDMpCisjZGVmaW5lCVNTUF9TVEFUVVNfREFUQV9CVVNZCQkJKDEgPDwgMikKKyNkZWZpbmUJU1NQX1NUQVRVU19CVVNZCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJU1NQX0RMTF9TVFNfUkVGX1NFTF9NQVNLCQkoMHgzZiA8PCA4KQorI2RlZmluZQlTU1BfRExMX1NUU19SRUZfU0VMX09GRlNFVAkJOAorI2RlZmluZQlTU1BfRExMX1NUU19TTFZfU0VMX01BU0sJCSgweDNmIDw8IDIpCisjZGVmaW5lCVNTUF9ETExfU1RTX1NMVl9TRUxfT0ZGU0VUCQkyCisjZGVmaW5lCVNTUF9ETExfU1RTX1JFRl9MT0NLCQkJKDEgPDwgMSkKKyNkZWZpbmUJU1NQX0RMTF9TVFNfU0xWX0xPQ0sJCQkoMSA8PCAwKQorCisjZGVmaW5lCVNTUF9ERUJVR19EQVRBQ1JDX0VSUl9NQVNLCQkoMHhmIDw8IDI4KQorI2RlZmluZQlTU1BfREVCVUdfREFUQUNSQ19FUlJfT0ZGU0VUCQkyOAorI2RlZmluZQlTU1BfREVCVUdfREFUQV9TVEFMTAkJCSgxIDw8IDI3KQorI2RlZmluZQlTU1BfREVCVUdfREFUX1NNX01BU0sJCQkoMHg3IDw8IDI0KQorI2RlZmluZQlTU1BfREVCVUdfREFUX1NNX09GRlNFVAkJCTI0CisjZGVmaW5lCVNTUF9ERUJVR19EQVRfU01fRFNNX0lETEUJCSgweDAgPDwgMjQpCisjZGVmaW5lCVNTUF9ERUJVR19EQVRfU01fRFNNX1dPUkQJCSgweDIgPDwgMjQpCisjZGVmaW5lCVNTUF9ERUJVR19EQVRfU01fRFNNX0NSQzEJCSgweDMgPDwgMjQpCisjZGVmaW5lCVNTUF9ERUJVR19EQVRfU01fRFNNX0NSQzIJCSgweDQgPDwgMjQpCisjZGVmaW5lCVNTUF9ERUJVR19EQVRfU01fRFNNX0VORAkJKDB4NSA8PCAyNCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTUFTSwkJCSgweGYgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX09GRlNFVAkJMjAKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19JRExFCQkoMHgwIDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX0NLT04JCSgweDEgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfQlMxCQkoMHgyIDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX1RQQwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19CUzIJCSgweDQgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfSERTSEsJCSgweDUgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfQlMzCQkoMHg2IDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX1JXCQkoMHg3IDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX0NSQzEJCSgweDggPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfQ1JDMgkJKDB4OSA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19CUzAJCSgweGEgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfRU5EMQkJKDB4YiA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19FTkQyVwkJKDB4YyA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19FTkQyUgkJKDB4ZCA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19ET05FCQkoMHhlIDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfQ01EX09FCQkJKDEgPDwgMTkpCisjZGVmaW5lCVNTUF9ERUJVR19ETUFfU01fTUFTSwkJCSgweDcgPDwgMTYpCisjZGVmaW5lCVNTUF9ERUJVR19ETUFfU01fT0ZGU0VUCQkJMTYKKyNkZWZpbmUJU1NQX0RFQlVHX0RNQV9TTV9ETUFfSURMRQkJKDB4MCA8PCAxNikKKyNkZWZpbmUJU1NQX0RFQlVHX0RNQV9TTV9ETUFfRE1BUkVRCQkoMHgxIDw8IDE2KQorI2RlZmluZQlTU1BfREVCVUdfRE1BX1NNX0RNQV9ETUFBQ0sJCSgweDIgPDwgMTYpCisjZGVmaW5lCVNTUF9ERUJVR19ETUFfU01fRE1BX1NUQUxMCQkoMHgzIDw8IDE2KQorI2RlZmluZQlTU1BfREVCVUdfRE1BX1NNX0RNQV9CVVNZCQkoMHg0IDw8IDE2KQorI2RlZmluZQlTU1BfREVCVUdfRE1BX1NNX0RNQV9ET05FCQkoMHg1IDw8IDE2KQorI2RlZmluZQlTU1BfREVCVUdfRE1BX1NNX0RNQV9DT1VOVAkJKDB4NiA8PCAxNikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9PRkZTRVQJCQkxMgorI2RlZmluZQlTU1BfREVCVUdfTU1DX1NNX01NQ19JRExFCQkoMHgwIDw8IDEyKQorI2RlZmluZQlTU1BfREVCVUdfTU1DX1NNX01NQ19DTUQJCSgweDEgPDwgMTIpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fTU1DX1RSQwkJKDB4MiA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfUkVTUAkJKDB4MyA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfUlBSWAkJKDB4NCA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfVFgJCQkoMHg1IDw8IDEyKQorI2RlZmluZQlTU1BfREVCVUdfTU1DX1NNX01NQ19DVE9LCQkoMHg2IDw8IDEyKQorI2RlZmluZQlTU1BfREVCVUdfTU1DX1NNX01NQ19SWAkJCSgweDcgPDwgMTIpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fTU1DX0NDUwkJKDB4OCA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfUFVQCQkoMHg5IDw8IDEyKQorI2RlZmluZQlTU1BfREVCVUdfTU1DX1NNX01NQ19XQUlUCQkoMHhhIDw8IDEyKQorI2RlZmluZQlTU1BfREVCVUdfQ01EX1NNX01BU0sJCQkoMHgzIDw8IDEwKQorI2RlZmluZQlTU1BfREVCVUdfQ01EX1NNX09GRlNFVAkJCTEwCisjZGVmaW5lCVNTUF9ERUJVR19DTURfU01fQ1NNX0lETEUJCSgweDAgPDwgMTApCisjZGVmaW5lCVNTUF9ERUJVR19DTURfU01fQ1NNX0lOREVYCQkoMHgxIDw8IDEwKQorI2RlZmluZQlTU1BfREVCVUdfQ01EX1NNX0NTTV9BUkcJCSgweDIgPDwgMTApCisjZGVmaW5lCVNTUF9ERUJVR19DTURfU01fQ1NNX0NSQwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJU1NQX0RFQlVHX1NTUF9DTUQJCQkoMSA8PCA5KQorI2RlZmluZQlTU1BfREVCVUdfU1NQX1JFU1AJCQkoMSA8PCA4KQorI2RlZmluZQlTU1BfREVCVUdfU1NQX1JYRF9NQVNLCQkJMHhmZgorI2RlZmluZQlTU1BfREVCVUdfU1NQX1JYRF9PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfVkVSU0lPTl9NQUpPUl9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCVNTUF9WRVJTSU9OX01BSk9SX09GRlNFVAkJMjQKKyNkZWZpbmUJU1NQX1ZFUlNJT05fTUlOT1JfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlTU1BfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCTE2CisjZGVmaW5lCVNTUF9WRVJTSU9OX1NURVBfTUFTSwkJCTB4ZmZmZgorI2RlZmluZQlTU1BfVkVSU0lPTl9TVEVQX09GRlNFVAkJCTAKKworI2VuZGlmIC8qIF9fTVgyOF9SRUdTX1NTUF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXRpbXJvdC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtdGltcm90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5NDFjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXRpbXJvdC5oCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBUSU1ST1QgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfUkVHU19USU1ST1RfSF9fCisjZGVmaW5lIF9fTVgyOF9SRUdTX1RJTVJPVF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF90aW1yb3RfcmVncyB7CisJbXgyOF9yZWcoaHdfdGltcm90X3JvdGN0cmwpCisJbXgyOF9yZWcoaHdfdGltcm90X3JvdGNvdW50KQorCW14MjhfcmVnKGh3X3RpbXJvdF90aW1jdHJsMCkKKwlteDI4X3JlZyhod190aW1yb3RfcnVubmluZ19jb3VudDApCisJbXgyOF9yZWcoaHdfdGltcm90X2ZpeGVkX2NvdW50MCkKKwlteDI4X3JlZyhod190aW1yb3RfbWF0Y2hfY291bnQwKQorCW14MjhfcmVnKGh3X3RpbXJvdF90aW1jdHJsMSkKKwlteDI4X3JlZyhod190aW1yb3RfcnVubmluZ19jb3VudDEpCisJbXgyOF9yZWcoaHdfdGltcm90X2ZpeGVkX2NvdW50MSkKKwlteDI4X3JlZyhod190aW1yb3RfbWF0Y2hfY291bnQxKQorCW14MjhfcmVnKGh3X3RpbXJvdF90aW1jdHJsMikKKwlteDI4X3JlZyhod190aW1yb3RfcnVubmluZ19jb3VudDIpCisJbXgyOF9yZWcoaHdfdGltcm90X2ZpeGVkX2NvdW50MikKKwlteDI4X3JlZyhod190aW1yb3RfbWF0Y2hfY291bnQyKQorCW14MjhfcmVnKGh3X3RpbXJvdF90aW1jdHJsMykKKwlteDI4X3JlZyhod190aW1yb3RfcnVubmluZ19jb3VudDMpCisJbXgyOF9yZWcoaHdfdGltcm90X2ZpeGVkX2NvdW50MykKKwlteDI4X3JlZyhod190aW1yb3RfbWF0Y2hfY291bnQzKQorCW14MjhfcmVnKGh3X3RpbXJvdF92ZXJzaW9uKQorfTsKKyNlbmRpZgorCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NGVFJTVAkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfQ0xLR0FURQkJCQkoMSA8PCAzMCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfUk9UQVJZX1BSRVNFTlQJCQkoMSA8PCAyOSkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfVElNM19QUkVTRU5UCQkJKDEgPDwgMjgpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1RJTTJfUFJFU0VOVAkJCSgxIDw8IDI3KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9USU0xX1BSRVNFTlQJCQkoMSA8PCAyNikKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfVElNMF9QUkVTRU5UCQkJKDEgPDwgMjUpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NUQVRFX01BU0sJCQkoMHg3IDw8IDIyKQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TVEFURV9PRkZTRVQJCQkyMgorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9ESVZJREVSX01BU0sJCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfRElWSURFUl9PRkZTRVQJCQkxNgorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9SRUxBVElWRQkJCQkoMSA8PCAxMikKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfT1ZFUlNBTVBMRV9NQVNLCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfT1ZFUlNBTVBMRV9PRkZTRVQJCTEwCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX09WRVJTQU1QTEVfOFgJCQkoMHgwIDw8IDEwKQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9PVkVSU0FNUExFXzRYCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfT1ZFUlNBTVBMRV8yWAkJCSgweDIgPDwgMTApCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX09WRVJTQU1QTEVfMVgJCQkoMHgzIDw8IDEwKQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9QT0xBUklUWV9CCQkJKDEgPDwgOSkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfUE9MQVJJVFlfQQkJCSgxIDw8IDgpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9CX01BU0sJCQkoMHhmIDw8IDQpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9CX09GRlNFVAkJCTQKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfTkVWRVJfVElDSwkJKDB4MCA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV00wCQkJKDB4MSA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV00xCQkJKDB4MiA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV00yCQkJKDB4MyA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV00zCQkJKDB4NCA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV000CQkJKDB4NSA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV001CQkJKDB4NiA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV002CQkJKDB4NyA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9QV003CQkJKDB4OCA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9ST1RBUllBCQkJKDB4OSA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9ST1RBUllCCQkJKDB4YSA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9NQVNLCQkJMHhmCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX09GRlNFVAkJCTAKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfTkVWRVJfVElDSwkJMHgwCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX1BXTTAJCQkweDEKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfUFdNMQkJCTB4MgorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9QV00yCQkJMHgzCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX1BXTTMJCQkweDQKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfUFdNNAkJCTB4NQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9QV001CQkJMHg2CisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX1BXTTYJCQkweDcKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfUFdNNwkJCTB4OAorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9ST1RBUllBCQkJMHg5CisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX1JPVEFSWUIJCQkweGEKKworI2RlZmluZQlUSU1ST1RfUk9UQ09VTlRfVVBET1dOX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJVElNUk9UX1JPVENPVU5UX1VQRE9XTl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX0lSUQkJCQkoMSA8PCAxNSkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX0lSUV9FTgkJCQkoMSA8PCAxNCkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX01BVENIX01PREUJCQkoMSA8PCAxMSkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1BPTEFSSVRZCQkJKDEgPDwgOCkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1VQREFURQkJCQkoMSA8PCA3KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fUkVMT0FECQkJCSgxIDw8IDYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9QUkVTQ0FMRV9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fUFJFU0NBTEVfT0ZGU0VUCQkJNAorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fUFJFU0NBTEVfRElWX0JZXzEJCSgweDAgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1BSRVNDQUxFX0RJVl9CWV8yCQkoMHgxIDw8IDQpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9QUkVTQ0FMRV9ESVZfQllfNAkJKDB4MiA8PCA0KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fUFJFU0NBTEVfRElWX0JZXzgJCSgweDMgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9NQVNLCQkJMHhmCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfT0ZGU0VUCQkJMAorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX05FVkVSX1RJQ0sJCTB4MAorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX1BXTTAJCQkweDEKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9QV00xCQkJMHgyCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfUFdNMgkJCTB4MworI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX1BXTTMJCQkweDQKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9QV000CQkJMHg1CisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfUFdNNQkJCTB4NgorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX1BXTTYJCQkweDcKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9QV003CQkJMHg4CisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfUk9UQVJZQQkJCTB4OQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX1JPVEFSWUIJCQkweGEKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF8zMktIWl9YVEFMCQkweGIKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF84S0haX1hUQUwJCTB4YworI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUXzRLSFpfWFRBTAkJMHhkCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfMUtIWl9YVEFMCQkweGUKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9USUNLX0FMV0FZUwkJMHhmCisKKyNkZWZpbmUJVElNUk9UX1JVTk5JTkdfQ09VTlRuX1JVTk5JTkdfQ09VTlRfTUFTSwkweGZmZmZmZmZmCisjZGVmaW5lCVRJTVJPVF9SVU5OSU5HX0NPVU5Ubl9SVU5OSU5HX0NPVU5UX09GRlNFVAkwCisKKyNkZWZpbmUJVElNUk9UX0ZJWEVEX0NPVU5Ubl9GSVhFRF9DT1VOVF9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVRJTVJPVF9GSVhFRF9DT1VOVG5fRklYRURfQ09VTlRfT0ZGU0VUCQkwCisKKyNkZWZpbmUJVElNUk9UX01BVENIX0NPVU5Ubl9NQVRDSF9DT1VOVF9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVRJTVJPVF9NQVRDSF9DT1VOVG5fTUFUQ0hfQ09VTlRfT0ZGU0VUCQkwCisKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX01BU0sJCSgweGYgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9PRkZTRVQJCTE2CisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9ORVZFUl9USUNLCQkoMHgwIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfUFdNMAkJKDB4MSA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX1BXTTEJCSgweDIgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9QV00yCQkoMHgzIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfUFdNMwkJKDB4NCA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX1BXTTQJCSgweDUgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9QV001CQkoMHg2IDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfUFdNNgkJKDB4NyA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX1BXTTcJCSgweDggPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9ST1RBUllBCQkoMHg5IDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfUk9UQVJZQgkJKDB4YSA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMXzMyS0haX1hUQUwJCSgweGIgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF84S0haX1hUQUwJCSgweGMgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF80S0haX1hUQUwJCSgweGQgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF8xS0haX1hUQUwJCSgweGUgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9USUNLX0FMV0FZUwkJKDB4ZiA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX0RVVFlfQ1lDTEUJCQkoMSA8PCA5KQorCisjZGVmaW5lCVRJTVJPVF9WRVJTSU9OX01BSk9SX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJVElNUk9UX1ZFUlNJT05fTUFKT1JfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJVElNUk9UX1ZFUlNJT05fTUlOT1JfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCQkxNgorI2RlZmluZQlUSU1ST1RfVkVSU0lPTl9TVEVQX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJVElNUk9UX1ZFUlNJT05fU1RFUF9PRkZTRVQJCQkwCisKKyNlbmRpZiAvKiBfX01YMjhfUkVHU19USU1ST1RfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy11c2IuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXVzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjFkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy11c2IuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggVVNCIE9URyBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fUkVHU19VU0JfSF9fCisjZGVmaW5lIF9fUkVHU19VU0JfSF9fCisKK3N0cnVjdCBteDI4X3VzYl9yZWdzIHsKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9pZDsJCQkvKiAweDAwMCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2h3Z2VuZXJhbDsJCS8qIDB4MDA0ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfaHdob3N0OwkJLyogMHgwMDggKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9od2RldmljZTsJCS8qIDB4MDBjICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfaHd0eGJ1ZjsJCS8qIDB4MDEwICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfaHdyeGJ1ZjsJCS8qIDB4MDE0ICovCisKKwl1aW50MzJfdAkJcmVzZXJ2ZWQxWzI2XTsKKworCXVpbnQzMl90CQlod191c2JjdHJsX2dwdGltZXIwbGQ7CQkvKiAweDA4MCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2dwdGltZXIwY3RybDsJLyogMHgwODQgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9ncHRpbWVyMWxkOwkJLyogMHgwODggKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9ncHRpbWVyMWN0cmw7CS8qIDB4MDhjICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfc2J1c2NmZzsJCS8qIDB4MDkwICovCisKKwl1aW50MzJfdAkJcmVzZXJ2ZWQyWzI3XTsKKworCXVpbnQzMl90CQlod191c2JjdHJsX2NhcGxlbmd0aDsJCS8qIDB4MTAwICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfaGNzcGFyYW1zOwkJLyogMHgxMDQgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9oY2NwYXJhbXM7CQkvKiAweDEwOCAqLworCisJdWludDMyX3QJCXJlc2VydmVkM1s1XTsKKworCXVpbnQzMl90CQlod191c2JjdHJsX2RjaXZlcnNpb247CQkvKiAweDEyMCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2RjY3BhcmFtczsJCS8qIDB4MTI0ICovCisKKwl1aW50MzJfdAkJcmVzZXJ2ZWQ0WzZdOworCisJdWludDMyX3QJCWh3X3VzYmN0cmxfdXNiY21kOwkJLyogMHgxNDAgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF91c2JzdHM7CQkvKiAweDE0NCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX3VzYmludHI7CQkvKiAweDE0OCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2ZyaW5kZXg7CQkvKiAweDE0YyAqLworCisJdWludDMyX3QJCXJlc2VydmVkNTsKKworCXVuaW9uIHsKKwkJdWludDMyX3QJaHdfdXNiY3RybF9wZXJpb2RpY2xpc3RiYXNlOwkvKiAweDE1NCAqLworCQl1aW50MzJfdAlod191c2JjdHJsX2RldmljZWFkZHI7CQkvKiAweDE1NCAqLworCX07CisJdW5pb24geworCQl1aW50MzJfdAlod191c2JjdHJsX2FzeW5jbGlzdGFkZHI7CS8qIDB4MTU4ICovCisJCXVpbnQzMl90CWh3X3VzYmN0cmxfZW5kcG9pbnRsaXN0YWRkcjsJLyogMHgxNTggKi8KKwl9OworCisJdWludDMyX3QJCWh3X3VzYmN0cmxfdHRjdHJsOwkJLyogMHgxNWMgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9idXJzdHNpemU7CQkvKiAweDE2MCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX3R4ZmlsbHR1bmluZzsJLyogMHgxNjQgKi8KKworCXVpbnQzMl90CQlyZXNlcnZlZDY7CisKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9pY191c2I7CQkvKiAweDE2YyAqLworCXVpbnQzMl90CQlod191c2JjdHJsX3VscGk7CQkvKiAweDE3MCAqLworCisJdWludDMyX3QJCXJlc2VydmVkNzsKKworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0bmFrOwkJLyogMHgxNzggKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdG5ha2VuOwkJLyogMHgxN2MgKi8KKworCXVpbnQzMl90CQlyZXNlcnZlZDg7CisKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9wb3J0c2MxOwkJLyogMHgxODQgKi8KKworCXVpbnQzMl90CQlyZXNlcnZlZDlbN107CisKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9vdGdzYzsJCS8qIDB4MWE0ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfdXNibW9kZTsJCS8qIDB4MWE4ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZW5kcHRzZXR1cHN0YXQ7CS8qIDB4MWFjICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZW5kcHRwcmltZTsJCS8qIDB4MWIwICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZW5kcHRmbHVzaDsJCS8qIDB4MWI0ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZW5kcHRzdGF0OwkJLyogMHgxYjggKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGNvbXBsZXRlOwkvKiAweDFiYyAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDA7CQkvKiAweDFjMCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDE7CQkvKiAweDFjNCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDI7CQkvKiAweDFjOCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDM7CQkvKiAweDFjYyAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDQ7CQkvKiAweDFkMCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDU7CQkvKiAweDFkNCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDY7CQkvKiAweDFkOCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Y3RybDc7CQkvKiAweDFkYyAqLworfTsKKworI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMX01BU0sJCSgweDMgPDwgMjgpCisKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9DSVZFUlNJT05fT0ZGU0VUCQkyOQorI2RlZmluZQlIV19VU0JDVFJMX0lEX0NJVkVSU0lPTl9NQVNLCQkoMHg3IDw8IDI5KQorI2RlZmluZQlIV19VU0JDVFJMX0lEX1ZFUlNJT05fT0ZGU0VUCQkyNQorI2RlZmluZQlIV19VU0JDVFJMX0lEX1ZFUlNJT05fTUFTSwkJKDB4ZiA8PCAyNSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9SRVZJU0lPTl9PRkZTRVQJCTIxCisjZGVmaW5lCUhXX1VTQkNUUkxfSURfUkVWSVNJT05fTUFTSwkJKDB4ZiA8PCAyMSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9UQUdfT0ZGU0VUCQkxNgorI2RlZmluZQlIV19VU0JDVFJMX0lEX1RBR19NQVNLCQkJKDB4MWYgPDwgMTYpCisjZGVmaW5lCUhXX1VTQkNUUkxfSURfTklEX09GRlNFVAkJOAorI2RlZmluZQlIV19VU0JDVFJMX0lEX05JRF9NQVNLCQkJKDB4M2YgPDwgOCkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9JRF9PRkZTRVQJCQkwCisjZGVmaW5lCUhXX1VTQkNUUkxfSURfSURfTUFTSwkJCSgweDNmIDw8IDApCisKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfU01fT0ZGU0VUCQk5CisjZGVmaW5lCUhXX1VTQkNUUkxfSFdHRU5FUkFMX1NNX01BU0sJCSgweDMgPDwgOSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfUEhZTV9PRkZTRVQJNgorI2RlZmluZQlIV19VU0JDVFJMX0hXR0VORVJBTF9QSFlNX01BU0sJCSgweDcgPDwgNikKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfUEhZV19PRkZTRVQJNAorI2RlZmluZQlIV19VU0JDVFJMX0hXR0VORVJBTF9QSFlXX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfQldUCQkoMSA8PCAzKQorI2RlZmluZQlIV19VU0JDVFJMX0hXR0VORVJBTF9DTEtDX09GRlNFVAkxCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdHRU5FUkFMX0NMS0NfTUFTSwkJKDB4MyA8PCAxKQorI2RlZmluZQlIV19VU0JDVFJMX0hXR0VORVJBTF9SVAkJCSgxIDw8IDApCisKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0hPU1RfVFRQRVJfT0ZGU0VUCQkyNAorI2RlZmluZQlIV19VU0JDVFJMX0hXSE9TVF9UVFBFUl9NQVNLCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0hPU1RfVFRBU1lfT0ZGU0VUCQkxNgorI2RlZmluZQlIV19VU0JDVFJMX0hXSE9TVF9UVEFTWV9NQVNLCQkoMHhmZiA8PCAxOSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0hPU1RfTlBPUlRfT0ZGU0VUCQkxCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdIT1NUX05QT1JUX01BU0sJCSgweDcgPDwgMSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0hPU1RfSEMJCQkoMSA8PCAwKQorCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdERVZJQ0VfREVWRVBfT0ZGU0VUCTEKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0RFVklDRV9ERVZFUF9NQVNLCQkoMHgxZiA8PCAxKQorI2RlZmluZQlIV19VU0JDVFJMX0hXREVWSUNFX0RDCQkJKDEgPDwgMCkKKworI2RlZmluZQlIV19VU0JDVFJMX0hXVFhCVUZfVFhMQ1IJCSgxIDw8IDMxKQorI2RlZmluZQlIV19VU0JDVFJMX0hXVFhCVUZfVFhDSEFOQUREX09GRlNFVAkxNgorI2RlZmluZQlIV19VU0JDVFJMX0hXVFhCVUZfVFhDSEFOQUREX01BU0sJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdUWEJVRl9UWEFERF9PRkZTRVQJCTgKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV1RYQlVGX1RYQUREX01BU0sJCSgweGZmIDw8IDgpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdUWEJVRl9UWEJVUlNUX09GRlNFVAkwCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdUWEJVRl9UWEJVUlNUX01BU0sJCTB4ZmYKKworI2RlZmluZQlIV19VU0JDVFJMX0hXUlhCVUZfUlhBRERfT0ZGU0VUCQk4CisjZGVmaW5lCUhXX1VTQkNUUkxfSFdSWEJVRl9SWEFERF9NQVNLCQkoMHhmZiA8PCA4KQorI2RlZmluZQlIV19VU0JDVFJMX0hXUlhCVUZfUlhCVVJTVF9PRkZTRVQJMAorI2RlZmluZQlIV19VU0JDVFJMX0hXUlhCVUZfUlhCVVJTVF9NQVNLCQkweGZmCisKKyNkZWZpbmUJSFdfVVNCQ1RSTF9HUFRJTUVSTERfR1BUTERfT0ZGU0VUCTAKKyNkZWZpbmUJSFdfVVNCQ1RSTF9HUFRJTUVSTERfR1BUTERfTUFTSwkJMHhmZmZmZmYKKworI2RlZmluZQlIV19VU0JDVFJMX0dQVElNRVJDVFJMX0dQVFJVTgkJKDEgPDwgMzEpCisjZGVmaW5lCUhXX1VTQkNUUkxfR1BUSU1FUkNUUkxfR1BUUlNUCQkoMSA8PCAzMCkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9HUFRJTUVSQ1RSTF9HUFRNT0RFCQkoMSA8PCAyNCkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9HUFRJTUVSQ1RSTF9HUFRDTlRfT0ZGU0VUCTAKKyNkZWZpbmUJSFdfVVNCQ1RSTF9HUFRJTUVSQ1RSTF9HUFRDTlRfTUFTSwkweGZmZmZmZgorCisjZGVmaW5lCUhXX1VTQkNUUkxfU0JVU0NGR19BSEJCVVJTVF9PRkZTRVQJMAorI2RlZmluZQlIV19VU0JDVFJMX1NCVVNDRkdfQUhCQlVSU1RfTUFTSwkweDcKKyNkZWZpbmUJSFdfVVNCQ1RSTF9TQlVTQ0ZHX0FIQkJVUlNUX1VfSU5DUgkweDAKKyNkZWZpbmUJSFdfVVNCQ1RSTF9TQlVTQ0ZHX0FIQkJVUlNUX1NfSU5DUjQJMHgxCisjZGVmaW5lCUhXX1VTQkNUUkxfU0JVU0NGR19BSEJCVVJTVF9TX0lOQ1I4CTB4MgorI2RlZmluZQlIV19VU0JDVFJMX1NCVVNDRkdfQUhCQlVSU1RfU19JTkNSMTYJMHgzCisjZGVmaW5lCUhXX1VTQkNUUkxfU0JVU0NGR19BSEJCVVJTVF9VX0lOQ1I0CTB4NQorI2RlZmluZQlIV19VU0JDVFJMX1NCVVNDRkdfQUhCQlVSU1RfVV9JTkNSOAkweDYKKyNkZWZpbmUJSFdfVVNCQ1RSTF9TQlVTQ0ZHX0FIQkJVUlNUX1VfSU5DUjE2CTB4NworCisjZW5kaWYJLyogX19SRUdTX1VTQl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXVzYnBoeS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtdXNicGh5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyM2UxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXVzYnBoeS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBVU0IgUEhZIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19SRUdTX1VTQlBIWV9IX18KKyNkZWZpbmUgX19SRUdTX1VTQlBIWV9IX18KKworc3RydWN0IG14MjhfdXNicGh5X3JlZ3MgeworCW14MjhfcmVnKGh3X3VzYnBoeV9wd2QpCisJbXgyOF9yZWcoaHdfdXNicGh5X3R4KQorCW14MjhfcmVnKGh3X3VzYnBoeV9yeCkKKwlteDI4X3JlZyhod191c2JwaHlfY3RybCkKKwlteDI4X3JlZyhod191c2JwaHlfc3RhdHVzKQorCW14MjhfcmVnKGh3X3VzYnBoeV9kZWJ1ZykKKwlteDI4X3JlZyhod191c2JwaHlfZGVidWcwX3N0YXR1cykKKwlteDI4X3JlZyhod191c2JwaHlfZGVidWcxKQorCW14MjhfcmVnKGh3X3VzYnBoeV92ZXJzaW9uKQorCW14MjhfcmVnKGh3X3VzYnBoeV9pcCkKK307CisKKyNkZWZpbmUJVVNCUEhZX1BXRF9SWFBXRFJYCQkJCSgxIDw8IDIwKQorI2RlZmluZQlVU0JQSFlfUFdEX1JYUFdERElGRgkJCQkoMSA8PCAxOSkKKyNkZWZpbmUJVVNCUEhZX1BXRF9SWFBXRDFQVDEJCQkJKDEgPDwgMTgpCisjZGVmaW5lCVVTQlBIWV9QV0RfUlhQV0RFTlYJCQkJKDEgPDwgMTcpCisjZGVmaW5lCVVTQlBIWV9QV0RfVFhQV0RWMkkJCQkJKDEgPDwgMTIpCisjZGVmaW5lCVVTQlBIWV9QV0RfVFhQV0RJQklBUwkJCQkoMSA8PCAxMSkKKyNkZWZpbmUJVVNCUEhZX1BXRF9UWFBXREZTCQkJCSgxIDw8IDEwKQorCisjZGVmaW5lCVVTQlBIWV9UWF9VU0JQSFlfVFhfRURHRUNUUkxfT0ZGU0VUCQkyNgorI2RlZmluZQlVU0JQSFlfVFhfVVNCUEhZX1RYX0VER0VDVFJMX01BU0sJCSgweDcgPDwgMjYpCisjZGVmaW5lCVVTQlBIWV9UWF9VU0JQSFlfVFhfU1lOQ19JTlZFUlQJCQkoMSA8PCAyNSkKKyNkZWZpbmUJVVNCUEhZX1RYX1VTQlBIWV9UWF9TWU5DX01VWAkJCSgxIDw8IDI0KQorI2RlZmluZQlVU0JQSFlfVFhfVFhFTkNBTDQ1RFAJCQkJKDEgPDwgMjEpCisjZGVmaW5lCVVTQlBIWV9UWF9UWENBTDQ1RFBfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJVVNCUEhZX1RYX1RYQ0FMNDVEUF9NQVNLCQkJKDB4ZiA8PCAxNikKKyNkZWZpbmUJVVNCUEhZX1RYX1RYRU5DQUw0NURNCQkJCSgxIDw8IDEzKQorI2RlZmluZQlVU0JQSFlfVFhfVFhDQUw0NURNX09GRlNFVAkJCTgKKyNkZWZpbmUJVVNCUEhZX1RYX1RYQ0FMNDVETV9NQVNLCQkJKDB4ZiA8PCA4KQorI2RlZmluZQlVU0JQSFlfVFhfRF9DQUxfT0ZGU0VUCQkJCTAKKyNkZWZpbmUJVVNCUEhZX1RYX0RfQ0FMX01BU0sJCQkJMHhmCisKKyNkZWZpbmUJVVNCUEhZX1JYX1JYREJZUEFTUwkJCQkoMSA8PCAyMikKKyNkZWZpbmUJVVNCUEhZX1JYX0RJU0NPTkFESl9PRkZTRVQJCQk0CisjZGVmaW5lCVVTQlBIWV9SWF9ESVNDT05BREpfTUFTSwkJCSgweDcgPDwgNCkKKyNkZWZpbmUJVVNCUEhZX1JYX0VOVkFESl9PRkZTRVQJCQkJMAorI2RlZmluZQlVU0JQSFlfUlhfRU5WQURKX01BU0sJCQkJMHg3CisKKyNkZWZpbmUJVVNCUEhZX0NUUkxfU0ZUUlNUCQkJCSgxIDw8IDMxKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9DTEtHQVRFCQkJCSgxIDw8IDMwKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9VVE1JX1NVU1BFTkRNCQkJKDEgPDwgMjkpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0hPU1RfRk9SQ0VfTFNfU0UwCQkJKDEgPDwgMjgpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0VOQVVUT1NFVF9VU0JDTEtTCQkJKDEgPDwgMjYpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0VOQVVUT0NMUl9VU0JDTEtHQVRFCQkoMSA8PCAyNSkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRlNETExfUlNUX0VOCQkJKDEgPDwgMjQpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0VOVkJVU0NIR19XS1VQCQkJKDEgPDwgMjMpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0VOSURDSEdfV0tVUAkJCSgxIDw8IDIyKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkRQRE1DSEdfV0tVUAkJCSgxIDw8IDIxKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkFVVE9DTFJfUEhZX1BXRAkJCSgxIDw8IDIwKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkFVVE9DTFJfQ0xLR0FURQkJCSgxIDw8IDE5KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkFVVE9fUFdST05fUExMCQkJKDEgPDwgMTgpCisjZGVmaW5lCVVTQlBIWV9DVFJMX1dBS0VVUF9JUlEJCQkJKDEgPDwgMTcpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0VOSVJRV0FLRVVQCQkJCSgxIDw8IDE2KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTlVUTUlMRVZFTDMJCQkoMSA8PCAxNSkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5VVE1JTEVWRUwyCQkJKDEgPDwgMTQpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0RBVEFfT05fTFJBREMJCQkoMSA8PCAxMykKKyNkZWZpbmUJVVNCUEhZX0NUUkxfREVWUExVR0lOX0lSUQkJCSgxIDw8IDEyKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTklSUURFVlBMVUdJTgkJCSgxIDw8IDExKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9SRVNVTUVfSVJRCQkJCSgxIDw8IDEwKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTklSUVJFU1VNRURFVEVDVAkJCSgxIDw8IDkpCisjZGVmaW5lCVVTQlBIWV9DVFJMX1JFU1VNRUlSUVNUSUNLWQkJCSgxIDw8IDgpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0VOT1RHSURERVRFQ1QJCQkoMSA8PCA3KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9ERVZQTFVHSU5fUE9MQVJJVFkJCQkoMSA8PCA1KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkRFVlBMVUdJTkRFVEVDVAkJCSgxIDw8IDQpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0hPU1RESVNDT05ERVRFQ1RfSVJRCQkoMSA8PCAzKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTklSUUhPU1RESVNDT04JCQkoMSA8PCAyKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkhPU1RESVNDT05ERVRFQ1QJCQkoMSA8PCAxKQorCisjZGVmaW5lCVVTQlBIWV9TVEFUVVNfUkVTVU1FX1NUQVRVUwkJCSgxIDw8IDEwKQorI2RlZmluZQlVU0JQSFlfU1RBVFVTX09UR0lEX1NUQVRVUwkJCSgxIDw8IDgpCisjZGVmaW5lCVVTQlBIWV9TVEFUVVNfREVWUExVR0lOX1NUQVRVUwkJCSgxIDw8IDYpCisjZGVmaW5lCVVTQlBIWV9TVEFUVVNfSE9TVERJU0NPTkRFVEVDVF9TVEFUVVMJCSgxIDw8IDMpCisKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX0NMS0dBVEUJCQkJKDEgPDwgMzApCisjZGVmaW5lCVVTQlBIWV9ERUJVR19IT1NUX1JFU1VNRV9ERUJVRwkJCSgxIDw8IDI5KQorI2RlZmluZQlVU0JQSFlfREVCVUdfU1FVRUxDSFJFU0VUTEVOR1RIX09GRlNFVAkJMjUKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX1NRVUVMQ0hSRVNFVExFTkdUSF9NQVNLCQkoMHhmIDw8IDI1KQorI2RlZmluZQlVU0JQSFlfREVCVUdfRU5TUVVFTENIUkVTRVQJCQkoMSA8PCAyNCkKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX1NRVUVMQ0hSRVNFVENPVU5UX09GRlNFVAkJMTYKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX1NRVUVMQ0hSRVNFVENPVU5UX01BU0sJCSgweDFmIDw8IDE2KQorI2RlZmluZQlVU0JQSFlfREVCVUdfRU5UWDJSWENPVU5UCQkJKDEgPDwgMTIpCisjZGVmaW5lCVVTQlBIWV9ERUJVR19UWDJSWENPVU5UX09GRlNFVAkJCTgKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX1RYMlJYQ09VTlRfTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX0VOSFNUUFVMTERPV05fT0ZGU0VUCQk0CisjZGVmaW5lCVVTQlBIWV9ERUJVR19FTkhTVFBVTExET1dOX01BU0sJCQkoMHgzIDw8IDQpCisjZGVmaW5lCVVTQlBIWV9ERUJVR19IU1RQVUxMRE9XTl9PRkZTRVQJCQkyCisjZGVmaW5lCVVTQlBIWV9ERUJVR19IU1RQVUxMRE9XTl9NQVNLCQkJKDB4MyA8PCAyKQorI2RlZmluZQlVU0JQSFlfREVCVUdfREVCVUdfSU5URVJGQUNFX0hPTEQJCSgxIDw8IDEpCisjZGVmaW5lCVVTQlBIWV9ERUJVR19PVEdJRFBJRExPQ0sJCQkoMSA8PCAwKQorCisjZGVmaW5lCVVTQlBIWV9ERUJVRzBfU1RBVFVTX1NRVUVMQ0hfQ09VTlRfT0ZGU0VUCTI2CisjZGVmaW5lCVVTQlBIWV9ERUJVRzBfU1RBVFVTX1NRVUVMQ0hfQ09VTlRfTUFTSwkJKDB4M2YgPDwgMjYpCisjZGVmaW5lCVVTQlBIWV9ERUJVRzBfU1RBVFVTX1VUTUlfUlhFUlJPUl9PRkZTRVQJMTYKKyNkZWZpbmUJVVNCUEhZX0RFQlVHMF9TVEFUVVNfVVRNSV9SWEVSUk9SX01BU0sJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUJVVNCUEhZX0RFQlVHMF9TVEFUVVNfTE9PUF9CQUNLX09GRlNFVAkJMAorI2RlZmluZQlVU0JQSFlfREVCVUcwX1NUQVRVU19MT09QX0JBQ0tfTUFTSwkJMHhmZmZmCisKKyNkZWZpbmUJVVNCUEhZX0RFQlVHMV9FTlRBSUxBREpWRF9PRkZTRVQJCTEzCisjZGVmaW5lCVVTQlBIWV9ERUJVRzFfRU5UQUlMQURKVkRfTUFTSwkJCSgweDMgPDwgMTMpCisjZGVmaW5lCVVTQlBIWV9ERUJVRzFfRU5UWDJUWAkJCQkoMSA8PCAxMikKKyNkZWZpbmUJVVNCUEhZX0RFQlVHMV9EQkdfQUREUkVTU19PRkZTRVQJCTAKKyNkZWZpbmUJVVNCUEhZX0RFQlVHMV9EQkdfQUREUkVTU19NQVNLCQkJMHhmCisKKyNkZWZpbmUJVVNCUEhZX1ZFUlNJT05fTUFKT1JfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlVU0JQSFlfVkVSU0lPTl9NQUpPUl9PRkZTRVQJCQkyNAorI2RlZmluZQlVU0JQSFlfVkVSU0lPTl9NSU5PUl9NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCVVTQlBIWV9WRVJTSU9OX01JTk9SX09GRlNFVAkJCTE2CisjZGVmaW5lCVVTQlBIWV9WRVJTSU9OX1NURVBfTUFTSwkJCTB4ZmZmZgorI2RlZmluZQlVU0JQSFlfVkVSU0lPTl9TVEVQX09GRlNFVAkJCTAKKworI2RlZmluZQlVU0JQSFlfSVBfRElWX1NFTF9PRkZTRVQJCQkyMworI2RlZmluZQlVU0JQSFlfSVBfRElWX1NFTF9NQVNLCQkJCSgweDMgPDwgMjMpCisjZGVmaW5lCVVTQlBIWV9JUF9MRlJfU0VMX09GRlNFVAkJCTIxCisjZGVmaW5lCVVTQlBIWV9JUF9MRlJfU0VMX01BU0sJCQkJKDB4MyA8PCAyMSkKKyNkZWZpbmUJVVNCUEhZX0lQX0NQX1NFTF9PRkZTRVQJCQkJMTkKKyNkZWZpbmUJVVNCUEhZX0lQX0NQX1NFTF9NQVNLCQkJCSgweDMgPDwgMTkpCisjZGVmaW5lCVVTQlBIWV9JUF9UU1RJX1RYX0RQCQkJCSgxIDw8IDE4KQorI2RlZmluZQlVU0JQSFlfSVBfVFNUSV9UWF9ETQkJCQkoMSA8PCAxNykKKyNkZWZpbmUJVVNCUEhZX0lQX0FOQUxPR19URVNUTU9ERQkJCSgxIDw8IDE2KQorI2RlZmluZQlVU0JQSFlfSVBfRU5fVVNCX0NMS1MJCQkJKDEgPDwgMikKKyNkZWZpbmUJVVNCUEhZX0lQX1BMTF9MT0NLRUQJCQkJKDEgPDwgMSkKKyNkZWZpbmUJVVNCUEhZX0lQX1BMTF9QT1dFUgkJCQkoMSA8PCAwKQorCisjZW5kaWYJLyogX19SRUdTX1VTQlBIWV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9zeXNfcHJvdG8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9zeXNfcHJvdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjI2ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3N5c19wcm90by5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IE1YMjggc3BlY2lmaWMgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9IX18KKyNkZWZpbmUgX19NWDI4X0hfXworCitpbnQgbXgyOF9yZXNldF9ibG9jayhzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnKTsKK2ludCBteDI4X3dhaXRfbWFza19zZXQoc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZywgdWludDMyX3QgbWFzaywgaW50IHRpbWVvdXQpOworaW50IG14Mjhfd2FpdF9tYXNrX2NscihzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnLCB1aW50MzJfdCBtYXNrLCBpbnQgdGltZW91dCk7CisKK2ludCBteHNtbWNfaW5pdGlhbGl6ZShiZF90ICpiaXMsIGludCBpZCwgaW50ICgqd3ApKGludCkpOworCisjZW5kaWYJLyogX19NWDI4X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDMxL2lteC1yZWdzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MzEvaW14LXJlZ3MuaAppbmRleCBhZmRhYTFjLi4wMTQ3OTIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MzEvaW14LXJlZ3MuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MzEvaW14LXJlZ3MuaApAQCAtOTgsNiArOTgsMTIgQEAKIAl1MzIgaWltX3NjczM7CiB9OwogCitzdHJ1Y3QgaW9tdXhjX3JlZ3MgeworCXUzMiB1bnVzZWQxOworCXUzMiB1bnVzZWQyOworCXUzMiBncHI7Cit9OworCiBzdHJ1Y3QgbXgzX2NwdV90eXBlIHsKIAl1OCBzcmV2OwogCXUzMiB2OwpAQCAtNjM2LDcgKzY0Miw2IEBACiAjZGVmaW5lIFdFSU1fQkFTRQkweGI4MDAyMDAwCiAKICNkZWZpbmUgSU9NVVhDX0JBU0UJMHg0M0ZBQzAwMAotI2RlZmluZSBJT01VWENfR1BSCShJT01VWENfQkFTRSArIDB4OCkKICNkZWZpbmUgSU9NVVhDX1NXX01VWF9DVEwoeCkJKElPTVVYQ19CQVNFICsgMHhjICsgKHgpICogNCkKICNkZWZpbmUgSU9NVVhDX1NXX1BBRF9DVEwoeCkJKElPTVVYQ19CQVNFICsgMHgxNTQgKyAoeCkgKiA0KQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXAzL21tY19ob3N0X2RlZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwMy9tbWNfaG9zdF9kZWYuaAppbmRleCBiYTFjMmZmLi4yOTYzNjc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXAzL21tY19ob3N0X2RlZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDMvbW1jX2hvc3RfZGVmLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNkZWZpbmUgT01BUF9IU01NQzJfQkFTRQkweDQ4MEI0MDAwCiAjZGVmaW5lIE9NQVBfSFNNTUMzX0JBU0UJMHg0ODBBRDAwMAogCi10eXBlZGVmIHN0cnVjdCBoc21tYyB7CitzdHJ1Y3QgaHNtbWMgewogCXVuc2lnbmVkIGNoYXIgcmVzMVsweDEwXTsKIAl1bnNpZ25lZCBpbnQgc3lzY29uZmlnOwkJLyogMHgxMCAqLwogCXVuc2lnbmVkIGludCBzeXNzdGF0dXM7CQkvKiAweDE0ICovCkBAIC03Nyw3ICs3Nyw3IEBACiAJdW5zaWduZWQgaW50IGllOwkJLyogMHgxMzQgKi8KIAl1bnNpZ25lZCBjaGFyIHJlczRbMHg4XTsKIAl1bnNpZ25lZCBpbnQgY2FwYTsJCS8qIDB4MTQwICovCi19IGhzbW1jX3Q7Cit9OwogCiAvKgogICogT01BUCBIUyBNTUMgQml0IGRlZmluaXRpb25zCkBAIC0xODIsMTMgKzE4Miw2IEBACiAjZGVmaW5lIENMS180MDBLSFoJCQkxCiAjZGVmaW5lIENMS19NSVNDCQkJMgogCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IGNhcmRfdHlwZTsKLQl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKLQl1bnNpZ25lZCBpbnQgbW9kZTsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQl1bnNpZ25lZCBpbnQgUkNBOwotfSBtbWNfY2FyZF9kYXRhOwogI2RlZmluZSBSU1BfVFlQRV9OT05FCShSU1BfVFlQRV9OT1JTUCAgIHwgQ0NDRV9OT0NIRUNLIHwgQ0lDRV9OT0NIRUNLKQogI2RlZmluZSBNTUNfQ01EMAkoSU5ERVgoMCkgIHwgUlNQX1RZUEVfTk9ORSB8IERQX05PX0RBVEEgfCBERElSX1dSSVRFKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2Nsb2Nrcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9jbG9ja3MuaAppbmRleCA0NWM5NDdkLi5jMmE5YjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2Nsb2Nrcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvY2xvY2tzLmgKQEAgLTY4Nyw0ICs2ODcsMjcgQEAKIAlzOCBtNzsKIH07CiAKK2V4dGVybiBzdHJ1Y3Qgb21hcDRfcHJjbV9yZWdzICpjb25zdCBwcmNtOworZXh0ZXJuIGNvbnN0IHUzMiBzeXNfY2xrX2FycmF5WzhdOworCit2b2lkIHNjYWxlX3Zjb3Jlcyh2b2lkKTsKK3ZvaWQgZG9fc2NhbGVfdHBzNjIzNjEodTMyIHJlZywgdTMyIHZvbHRfbXYpOwordTMyIG9tYXBfZGRyX2Nsayh2b2lkKTsKK3ZvaWQgZG9fc2NhbGVfdmNvcmUodTMyIHZjb3JlX3JlZywgdTMyIHZvbHRfbXYpOwordm9pZCBzZXR1cF9zcmkyYyh2b2lkKTsKK3ZvaWQgc2V0dXBfcG9zdF9kaXZpZGVycyh1MzIgKmNvbnN0IGJhc2UsIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zKTsKK3UzMiBnZXRfc3lzX2Nsa19pbmRleCh2b2lkKTsKK3ZvaWQgZW5hYmxlX2Jhc2ljX2Nsb2Nrcyh2b2lkKTsKK3ZvaWQgZW5hYmxlX2Jhc2ljX3Vib290X2Nsb2Nrcyh2b2lkKTsKK3ZvaWQgZW5hYmxlX25vbl9lc3NlbnRpYWxfY2xvY2tzKHZvaWQpOwordm9pZCBkb19lbmFibGVfY2xvY2tzKHUzMiAqY29uc3QgKmNsa19kb21haW5zLAorCQkgICAgICB1MzIgKmNvbnN0ICpjbGtfbW9kdWxlc19od19hdXRvLAorCQkgICAgICB1MzIgKmNvbnN0ICpjbGtfbW9kdWxlc19leHBsaWNpdF9lbiwKKwkJICAgICAgdTggd2FpdF9mb3JfZW5hYmxlKTsKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X21wdV9kcGxsX3BhcmFtcyh2b2lkKTsKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X2NvcmVfZHBsbF9wYXJhbXModm9pZCk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9wZXJfZHBsbF9wYXJhbXModm9pZCk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9pdmFfZHBsbF9wYXJhbXModm9pZCk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF91c2JfZHBsbF9wYXJhbXModm9pZCk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9hYmVfZHBsbF9wYXJhbXModm9pZCk7CiAjZW5kaWYgLyogX0NMT0NLU19PTUFQNF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9lbWlmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2VtaWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E1NDliYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2VtaWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMjEgKzAsMCBAQAotLyoKLSAqIE9NQVA0NHh4IEVNSUYgaGVhZGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX0VNSUZfSF8KLSNkZWZpbmUgX0VNSUZfSF8KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxjb21tb24uaD4KLQotLyogQmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIE9NQVA0NFhYX0VNSUYxCQkJCTB4NGMwMDAwMDAKLSNkZWZpbmUgT01BUDQ0WFhfRU1JRjIJCQkJMHg0ZDAwMDAwMAotCi0vKiBSZWdpc3RlcnMgc2hpZnRzIGFuZCBtYXNrcyAqLwotCi0vKiBFTUlGX01PRF9JRF9SRVYgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NDSEVNRV9TSElGVAkJCTMwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TQ0hFTUVfTUFTSwkJCSgweDMgPDwgMzApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NT0RVTEVfSURfU0hJRlQJCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfTU9EVUxFX0lEX01BU0sJCQkoMHhmZmYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SVExfVkVSU0lPTl9TSElGVAkJCTExCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SVExfVkVSU0lPTl9NQVNLCQkJKDB4MWYgPDwgMTEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQUpPUl9SRVZJU0lPTl9TSElGVAkJOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUFKT1JfUkVWSVNJT05fTUFTSwkJKDB4NyA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUlOT1JfUkVWSVNJT05fU0hJRlQJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01JTk9SX1JFVklTSU9OX01BU0sJCSgweDNmIDw8IDApCi0KLS8qIFNUQVRVUyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfQkVfU0hJRlQJCQkJMzEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0JFX01BU0sJCQkJKDEgPDwgMzEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EVUFMX0NMS19NT0RFX1NISUZUCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRFVBTF9DTEtfTU9ERV9NQVNLCQkJKDEgPDwgMzApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19GQVNUX0lOSVRfU0hJRlQJCQkyOQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRkFTVF9JTklUX01BU0sJCQkoMSA8PCAyOSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BIWV9ETExfUkVBRFlfU0hJRlQJCTIKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BIWV9ETExfUkVBRFlfTUFTSwkJCSgxIDw8IDIpCi0KLS8qIFNEUkFNX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfU0RSQU1fVFlQRV9TSElGVAkJCTI5Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19TRFJBTV9UWVBFX01BU0sJCQkoMHg3IDw8IDI5KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfSUJBTktfUE9TX1NISUZUCQkJMjcKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0lCQU5LX1BPU19NQVNLCQkJKDB4MyA8PCAyNykKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9URVJNX1NISUZUCQkJMjQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9URVJNX01BU0sJCQkoMHg3IDw8IDI0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSMl9ERFFTX1NISUZUCQkJMjMKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUjJfRERRU19NQVNLCQkJKDEgPDwgMjMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EWU5fT0RUX1NISUZUCQkJMjEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RZTl9PRFRfTUFTSwkJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfRElTQUJMRV9ETExfU0hJRlQJCTIwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfRElTQUJMRV9ETExfTUFTSwkJKDEgPDwgMjApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TRFJBTV9EUklWRV9TSElGVAkJCTE4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19TRFJBTV9EUklWRV9NQVNLCQkJKDB4MyA8PCAxOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NXTF9TSElGVAkJCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1dMX01BU0sJCQkJKDB4MyA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05BUlJPV19NT0RFX1NISUZUCQkJMTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05BUlJPV19NT0RFX01BU0sJCQkoMHgzIDw8IDE0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ0xfU0hJRlQJCQkJMTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NMX01BU0sJCQkJKDB4ZiA8PCAxMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JPV1NJWkVfU0hJRlQJCQk3Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19ST1dTSVpFX01BU0sJCQkoMHg3IDw8IDcpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19JQkFOS19TSElGVAkJCTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0lCQU5LX01BU0sJCQkJKDB4NyA8PCA0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRUJBTktfU0hJRlQJCQkzCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FQkFOS19NQVNLCQkJCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QQUdFU0laRV9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BBR0VTSVpFX01BU0sJCQkoMHg3IDw8IDApCi0KLS8qIFNEUkFNX0NPTkZJR18yICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DUzFOVk1FTl9TSElGVAkJCTMwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DUzFOVk1FTl9NQVNLCQkJKDEgPDwgMzApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FQkFOS19QT1NfU0hJRlQJCQkyNwotI2RlZmluZSBPTUFQNDRYWF9SRUdfRUJBTktfUE9TX01BU0sJCQkoMSA8PCAyNykKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JEQk5VTV9TSElGVAkJCTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JEQk5VTV9NQVNLCQkJKDB4MyA8PCA0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkRCU0laRV9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JEQlNJWkVfTUFTSwkJCSgweDcgPDwgMCkKLQotLyogU0RSQU1fUkVGX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0lOSVRSRUZfRElTX1NISUZUCQkJMzEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0lOSVRSRUZfRElTX01BU0sJCQkoMSA8PCAzMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NSVF9TSElGVAkJCQkyOQotI2RlZmluZSBPTUFQNDRYWF9SRUdfU1JUX01BU0sJCQkJKDEgPDwgMjkpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19BU1JfU0hJRlQJCQkJMjgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0FTUl9NQVNLCQkJCSgxIDw8IDI4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUEFTUl9TSElGVAkJCQkyNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUEFTUl9NQVNLCQkJCSgweDcgPDwgMjQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUZSRVNIX1JBVEVfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUZSRVNIX1JBVEVfTUFTSwkJCSgweGZmZmYgPDwgMCkKLQotLyogU0RSQU1fUkVGX0NUUkxfU0hEVyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVGUkVTSF9SQVRFX1NIRFdfU0hJRlQJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFRlJFU0hfUkFURV9TSERXX01BU0sJCSgweGZmZmYgPDwgMCkKLQotLyogU0RSQU1fVElNXzEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlBfU0hJRlQJCQkJMjUKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlBfTUFTSwkJCQkoMHhmIDw8IDI1KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ0RfU0hJRlQJCQkyMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ0RfTUFTSwkJCQkoMHhmIDw8IDIxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XUl9TSElGVAkJCQkxNwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XUl9NQVNLCQkJCSgweGYgPDwgMTcpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19TSElGVAkJCTEyCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVNLCQkJCSgweDFmIDw8IDEyKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ19TSElGVAkJCQk2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDX01BU0sJCQkJKDB4M2YgPDwgNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlJEX1NISUZUCQkJMwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUkRfTUFTSwkJCQkoMHg3IDw8IDMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1dUUl9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1RSX01BU0sJCQkJKDB4NyA8PCAwKQotCi0vKiBTRFJBTV9USU1fMV9TSERXICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JQX1NIRFdfU0hJRlQJCQkyNQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUF9TSERXX01BU0sJCQkoMHhmIDw8IDI1KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ0RfU0hEV19TSElGVAkJCTIxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDRF9TSERXX01BU0sJCQkoMHhmIDw8IDIxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XUl9TSERXX1NISUZUCQkJMTcKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1JfU0hEV19NQVNLCQkJKDB4ZiA8PCAxNykKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkFTX1NIRFdfU0hJRlQJCQkxMgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQVNfU0hEV19NQVNLCQkJKDB4MWYgPDwgMTIpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDX1NIRFdfU0hJRlQJCQk2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDX1NIRFdfTUFTSwkJCSgweDNmIDw8IDYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JSRF9TSERXX1NISUZUCQkJMwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUkRfU0hEV19NQVNLCQkJKDB4NyA8PCAzKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XVFJfU0hEV19TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1RSX1NIRFdfTUFTSwkJCSgweDcgPDwgMCkKLQotLyogU0RSQU1fVElNXzIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFBfU0hJRlQJCQkJMjgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFBfTUFTSwkJCQkoMHg3IDw8IDI4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9PRFRfU0hJRlQJCQkyNQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9PRFRfTUFTSwkJCQkoMHg3IDw8IDI1KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU05SX1NISUZUCQkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNOUl9NQVNLCQkJKDB4MWZmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU1JEX1NISUZUCQkJNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU1JEX01BU0sJCQkoMHgzZmYgPDwgNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlRQX1NISUZUCQkJMwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SVFBfTUFTSwkJCQkoMHg3IDw8IDMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRV9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFX01BU0sJCQkJKDB4NyA8PCAwKQotCi0vKiBTRFJBTV9USU1fMl9TSERXICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1hQX1NIRFdfU0hJRlQJCQkyOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YUF9TSERXX01BU0sJCQkoMHg3IDw8IDI4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9PRFRfU0hEV19TSElGVAkJCTI1Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX09EVF9TSERXX01BU0sJCQkoMHg3IDw8IDI1KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU05SX1NIRFdfU0hJRlQJCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU05SX1NIRFdfTUFTSwkJCSgweDFmZiA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNSRF9TSERXX1NISUZUCQkJNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU1JEX1NIRFdfTUFTSwkJCSgweDNmZiA8PCA2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SVFBfU0hEV19TSElGVAkJCTMKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlRQX1NIRFdfTUFTSwkJCSgweDcgPDwgMykKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFX1NIRFdfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRV9TSERXX01BU0sJCQkoMHg3IDw8IDApCi0KLS8qIFNEUkFNX1RJTV8zICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRVNSX1NISUZUCQkJMjEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFU1JfTUFTSwkJCSgweDcgPDwgMjEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUNTX1NISUZUCQkJMTUKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRQ1NfTUFTSwkJCSgweDNmIDw8IDE1KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9URFFTQ0tNQVhfU0hJRlQJCQkxMwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9URFFTQ0tNQVhfTUFTSwkJCSgweDMgPDwgMTMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JGQ19TSElGVAkJCTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkZDX01BU0sJCQkJKDB4MWZmIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVhfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVhfTUFTSwkJCSgweGYgPDwgMCkKLQotLyogU0RSQU1fVElNXzNfU0hEVyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9DS0VTUl9TSERXX1NISUZUCQkJMjEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFU1JfU0hEV19NQVNLCQkJKDB4NyA8PCAyMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRQ1NfU0hEV19TSElGVAkJCTE1Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUNTX1NIRFdfTUFTSwkJCSgweDNmIDw8IDE1KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9URFFTQ0tNQVhfU0hEV19TSElGVAkJMTMKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfVERRU0NLTUFYX1NIRFdfTUFTSwkJKDB4MyA8PCAxMykKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkZDX1NIRFdfU0hJRlQJCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JGQ19TSERXX01BU0sJCQkoMHgxZmYgPDwgNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkFTX01BWF9TSERXX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVhfU0hEV19NQVNLCQkoMHhmIDw8IDApCi0KLS8qIExQRERSMl9OVk1fVElNICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9YUF9TSElGVAkJCTI4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9YUF9NQVNLCQkJKDB4NyA8PCAyOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1dUUl9TSElGVAkJCTI0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XVFJfTUFTSwkJCSgweDcgPDwgMjQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUF9TSElGVAkJCTIwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUF9NQVNLCQkJKDB4ZiA8PCAyMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1dSQV9TSElGVAkJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XUkFfTUFTSwkJCSgweGYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUkRfU0hJRlQJCQk4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUkRfTUFTSwkJCSgweGZmIDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SQ0RNSU5fU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SQ0RNSU5fTUFTSwkJCSgweGZmIDw8IDApCi0KLS8qIExQRERSMl9OVk1fVElNX1NIRFcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1hQX1NIRFdfU0hJRlQJCTI4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9YUF9TSERXX01BU0sJCQkoMHg3IDw8IDI4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfV1RSX1NIRFdfU0hJRlQJCTI0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XVFJfU0hEV19NQVNLCQkoMHg3IDw8IDI0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlBfU0hEV19TSElGVAkJMjAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1JQX1NIRFdfTUFTSwkJCSgweGYgPDwgMjApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XUkFfU0hEV19TSElGVAkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1dSQV9TSERXX01BU0sJCSgweGYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUkRfU0hEV19TSElGVAkJOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlJEX1NIRFdfTUFTSwkJKDB4ZmYgPDwgOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1JDRE1JTl9TSERXX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SQ0RNSU5fU0hEV19NQVNLCQkoMHhmZiA8PCAwKQotCi0vKiBQV1JfTUdNVF9DVFJMICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19JRExFTU9ERV9TSElGVAkJCTMwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19JRExFTU9ERV9NQVNLCQkJKDB4MyA8PCAzMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSElGVAkJCTEyCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QRF9USU1fTUFTSwkJCSgweGYgPDwgMTIpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EUERfRU5fU0hJRlQJCQkxMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRFBEX0VOX01BU0sJCQkoMSA8PCAxMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0xQX01PREVfU0hJRlQJCQk4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19MUF9NT0RFX01BU0sJCQkoMHg3IDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TUl9USU1fU0hJRlQJCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19TUl9USU1fTUFTSwkJCSgweGYgPDwgNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX1RJTV9NQVNLCQkJKDB4ZiA8PCAwKQotCi0vKiBQV1JfTUdNVF9DVFJMX1NIRFcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSERXX1NISUZUCQkJOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUERfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NSX1RJTV9TSERXX1NISUZUCQkJNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfU1JfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSERXX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1NfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgMCkKLQotLyogTFBERFIyX01PREVfUkVHX0RBVEEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1ZBTFVFXzBfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19WQUxVRV8wX01BU0sJCQkoMHg3ZiA8PCAwKQotCi0vKiBMUEREUjJfTU9ERV9SRUdfQ0ZHICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DU19TSElGVAkJCQkzMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1NfTUFTSwkJCQkoMSA8PCAzMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFRlJFU0hfRU5fU0hJRlQJCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVGUkVTSF9FTl9NQVNLCQkJKDEgPDwgMzApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19BRERSRVNTX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQUREUkVTU19NQVNLCQkJKDB4ZmYgPDwgMCkKLQotLyogT0NQX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfU1lTX1RIUkVTSF9NQVhfU0hJRlQJCTI0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19TWVNfVEhSRVNIX01BWF9NQVNLCQkoMHhmIDw8IDI0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTVBVX1RIUkVTSF9NQVhfU0hJRlQJCTIwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NUFVfVEhSRVNIX01BWF9NQVNLCQkoMHhmIDw8IDIwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTExfVEhSRVNIX01BWF9TSElGVAkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0xMX1RIUkVTSF9NQVhfTUFTSwkJCSgweGYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QUl9PTERfQ09VTlRfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QUl9PTERfQ09VTlRfTUFTSwkJCSgweGZmIDw8IDApCi0KLS8qIE9DUF9DRkdfVkFMXzEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NZU19CVVNfV0lEVEhfU0hJRlQJCTMwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TWVNfQlVTX1dJRFRIX01BU0sJCQkoMHgzIDw8IDMwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTExfQlVTX1dJRFRIX1NISUZUCQkJMjgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0xMX0JVU19XSURUSF9NQVNLCQkJKDB4MyA8PCAyOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1dSX0ZJRk9fREVQVEhfU0hJRlQJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1dSX0ZJRk9fREVQVEhfTUFTSwkJCSgweGZmIDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DTURfRklGT19ERVBUSF9TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ01EX0ZJRk9fREVQVEhfTUFTSwkJKDB4ZmYgPDwgMCkKLQotLyogT0NQX0NGR19WQUxfMiAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfUlJFR19GSUZPX0RFUFRIX1NISUZUCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfUlJFR19GSUZPX0RFUFRIX01BU0sJCSgweGZmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUlNEX0ZJRk9fREVQVEhfU0hJRlQJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JTRF9GSUZPX0RFUFRIX01BU0sJCSgweGZmIDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SQ01EX0ZJRk9fREVQVEhfU0hJRlQJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JDTURfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCAwKQotCi0vKiBJT0RGVF9UTEdDICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UTEVDX1NISUZUCQkJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UTEVDX01BU0sJCQkJKDB4ZmZmZiA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01UX1NISUZUCQkJCTE0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19NVF9NQVNLCQkJCSgxIDw8IDE0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQUNUX0NBUF9FTl9TSElGVAkJCTEzCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19BQ1RfQ0FQX0VOX01BU0sJCQkoMSA8PCAxMykKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX09QR19MRF9TSElGVAkJCTEyCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19PUEdfTERfTUFTSwkJCSgxIDw8IDEyKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVTRVRfUEhZX1NISUZUCQkJMTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFU0VUX1BIWV9NQVNLCQkJKDEgPDwgMTApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NTVNfU0hJRlQJCQkJOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTU1TX01BU0sJCQkJKDEgPDwgOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01DX1NISUZUCQkJCTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01DX01BU0sJCQkJKDB4MyA8PCA0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUENfU0hJRlQJCQkJMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUENfTUFTSwkJCQkoMHg3IDw8IDEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UTV9TSElGVAkJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UTV9NQVNLCQkJCSgxIDw8IDApCi0KLS8qIElPREZUX0NUUkxfTUlTUl9SU0xUICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EUU1fVExNUl9TSElGVAkJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19EUU1fVExNUl9NQVNLCQkJKDB4M2ZmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1RMX1RMTVJfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DVExfVExNUl9NQVNLCQkJKDB4N2ZmIDw8IDApCi0KLS8qIElPREZUX0FERFJfTUlTUl9SU0xUICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19BRERSX1RMTVJfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19BRERSX1RMTVJfTUFTSwkJCSgweDFmZmZmZiA8PCAwKQotCi0vKiBJT0RGVF9EQVRBX01JU1JfUlNMVF8xICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EQVRBX1RMTVJfMzFfMF9TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzMxXzBfTUFTSwkJKDB4ZmZmZmZmZmYgPDwgMCkKLQotLyogSU9ERlRfREFUQV9NSVNSX1JTTFRfMiAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzYzXzMyX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EQVRBX1RMTVJfNjNfMzJfTUFTSwkJKDB4ZmZmZmZmZmYgPDwgMCkKLQotLyogSU9ERlRfREFUQV9NSVNSX1JTTFRfMyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzY2XzY0X1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EQVRBX1RMTVJfNjZfNjRfTUFTSwkJKDB4NyA8PCAwKQotCi0vKiBQRVJGX0NOVF8xICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DT1VOVEVSMV9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NPVU5URVIxX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQotCi0vKiBQRVJGX0NOVF8yICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DT1VOVEVSMl9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NPVU5URVIyX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQotCi0vKiBQRVJGX0NOVF9DRkcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIyX01DT05OSURfRU5fU0hJRlQJCTMxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DTlRSMl9NQ09OTklEX0VOX01BU0sJCSgxIDw8IDMxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjJfUkVHSU9OX0VOX1NISUZUCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjJfUkVHSU9OX0VOX01BU0sJCSgxIDw8IDMwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjJfQ0ZHX1NISUZUCQkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIyX0NGR19NQVNLCQkJKDB4ZiA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIxX01DT05OSURfRU5fU0hJRlQJCTE1Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19DTlRSMV9NQ09OTklEX0VOX01BU0sJCSgxIDw8IDE1KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfUkVHSU9OX0VOX1NISUZUCQkxNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfUkVHSU9OX0VOX01BU0sJCSgxIDw8IDE0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfQ0ZHX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfQ0ZHX01BU0sJCQkoMHhmIDw8IDApCi0KLS8qIFBFUkZfQ05UX1NFTCAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRDJfU0hJRlQJCQkyNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRDJfTUFTSwkJCSgweGZmIDw8IDI0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVHSU9OX1NFTDJfU0hJRlQJCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVHSU9OX1NFTDJfTUFTSwkJCSgweDMgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQ09OTklEMV9TSElGVAkJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01DT05OSUQxX01BU0sJCQkoMHhmZiA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVHSU9OX1NFTDFfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUdJT05fU0VMMV9NQVNLCQkJKDB4MyA8PCAwKQotCi0vKiBQRVJGX0NOVF9USU0gKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RPVEFMX1RJTUVfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UT1RBTF9USU1FX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQotCi0vKiBSRUFEX0lETEVfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0xFTl9TSElGVAkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9MRU5fTUFTSwkJCSgweGYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hJRlQJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9JTlRFUlZBTF9NQVNLCQkoMHgxZmYgPDwgMCkKLQotLyogUkVBRF9JRExFX0NUUkxfU0hEVyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0xFTl9TSERXX1NISUZUCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0xFTl9TSERXX01BU0sJCSgweGYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hEV19TSElGVAkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hEV19NQVNLCSgweDFmZiA8PCAwKQotCi0vKiBJUlFfRU9JICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FT0lfU0hJRlQJCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU9JX01BU0sJCQkJKDEgPDwgMCkKLQotLyogSVJRU1RBVFVTX1JBV19TWVMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0ROVl9TWVNfU0hJRlQJCQkyCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ETlZfU1lTX01BU0sJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfU1lTX1NISUZUCQkJMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfU1lTX01BU0sJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRVJSX1NZU19TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VSUl9TWVNfTUFTSwkJCSgxIDw8IDApCi0KLS8qIElSUVNUQVRVU19SQVdfTEwgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0ROVl9MTF9TSElGVAkJCTIKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0ROVl9MTF9NQVNLCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX0xMX1NISUZUCQkJMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfTExfTUFTSwkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRVJSX0xMX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRVJSX0xMX01BU0sJCQkoMSA8PCAwKQotCi0vKiBJUlFTVEFUVVNfU1lTICovCi0KLS8qIElSUVNUQVRVU19MTCAqLwotCi0vKiBJUlFFTkFCTEVfU0VUX1NZUyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRE5WX1NZU19TSElGVAkJCTIKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0ROVl9TWVNfTUFTSwkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9UQV9TWVNfU0hJRlQJCQkxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9UQV9TWVNfTUFTSwkJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9FUlJfU1lTX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRVJSX1NZU19NQVNLCQkJKDEgPDwgMCkKLQotLyogSVJRRU5BQkxFX1NFVF9MTCAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRE5WX0xMX1NISUZUCQkJMgotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRE5WX0xMX01BU0sJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fVEFfTExfU0hJRlQJCQkxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9UQV9MTF9NQVNLCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0VSUl9MTF9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0VSUl9MTF9NQVNLCQkJKDEgPDwgMCkKLQotLyogSVJRRU5BQkxFX0NMUl9TWVMgKi8KLQotLyogSVJRRU5BQkxFX0NMUl9MTCAqLwotCi0vKiBaUV9DT05GSUcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMUVOX1NISUZUCQkJMzEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMUVOX01BU0sJCQkoMSA8PCAzMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMEVOX1NISUZUCQkJMzAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMEVOX01BU0sJCQkoMSA8PCAzMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0RVQUxDQUxFTl9TSElGVAkJCTI5Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9EVUFMQ0FMRU5fTUFTSwkJCSgxIDw8IDI5KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfU0ZFWElURU5fU0hJRlQJCQkyOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfU0ZFWElURU5fTUFTSwkJCSgxIDw8IDI4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfWlFJTklUX01VTFRfU0hJRlQJCTE4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUlOSVRfTVVMVF9NQVNLCQkoMHgzIDw8IDE4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfWlFDTF9NVUxUX1NISUZUCQkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRQ0xfTVVMVF9NQVNLCQkJKDB4MyA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1JFRklOVEVSVkFMX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9SRUZJTlRFUlZBTF9NQVNLCQkoMHhmZmZmIDw8IDApCi0KLS8qIFRFTVBfQUxFUlRfQ09ORklHICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzFFTl9TSElGVAkJCTMxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzFFTl9NQVNLCQkJKDEgPDwgMzEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzBFTl9TSElGVAkJCTMwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzBFTl9NQVNLCQkJKDEgPDwgMzApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9TRkVYSVRFTl9TSElGVAkJCTI4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9TRkVYSVRFTl9NQVNLCQkJKDEgPDwgMjgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9ERVZXRFRfU0hJRlQJCQkyNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfREVWV0RUX01BU0sJCQkoMHgzIDw8IDI2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfREVWQ05UX1NISUZUCQkJMjQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX0RFVkNOVF9NQVNLCQkJKDB4MyA8PCAyNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX1JFRklOVEVSVkFMX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9SRUZJTlRFUlZBTF9NQVNLCQkoMHgzZmZmZmYgPDwgMCkKLQotLyogT0NQX0VSUl9MT0cgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01BRERSU1BBQ0VfU0hJRlQJCQkxNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUFERFJTUEFDRV9NQVNLCQkJKDB4MyA8PCAxNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01CVVJTVFNFUV9TSElGVAkJCTExCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQlVSU1RTRVFfTUFTSwkJCSgweDcgPDwgMTEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQ01EX1NISUZUCQkJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01DTURfTUFTSwkJCQkoMHg3IDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQ09OTklEX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRF9NQVNLCQkJKDB4ZmYgPDwgMCkKLQotLyogRERSX1BIWV9DVFJMXzEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9QSFlfQ1RSTF8xX1NISUZUCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMV9NQVNLCQkoMHhmZmZmZmZmIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfTUFTSwkJCSgweGYgPDwgMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9TSElGVAkJNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX01BU0sJCSgweEZGIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfU0hJRlQJMTIKLSNkZWZpbmUgT01BUDQ0WFhfRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTF9NQVNLCSgweEZGRkZGIDw8IDEyKQotCi0vKiBERFJfUEhZX0NUUkxfMV9TSERXICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMV9TSERXX1NISUZUCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMV9TSERXX01BU0sJCSgweGZmZmZmZmYgPDwgNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfTEFURU5DWV9TSERXX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfU0hEV19NQVNLCQkoMHhmIDw8IDApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hEV19TSElGVAk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hEV19NQVNLCSgweEZGIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfU0hEV19TSElGVCAxMgotI2RlZmluZSBPTUFQNDRYWF9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NIRFdfTUFTSwkoMHhGRkZGRiA8PCAxMikKLQotLyogRERSX1BIWV9DVFJMXzIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9QSFlfQ1RSTF8yX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMl9NQVNLCQkoMHhmZmZmZmZmZiA8PCAwKQotCi0vKiBETU0gKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1NX0xJU0FfTUFQX0JBU0UJMHg0RTAwMDA0MAotCi0vKiBNZW1vcnkgQWRhcHRlciAoNDQ2MCBvbndhcmRzKSAqLwotI2RlZmluZSBPTUFQNDRYWF9NQV9MSVNBX01BUF9CQVNFCQkweDQ4MkFGMDQwCi0KLS8qIERNTV9MSVNBX01BUCAqLwotI2RlZmluZSBPTUFQNDRYWF9TWVNfQUREUl9TSElGVAkJMjQKLSNkZWZpbmUgT01BUDQ0WFhfU1lTX0FERFJfTUFTSwkJKDB4ZmYgPDwgMjQpCi0jZGVmaW5lIE9NQVA0NFhYX1NZU19TSVpFX1NISUZUCQkyMAotI2RlZmluZSBPTUFQNDRYWF9TWVNfU0laRV9NQVNLCQkoMHg3IDw8IDIwKQotI2RlZmluZSBPTUFQNDRYWF9TRFJDX0lOVExfU0hJRlQJMTgKLSNkZWZpbmUgT01BUDQ0WFhfU0RSQ19JTlRMX01BU0sJCSgweDMgPDwgMTgpCi0jZGVmaW5lIE9NQVA0NFhYX1NEUkNfQUREUlNQQ19TSElGVAkxNgotI2RlZmluZSBPTUFQNDRYWF9TRFJDX0FERFJTUENfTUFTSwkoMHgzIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9TRFJDX01BUF9TSElGVAkJOAotI2RlZmluZSBPTUFQNDRYWF9TRFJDX01BUF9NQVNLCQkoMHgzIDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1NEUkNfQUREUl9TSElGVAkwCi0jZGVmaW5lIE9NQVA0NFhYX1NEUkNfQUREUl9NQVNLCQkoMHhmZiA8PCAwKQotCi0vKiBETU1fTElTQV9NQVAgZmllbGRzICovCi0jZGVmaW5lIERNTV9TRFJDX01BUF9VTk1BUFBFRAkJMAotI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjFfT05MWQkJMQotI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjJfT05MWQkJMgotI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjFfQU5EX0VNSUYyCTMKLQotI2RlZmluZSBETU1fU0RSQ19JTlRMX05PTkUJCTAKLSNkZWZpbmUgRE1NX1NEUkNfSU5UTF8xMjhCCQkxCi0jZGVmaW5lIERNTV9TRFJDX0lOVExfMjU2QgkJMgotI2RlZmluZSBETU1fU0RSQ19JTlRMXzUxMgkJMwotCi0jZGVmaW5lIERNTV9TRFJDX0FERFJfU1BDX1NEUkFNCQkwCi0jZGVmaW5lIERNTV9TRFJDX0FERFJfU1BDX05WTQkJMQotI2RlZmluZSBETU1fU0RSQ19BRERSX1NQQ19JTlZBTElECTIKLQotI2RlZmluZSBETU1fTElTQV9NQVBfSU5URVJMRUFWRURfQkFTRV9WQUwJCShcCi0JKERNTV9TRFJDX01BUF9FTUlGMV9BTkRfRU1JRjIgPDwgT01BUDQ0WFhfU0RSQ19NQVBfU0hJRlQpIHxcCi0JKERNTV9TRFJDX0FERFJfU1BDX1NEUkFNIDw8IE9NQVA0NFhYX1NEUkNfQUREUlNQQ19TSElGVCkgfFwKLQkoRE1NX1NEUkNfSU5UTF8xMjhCIDw8IE9NQVA0NFhYX1NEUkNfSU5UTF9TSElGVCkgfFwKLQkoQ09ORklHX1NZU19TRFJBTV9CQVNFIDw8IE9NQVA0NFhYX1NZU19BRERSX1NISUZUKSkKLQotI2RlZmluZSBETU1fTElTQV9NQVBfRU1JRjFfT05MWV9CQVNFX1ZBTAkoXAotCShETU1fU0RSQ19NQVBfRU1JRjFfT05MWSA8PCBPTUFQNDRYWF9TRFJDX01BUF9TSElGVCl8XAotCShETU1fU0RSQ19BRERSX1NQQ19TRFJBTSA8PCBPTUFQNDRYWF9TRFJDX0FERFJTUENfU0hJRlQpfFwKLQkoRE1NX1NEUkNfSU5UTF9OT05FIDw8IE9NQVA0NFhYX1NEUkNfSU5UTF9TSElGVCkpCi0KLSNkZWZpbmUgRE1NX0xJU0FfTUFQX0VNSUYyX09OTFlfQkFTRV9WQUwJKFwKLQkoRE1NX1NEUkNfTUFQX0VNSUYyX09OTFkgPDwgT01BUDQ0WFhfU0RSQ19NQVBfU0hJRlQpfFwKLQkoRE1NX1NEUkNfQUREUl9TUENfU0RSQU0gPDwgT01BUDQ0WFhfU0RSQ19BRERSU1BDX1NISUZUKXxcCi0JKERNTV9TRFJDX0lOVExfTk9ORSA8PCBPTUFQNDRYWF9TRFJDX0lOVExfU0hJRlQpKQotCi0vKiBUcmFwIGZvciBpbnZhbGlkIFRJTEVSIFBBVCBlbnRyaWVzICovCi0jZGVmaW5lIERNTV9MSVNBX01BUF8wX0lOVkFMX0FERFJfVFJBUAkJKFwKLQkoMCAgPDwgT01BUDQ0WFhfU0RSQ19BRERSX1NISUZUKSB8XAotCShETU1fU0RSQ19NQVBfRU1JRjFfT05MWSA8PCBPTUFQNDRYWF9TRFJDX01BUF9TSElGVCl8XAotCShETU1fU0RSQ19BRERSX1NQQ19JTlZBTElEIDw8IE9NQVA0NFhYX1NEUkNfQUREUlNQQ19TSElGVCl8XAotCShETU1fU0RSQ19JTlRMX05PTkUgPDwgT01BUDQ0WFhfU0RSQ19JTlRMX1NISUZUKXxcCi0JKDB4RkYgPDwgT01BUDQ0WFhfU1lTX0FERFJfU0hJRlQpKQotCi0KLS8qIFJlZyBtYXBwaW5nIHN0cnVjdHVyZSAqLwotc3RydWN0IGVtaWZfcmVnX3N0cnVjdCB7Ci0JdTMyIGVtaWZfbW9kX2lkX3JldjsKLQl1MzIgZW1pZl9zdGF0dXM7Ci0JdTMyIGVtaWZfc2RyYW1fY29uZmlnOwotCXUzMiBlbWlmX2xwZGRyMl9udm1fY29uZmlnOwotCXUzMiBlbWlmX3NkcmFtX3JlZl9jdHJsOwotCXUzMiBlbWlmX3NkcmFtX3JlZl9jdHJsX3NoZHc7Ci0JdTMyIGVtaWZfc2RyYW1fdGltXzE7Ci0JdTMyIGVtaWZfc2RyYW1fdGltXzFfc2hkdzsKLQl1MzIgZW1pZl9zZHJhbV90aW1fMjsKLQl1MzIgZW1pZl9zZHJhbV90aW1fMl9zaGR3OwotCXUzMiBlbWlmX3NkcmFtX3RpbV8zOwotCXUzMiBlbWlmX3NkcmFtX3RpbV8zX3NoZHc7Ci0JdTMyIGVtaWZfbHBkZHIyX252bV90aW07Ci0JdTMyIGVtaWZfbHBkZHIyX252bV90aW1fc2hkdzsKLQl1MzIgZW1pZl9wd3JfbWdtdF9jdHJsOwotCXUzMiBlbWlmX3B3cl9tZ210X2N0cmxfc2hkdzsKLQl1MzIgZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YTsKLQl1MzIgcGFkZGluZzFbMV07Ci0JdTMyIGVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGFfZXMyOwotCXUzMiBwYWRkaW5nMTFbMV07Ci0JdTMyIGVtaWZfbHBkZHIyX21vZGVfcmVnX2NmZzsKLQl1MzIgZW1pZl9sM19jb25maWc7Ci0JdTMyIGVtaWZfbDNfY2ZnX3ZhbF8xOwotCXUzMiBlbWlmX2wzX2NmZ192YWxfMjsKLQl1MzIgZW1pZl9pb2RmdF90bGdjOwotCXUzMiBwYWRkaW5nMls3XTsKLQl1MzIgZW1pZl9wZXJmX2NudF8xOwotCXUzMiBlbWlmX3BlcmZfY250XzI7Ci0JdTMyIGVtaWZfcGVyZl9jbnRfY2ZnOwotCXUzMiBlbWlmX3BlcmZfY250X3NlbDsKLQl1MzIgZW1pZl9wZXJmX2NudF90aW07Ci0JdTMyIHBhZGRpbmczOwotCXUzMiBlbWlmX3JlYWRfaWRsZWN0cmw7Ci0JdTMyIGVtaWZfcmVhZF9pZGxlY3RybF9zaGR3OwotCXUzMiBwYWRkaW5nNDsKLQl1MzIgZW1pZl9pcnFzdGF0dXNfcmF3X3N5czsKLQl1MzIgZW1pZl9pcnFzdGF0dXNfcmF3X2xsOwotCXUzMiBlbWlmX2lycXN0YXR1c19zeXM7Ci0JdTMyIGVtaWZfaXJxc3RhdHVzX2xsOwotCXUzMiBlbWlmX2lycWVuYWJsZV9zZXRfc3lzOwotCXUzMiBlbWlmX2lycWVuYWJsZV9zZXRfbGw7Ci0JdTMyIGVtaWZfaXJxZW5hYmxlX2Nscl9zeXM7Ci0JdTMyIGVtaWZfaXJxZW5hYmxlX2Nscl9sbDsKLQl1MzIgcGFkZGluZzU7Ci0JdTMyIGVtaWZfenFfY29uZmlnOwotCXUzMiBlbWlmX3RlbXBfYWxlcnRfY29uZmlnOwotCXUzMiBlbWlmX2wzX2Vycl9sb2c7Ci0JdTMyIHBhZGRpbmc2WzRdOwotCXUzMiBlbWlmX2Rkcl9waHlfY3RybF8xOwotCXUzMiBlbWlmX2Rkcl9waHlfY3RybF8xX3NoZHc7Ci0JdTMyIGVtaWZfZGRyX3BoeV9jdHJsXzI7Ci19OwotCi1zdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgewotCXUzMiBkbW1fbGlzYV9tYXBfMDsKLQl1MzIgZG1tX2xpc2FfbWFwXzE7Ci0JdTMyIGRtbV9saXNhX21hcF8yOwotCXUzMiBkbW1fbGlzYV9tYXBfMzsKLX07Ci0KLSNkZWZpbmUgQ1MwCTAKLSNkZWZpbmUgQ1MxCTEKLS8qIFRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBhdCB3aGljaCB0aGUgTFBERFIyIGludGVyZmFjZSBjYW4gb3BlcmF0ZSBpbiBIeiovCi0jZGVmaW5lIE1BWF9MUEREUjJfRlJFUQk0MDAwMDAwMDAJLyogNDAwIE1IeiAqLwotCi0vKgotICogVGhlIHBlcmlvZCBvZiBERFIgY2xrIGlzIHJlcHJlc2VudGVkIGFzIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgZm9yCi0gKiBiZXR0ZXIgYWNjdXJhY3kgaW4gaW50ZWdlciBiYXNlZCBjYWxjdWxhdGlvbnMuIEhvd2V2ZXIsIGlmIHRoZSBudW1lcmF0b3IKLSAqIGFuZCBkZW5vbWluYXRvciBhcmUgdmVyeSBodWdlIHRoZXJlIG1heSBiZSBjaGFuY2VzIG9mIG92ZXJmbG93IGluCi0gKiBjYWxjdWxhdGlvbnMuIFNvLCBhcyBhIHRyYWRlLW9mZiBrZWVwIGRlbm9taW5hdG9yKGFuZCBjb25zZXF1ZW50bHkKLSAqIG51bWVyYXRvcikgd2l0aGluIGEgbGltaXQgc2FjcmlmaWNpbmcgc29tZSBhY2N1cmFjeSAtIGJ1dCBub3QgbXVjaAotICogSWYgZGVub21pbmF0b3IgYW5kIG51bWVyYXRvciBhcmUgYWxyZWFkeSBzbWFsbCAoc3VjaCBhcyBhdCA0MDAgTUh6KQotICogbm8gYWRqdXN0bWVudCBpcyBuZWVkZWQKLSAqLwotI2RlZmluZSBFTUlGX1BFUklPRF9ERU5fTElNSVQJMTAwMAotLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGRpZmZlcmVudCBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgRU1JRiBkcml2ZXIKLSAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwb2ludGVyIGFycmF5IGZvciByZWdpc3RlcgotICogY2FjaGUKLSAqLwotI2RlZmluZSBFTUlGX01BWF9OVU1fRlJFUVVFTkNJRVMJNgotLyoKLSAqIEluZGljZXMgaW50byB0aGUgQWRkcmVzc2luZyBUYWJsZSBhcnJheS4KLSAqIE9uZSBlbnRyeSBlYWNoIGZvciBhbGwgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBkZXZpY2VzIHdpdGggZGlmZmVyZW50Ci0gKiBhZGRyZXNzaW5nIHNjaGVtZXMKLSAqLwotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYNjRNCTAKLSNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDEyOE0JMQotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMjU2TQkyCi0jZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg1MTJNCTMKLSNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDFHUzQJNAotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMkdTNAk1Ci0jZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg0Rwk2Ci0jZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg4Rwk3Ci0jZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgxR1MyCTgKLSNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDJHUzIJOQotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYTUFYCTEwCi0KLS8qIE51bWJlciBvZiBSb3cgYml0cyAqLwotI2RlZmluZSBST1dfOSAgMAotI2RlZmluZSBST1dfMTAgMQotI2RlZmluZSBST1dfMTEgMgotI2RlZmluZSBST1dfMTIgMwotI2RlZmluZSBST1dfMTMgNAotI2RlZmluZSBST1dfMTQgNQotI2RlZmluZSBST1dfMTUgNgotI2RlZmluZSBST1dfMTYgNwotCi0vKiBOdW1iZXIgb2YgQ29sdW1uIGJpdHMgKi8KLSNkZWZpbmUgQ09MXzggICAwCi0jZGVmaW5lIENPTF85ICAgMQotI2RlZmluZSBDT0xfMTAgIDIKLSNkZWZpbmUgQ09MXzExICAzCi0jZGVmaW5lIENPTF83ICAgNCAvKk5vdCBzdXBwb3J0ZWQgYnkgT01BUCBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzICovCi0KLS8qIE51bWJlciBvZiBCYW5rcyovCi0jZGVmaW5lIEJBTktTMSAwCi0jZGVmaW5lIEJBTktTMiAxCi0jZGVmaW5lIEJBTktTNCAyCi0jZGVmaW5lIEJBTktTOCAzCi0KLS8qIFJlZnJlc2ggcmF0ZSBpbiBtaWNybyBzZWNvbmRzIHggMTAgKi8KLSNkZWZpbmUgVF9SRUZJXzE1XzYJMTU2Ci0jZGVmaW5lIFRfUkVGSV83XzgJNzgKLSNkZWZpbmUgVF9SRUZJXzNfOQkzOQotCi0jZGVmaW5lIEVCQU5LX0NTMV9ESVMJMAotI2RlZmluZSBFQkFOS19DUzFfRU4JMQotCi0vKiBSZWFkIExhdGVuY3kgdXNlZCBieSB0aGUgZGV2aWNlIGF0IHJlc2V0ICovCi0jZGVmaW5lIFJMX0JPT1QJCTMKLS8qIFJlYWQgTGF0ZW5jeSBmb3IgdGhlIGhpZ2hlc3QgZnJlcXVlbmN5IHlvdSB3YW50IHRvIHVzZSAqLwotI2RlZmluZSBSTF9GSU5BTAk2Ci0KLS8qIEludGVybGVhdmluZyBwb2xpY2llcyBhdCBFTUlGIGxldmVsLSBiZXR3ZWVuIGJhbmtzIGFuZCBDaGlwIFNlbGVjdHMgKi8KLSNkZWZpbmUgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX01BWF9JTlRFUkxFQVZJTkcJMAotI2RlZmluZSBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1lfTk9fQkFOS19JTlRFUkxFQVZJTkcJMwotCi0vKgotICogSW50ZXJsZWF2aW5nIHBvbGljeSB0byBiZSB1c2VkCi0gKiBDdXJyZW50bHkgc2V0IHRvIE1BWCBpbnRlcmxlYXZpbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZQotICovCi0jZGVmaW5lIEVNSUZfSU5URVJMRUFWSU5HX1BPTElDWSBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1lfTUFYX0lOVEVSTEVBVklORwotCi0vKiBTdGF0ZSBvZiB0aGUgY29yZSB2b2x0YWdlOgotICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHNvbWUgcGFyYW1ldGVycyBzdWNoIGFzIHJlYWQgaWRsZSBjb250cm9sIGFuZAotICogWlEgY2FsaWJyYXRpb24gdGltaW5ncy4gVGltaW5ncyBhcmUgbXVjaCBzdHJpY3RlciB3aGVuIHZvbHRhZ2UgcmFtcAotICogaXMgaGFwcGVuaW5nIGNvbXBhcmVkIHRvIHdoZW4gdGhlIHZvbHRhZ2UgaXMgc3RhYmxlLgotICogV2UgbmVlZCB0byBjYWxjdWxhdGUgdHdvIHNldHMgb2YgdmFsdWVzIGZvciB0aGVzZSBwYXJhbWV0ZXJzIGFuZCB1c2UKLSAqIHRoZW0gYWNjb3JkaW5nbHkKLSAqLwotI2RlZmluZSBMUEREUjJfVk9MVEFHRV9TVEFCTEUJMAotI2RlZmluZSBMUEREUjJfVk9MVEFHRV9SQU1QSU5HCTEKLQotLyogTGVuZ3RoIG9mIHRoZSBmb3JjZWQgcmVhZCBpZGxlIHBlcmlvZCBpbiB0ZXJtcyBvZiBjeWNsZXMgKi8KLSNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9WQUwJNQotCi0vKiBJbnRlcnZhbCBiZXR3ZWVuIGZvcmNlZCAncmVhZCBpZGxlcycgKi8KLS8qIFRvIGJlIHVzZWQgd2hlbiB2b2x0YWdlIGlzIGNoYW5nZWQgZm9yIERQUy9EVkZTIC0gMXVzICovCi0jZGVmaW5lIFJFQURfSURMRV9JTlRFUlZBTF9EVkZTCQkoMSoxMDAwKQotLyoKLSAqIFRvIGJlIHVzZWQgd2hlbiB2b2x0YWdlIGlzIG5vdCBzY2FsZWQgZXhjZXB0IGJ5IFNtYXJ0IFJlZmxleAotICogNTB1cyAtIG9yIG1heGltdW0gdmFsdWUgd2lsbCBkbwotICovCi0jZGVmaW5lIFJFQURfSURMRV9JTlRFUlZBTF9OT1JNQUwJKDUwKjEwMDApCi0KLQotLyoKLSAqIFVubGVzcyB2b2x0YWdlIGlzIGNoYW5naW5nIGR1ZSB0byBEVkZTIG9uZSBaUUNTIGNvbW1hbmQgZXZlcnkgNTBtcyBzaG91bGQKLSAqIGJlIGVub3VnaC4gVGhpcyBzaG91bGUgYmUgZW5vdWdoIGFsc28gaW4gdGhlIGNhc2Ugd2hlbiB2b2x0YWdlIGlzIGNoYW5naW5nCi0gKiBkdWUgdG8gc21hcnQtcmVmbGV4LgotICovCi0jZGVmaW5lIEVNSUZfWlFDU19JTlRFUlZBTF9OT1JNQUxfSU5fVVMJKDUwKjEwMDApCi0vKgotICogSWYgdm9sdGFnZSBpcyBjaGFuZ2luZyBkdWUgdG8gRFZGUyBaUUNTIHNob3VsZCBiZSBwZXJmb3JtZWQgbW9yZQotICogb2Z0ZW4oZXZlcnkgNTB1cykKLSAqLwotI2RlZmluZSBFTUlGX1pRQ1NfSU5URVJWQUxfRFZGU19JTl9VUwk1MAotCi0vKiBUaGUgaW50ZXJ2YWwgYmV0d2VlbiBaUUNMIGNvbW1hbmRzIGFzIGEgbXVsdGlwbGUgb2YgWlFDUyBpbnRlcnZhbCAqLwotI2RlZmluZSBSRUdfWlFfWlFDTF9NVUxUCQk0Ci0vKiBUaGUgaW50ZXJ2YWwgYmV0d2VlbiBaUUlOSVQgY29tbWFuZHMgYXMgYSBtdWx0aXBsZSBvZiBaUUNMIGludGVydmFsICovCi0jZGVmaW5lIFJFR19aUV9aUUlOSVRfTVVMVAkJMwotLyogRW5hYmxlIFpRIENhbGlicmF0aW9uIG9uIGV4aXRpbmcgU2VsZi1yZWZyZXNoICovCi0jZGVmaW5lIFJFR19aUV9TRkVYSVRFTl9FTkFCTEUJCTEKLS8qCi0gKiBaUSBDYWxpYnJhdGlvbiBzaW11bHRhbmVvdXNseSBvbiBib3RoIGNoaXAtc2VsZWN0czoKLSAqIE5lZWRzIG9uZSBjYWxpYnJhdGlvbiByZXNpc3RvciBwZXIgQ1MKLSAqIE5vbmUgb2YgdGhlIGJvYXJkcyB0aGF0IHdlIGtub3cgb2YgaGF2ZSB0aGlzIGNhcGFiaWxpdHkKLSAqIFNvIGRpc2FibGVkIGJ5IGRlZmF1bHQKLSAqLwotI2RlZmluZSBSRUdfWlFfRFVBTENBTEVOX0RJU0FCTEUJMAotLyoKLSAqIEVuYWJsZSBaUSBDYWxpYnJhdGlvbiBieSBkZWZhdWx0IG9uIENTMC4gSWYgd2UgYXJlIGFza2VkIHRvIHByb2dyYW0KLSAqIHRoZSBFTUlGIHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIGNvbm5lY3RlZCB0byBDUzAgZm9yIHN1cmUKLSAqLwotI2RlZmluZSBSRUdfWlFfQ1MwRU5fRU5BQkxFCQkxCi0KLS8qIEVNSUZfUFdSX01HTVRfQ1RSTCByZWdpc3RlciAqLwotLyogTG93IHBvd2VyIG1vZGVzICovCi0jZGVmaW5lIExQX01PREVfRElTQUJMRQkJMAotI2RlZmluZSBMUF9NT0RFX0NMT0NLX1NUT1AJMQotI2RlZmluZSBMUF9NT0RFX1NFTEZfUkVGUkVTSAkyCi0jZGVmaW5lIExQX01PREVfUFdSX0ROCQkzCi0KLS8qIFJFR19EUERfRU4gKi8KLSNkZWZpbmUgRFBEX0RJU0FCTEUJMAotI2RlZmluZSBEUERfRU5BQkxFCTEKLQotLyogTWF4aW11bSBkZWxheSBiZWZvcmUgTG93IFBvd2VyIE1vZGVzICovCi0jZGVmaW5lIFJFR19DU19USU0JCTB4RgotI2RlZmluZSBSRUdfU1JfVElNCQkweEYKLSNkZWZpbmUgUkVHX1BEX1RJTQkJMHhGCi0KLS8qIEVNSUZfUFdSX01HTVRfQ1RSTCByZWdpc3RlciAqLwotI2RlZmluZSBFTUlGX1BXUl9NR01UX0NUUkwgKFwKLQkoKFJFR19DU19USU0gPDwgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSElGVCkgJiBPTUFQNDRYWF9SRUdfQ1NfVElNX01BU0spfFwKLQkoKFJFR19TUl9USU0gPDwgT01BUDQ0WFhfUkVHX1NSX1RJTV9TSElGVCkgJiBPTUFQNDRYWF9SRUdfU1JfVElNX01BU0spfFwKLQkoKFJFR19QRF9USU0gPDwgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSElGVCkgJiBPTUFQNDRYWF9SRUdfUERfVElNX01BU0spfFwKLQkoKFJFR19QRF9USU0gPDwgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSElGVCkgJiBPTUFQNDRYWF9SRUdfUERfVElNX01BU0spfFwKLQkoKExQX01PREVfRElTQUJMRSA8PCBPTUFQNDRYWF9SRUdfTFBfTU9ERV9TSElGVClcCi0JCQkmIE9NQVA0NFhYX1JFR19MUF9NT0RFX01BU0spIHxcCi0JKChEUERfRElTQUJMRSA8PCBPTUFQNDRYWF9SRUdfRFBEX0VOX1NISUZUKVwKLQkJCSYgT01BUDQ0WFhfUkVHX0RQRF9FTl9NQVNLKSlcCi0KLSNkZWZpbmUgRU1JRl9QV1JfTUdNVF9DVFJMX1NIRFcgKFwKLQkoKFJFR19DU19USU0gPDwgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSERXX1NISUZUKVwKLQkJCSYgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSERXX01BU0spIHxcCi0JKChSRUdfU1JfVElNIDw8IE9NQVA0NFhYX1JFR19TUl9USU1fU0hEV19TSElGVClcCi0JCQkmIE9NQVA0NFhYX1JFR19TUl9USU1fU0hEV19NQVNLKSB8XAotCSgoUkVHX1BEX1RJTSA8PCBPTUFQNDRYWF9SRUdfUERfVElNX1NIRFdfU0hJRlQpXAotCQkJJiBPTUFQNDRYWF9SRUdfUERfVElNX1NIRFdfTUFTSykgfFwKLQkoKFJFR19QRF9USU0gPDwgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSERXX1NISUZUKVwKLQkJCSYgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSERXX01BU0spKQotCi0vKiBFTUlGX0wzX0NPTkZJRyByZWdpc3RlciB2YWx1ZSAqLwotI2RlZmluZSBFTUlGX0wzX0NPTkZJR19WQUxfU1lTXzEwX0xMXzAJMHgwQTAwMDBGRgotI2RlZmluZSBFTUlGX0wzX0NPTkZJR19WQUxfU1lTXzEwX01QVV8zX0xMXzAJMHgwQTMwMDAwMAotLyoKLSAqIFZhbHVlIG9mIGJpdHMgMTI6MzEgb2YgRERSX1BIWV9DVFJMXzEgcmVnaXN0ZXI6Ci0gKiBBbGwgdGhlc2UgZmllbGRzIGhhdmUgbWFnaWMgdmFsdWVzIGRlcGVuZGVudCBvbiBmcmVxdWVuY3kgYW5kCi0gKiBkZXRlcm1pbmVkIGJ5IFBIWSBhbmQgRExMIGludGVncmF0aW9uIHdpdGggRU1JRi4gU2V0dGluZyB0aGUgbWFnaWMKLSAqIHZhbHVlcyBzdWdnZXN0ZWQgYnkgaHcgdGVhbS4KLSAqLwotI2RlZmluZSBFTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMCQkJMHgwNDlGRgotI2RlZmluZSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF80MDBfTUhaCQkJMHg0MQotI2RlZmluZSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8yMDBfTUhaCQkJMHg4MAotI2RlZmluZSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8xMDBfTUhaX0FORF9MRVNTCTB4RkYKLQotLyoKLSogTVIxIHZhbHVlOgotKiBCdXJzdCBsZW5ndGgJOiA4Ci0qIEJ1cnN0IHR5cGUJOiBzZXF1ZW50aWFsCi0qIFdyYXAJCTogZW5hYmxlZAotKiBuV1IJCTogMyhkZWZhdWx0KS4gRU1JRiBkb2VzIG5vdCBkbyBwcmUtY2hhcmdlLgotKgkJOiBTbyBuV1IgaXMgZG9uJ3QgY2FyZQotKi8KLSNkZWZpbmUgTVIxX0JMXzhfQlRfU0VRX1dSQVBfRU5fTldSXzMJMHgyMwotCi0vKiBNUjIgKi8KLSNkZWZpbmUgTVIyX1JMM19XTDEJCQkxCi0jZGVmaW5lIE1SMl9STDRfV0wyCQkJMgotI2RlZmluZSBNUjJfUkw1X1dMMgkJCTMKLSNkZWZpbmUgTVIyX1JMNl9XTDMJCQk0Ci0KLS8qIE1SMTA6IFpRIGNhbGlicmF0aW9uIGNvZGVzICovCi0jZGVmaW5lIE1SMTBfWlFfWlFDUwkJMHg1NgotI2RlZmluZSBNUjEwX1pRX1pRQ0wJCTB4QUIKLSNkZWZpbmUgTVIxMF9aUV9aUUlOSVQJCTB4RkYKLSNkZWZpbmUgTVIxMF9aUV9aUVJFU0VUCQkweEMzCi0KLS8qIFRFTVBfQUxFUlRfQ09ORklHICovCi0jZGVmaW5lIFRFTVBfQUxFUlRfUE9MTF9JTlRFUlZBTF9NUwkzNjAgLyogZm9yIHRlbXAgZ3JhZGllbnQgLSA1IEMvcyAqLwotI2RlZmluZSBURU1QX0FMRVJUX0NPTkZJR19ERVZDVF8xCTAKLSNkZWZpbmUgVEVNUF9BTEVSVF9DT05GSUdfREVWV0RUXzMyCTIKLQotLyogTVIxNiB2YWx1ZTogcmVmcmVzaCBmdWxsIGFycmF5KG5vIHBhcnRpYWwgYXJyYXkgc2VsZiByZWZyZXNoKSAqLwotI2RlZmluZSBNUjE2X1JFRl9GVUxMX0FSUkFZCTAKLQotLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgd2Uga2VlcCBpbiBvdXIgYXJyYXkgb2YgdGltaW5nIHRhYmxlcwotICogV2UgbmVlZCBub3Qga2VlcCBhbGwgdGhlIHNwZWVkIGJpbnMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKLSAqIFdlIG5lZWQgdG8ga2VlcCB0aW1pbmcgdGFibGVzIGZvciBvbmx5IHRoZSBzcGVlZCBiaW5zIHRoYXQgd2UKLSAqIGFyZSBpbnRlcmVzdGVkIGluCi0gKi8KLSNkZWZpbmUgTUFYX05VTV9TUEVFREJJTlMJNAotCi0vKiBMUEREUjIgRGVuc2l0aWVzICovCi0jZGVmaW5lIExQRERSMl9ERU5TSVRZXzY0TWIJMAotI2RlZmluZSBMUEREUjJfREVOU0lUWV8xMjhNYgkxCi0jZGVmaW5lIExQRERSMl9ERU5TSVRZXzI1Nk1iCTIKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfNTEyTWIJMwotI2RlZmluZSBMUEREUjJfREVOU0lUWV8xR2IJNAotI2RlZmluZSBMUEREUjJfREVOU0lUWV8yR2IJNQotI2RlZmluZSBMUEREUjJfREVOU0lUWV80R2IJNgotI2RlZmluZSBMUEREUjJfREVOU0lUWV84R2IJNwotI2RlZmluZSBMUEREUjJfREVOU0lUWV8xNkdiCTgKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMzJHYgk5Ci0KLS8qIExQRERSMiB0eXBlICovCi0jZGVmaW5lCUxQRERSMl9UWVBFX1M0CTAKLSNkZWZpbmUJTFBERFIyX1RZUEVfUzIJMQotI2RlZmluZQlMUEREUjJfVFlQRV9OVk0JMgotCi0vKiBMUEREUjIgSU8gd2lkdGggKi8KLSNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzMyCTAKLSNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzE2CTEKLSNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzgJMgotCi0vKiBNb2RlIHJlZ2lzdGVyIG51bWJlcnMgKi8KLSNkZWZpbmUgTFBERFIyX01SMAkwCi0jZGVmaW5lIExQRERSMl9NUjEJMQotI2RlZmluZSBMUEREUjJfTVIyCTIKLSNkZWZpbmUgTFBERFIyX01SMwkzCi0jZGVmaW5lIExQRERSMl9NUjQJNAotI2RlZmluZSBMUEREUjJfTVI1CTUKLSNkZWZpbmUgTFBERFIyX01SNgk2Ci0jZGVmaW5lIExQRERSMl9NUjcJNwotI2RlZmluZSBMUEREUjJfTVI4CTgKLSNkZWZpbmUgTFBERFIyX01SOQk5Ci0jZGVmaW5lIExQRERSMl9NUjEwCTEwCi0jZGVmaW5lIExQRERSMl9NUjExCTExCi0jZGVmaW5lIExQRERSMl9NUjE2CTE2Ci0jZGVmaW5lIExQRERSMl9NUjE3CTE3Ci0jZGVmaW5lIExQRERSMl9NUjE4CTE4Ci0KLS8qIE1SMCAqLwotI2RlZmluZSBMUEREUjJfTVIwX0RBSV9TSElGVAkwCi0jZGVmaW5lIExQRERSMl9NUjBfREFJX01BU0sJMQotI2RlZmluZSBMUEREUjJfTVIwX0RJX1NISUZUCTEKLSNkZWZpbmUgTFBERFIyX01SMF9ESV9NQVNLCSgxIDw8IDEpCi0jZGVmaW5lIExQRERSMl9NUjBfRE5WSV9TSElGVAkyCi0jZGVmaW5lIExQRERSMl9NUjBfRE5WSV9NQVNLCSgxIDw8IDIpCi0KLS8qIE1SNCAqLwotI2RlZmluZSBNUjRfU0RSQU1fUkVGX1JBVEVfU0hJRlQJMAotI2RlZmluZSBNUjRfU0RSQU1fUkVGX1JBVEVfTUFTSwkJNwotI2RlZmluZSBNUjRfVFVGX1NISUZUCQkJNwotI2RlZmluZSBNUjRfVFVGX01BU0sJCQkoMSA8PCA3KQotCi0vKiBNUjQgU0RSQU0gUmVmcmVzaCBSYXRlIGZpZWxkIHZhbHVlcyAqLwotI2RlZmluZSBTRFJBTV9URU1QX0xFU1NfTE9XX1NIVVRET1dOCQkJMHgwCi0jZGVmaW5lIFNEUkFNX1RFTVBfTEVTU180WF9SRUZSRVNIX0FORF9USU1JTkdTCQkweDEKLSNkZWZpbmUgU0RSQU1fVEVNUF9MRVNTXzJYX1JFRlJFU0hfQU5EX1RJTUlOR1MJCTB4MgotI2RlZmluZSBTRFJBTV9URU1QX05PTUlOQUwJCQkJMHgzCi0jZGVmaW5lIFNEUkFNX1RFTVBfUkVTRVJWRURfNAkJCQkweDQKLSNkZWZpbmUgU0RSQU1fVEVNUF9ISUdIX0RFUkFURV9SRUZSRVNICQkJMHg1Ci0jZGVmaW5lIFNEUkFNX1RFTVBfSElHSF9ERVJBVEVfUkVGUkVTSF9BTkRfVElNSU5HUwkweDYKLSNkZWZpbmUgU0RSQU1fVEVNUF9WRVJZX0hJR0hfU0hVVERPV04JCQkweDcKLQotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NBTVNVTkcJMQotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1FJTU9OREEJMgotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VMUElEQQkzCi0jZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfRVRST04JNAotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05BTllBCTUKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9IWU5JWAk2Ci0jZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfTU9TRUwJNwotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1dJTkJPTkQJOAotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VTTVQJOQotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NQQU5TSU9OIDExCi0jZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfU1NUCQkxMgotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1pNT1MJMTMKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9JTlRFTAkxNAotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05VTU9OWVgJMjU0Ci0jZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfTUlDUk9OCTI1NQotCi0vKiBNUjggcmVnaXN0ZXIgZmllbGRzICovCi0jZGVmaW5lIE1SOF9UWVBFX1NISUZUCQkweDAKLSNkZWZpbmUgTVI4X1RZUEVfTUFTSwkJMHgzCi0jZGVmaW5lIE1SOF9ERU5TSVRZX1NISUZUCTB4MgotI2RlZmluZSBNUjhfREVOU0lUWV9NQVNLCSgweEYgPDwgMHgyKQotI2RlZmluZSBNUjhfSU9fV0lEVEhfU0hJRlQJMHg2Ci0jZGVmaW5lIE1SOF9JT19XSURUSF9NQVNLCSgweDMgPDwgMHg2KQotCi1zdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgewotCXU4CW51bV9iYW5rczsKLQl1OAl0X1JFRklfdXNfeDEwOwotCXU4CXJvd19zelsyXTsgLyogT25lIGVudHJ5IGVhY2ggZm9yIHgzMiBhbmQgeDE2ICovCi0JdTgJY29sX3N6WzJdOyAvKiBPbmUgZW50cnkgZWFjaCBmb3IgeDMyIGFuZCB4MTYgKi8KLX07Ci0KLS8qIFN0cnVjdHVyZSBmb3IgdGltaW5ncyBmcm9tIHRoZSBERFIgZGF0YXNoZWV0ICovCi1zdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgewotCXUzMiBtYXhfZnJlcTsKLQl1OCBSTDsKLQl1OCB0UlBhYjsKLQl1OCB0UkNEOwotCXU4IHRXUjsKLQl1OCB0UkFTbWluOwotCXU4IHRSUkQ7Ci0JdTggdFdUUngyOwotCXU4IHRYU1I7Ci0JdTggdFhQeDI7Ci0JdTggdFJGQ2FiOwotCXU4IHRSVFB4MjsKLQl1OCB0Q0tFOwotCXU4IHRDS0VTUjsKLQl1OCB0WlFDUzsKLQl1MzIgdFpRQ0w7Ci0JdTMyIHRaUUlOSVQ7Ci0JdTggdERRU0NLTUFYeDI7Ci0JdTggdFJBU21heDsKLQl1OCB0RkFXOwotCi19OwotCi0vKgotICogTWluIHRDSyB2YWx1ZXMgZm9yIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnM6Ci0gKiBJZiB0aGUgY2FsY3VsYXRlZCBjbG9jayBjeWNsZXMgZm9yIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlciBpcwotICogbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIG1pbiB0Q0sgdmFsdWUsIHdlIG5lZWQgdG8gc2V0IHRoZSBtaW4KLSAqIHRDSyB2YWx1ZS4gVGhpcyBtYXkgaGFwcGVuIGF0IGxvd2VyIGZyZXF1ZW5jaWVzLgotICovCi1zdHJ1Y3QgbHBkZHIyX21pbl90Y2sgewotCXUzMiB0Ukw7Ci0JdTMyIHRSUF9BQjsKLQl1MzIgdFJDRDsKLQl1MzIgdFdSOwotCXUzMiB0UkFTX01JTjsKLQl1MzIgdFJSRDsKLQl1MzIgdFdUUjsKLQl1MzIgdFhQOwotCXUzMiB0UlRQOwotCXU4ICB0Q0tFOwotCXUzMiB0Q0tFU1I7Ci0JdTMyIHRGQVc7Ci19OwotCi1zdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIHsKLQl1OAl0eXBlOwotCXU4CWRlbnNpdHk7Ci0JdTgJaW9fd2lkdGg7Ci0JdTgJbWFudWZhY3R1cmVyOwotfTsKLQotc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyB7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICoqYWNfdGltaW5nczsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2s7Ci19OwotCi0vKiBEZXRhaWxzIG9mIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byBlYWNoIGNoaXAtc2VsZWN0IG9mIGFuIEVNSUYgaW5zdGFuY2UgKi8KLXN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzIHsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlX2RldGFpbHM7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZV9kZXRhaWxzOwotCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKmNzMF9kZXZpY2VfdGltaW5nczsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICpjczFfZGV2aWNlX3RpbWluZ3M7Ci19OwotCi0vKgotICogU3RydWN0dXJlIGNvbnRhaW5pbmcgc2hhZG93IG9mIGltcG9ydGFudCByZWdpc3RlcnMgaW4gRU1JRgotICogVGhlIGNhbGN1bGF0aW9uIGZ1bmN0aW9uIGZpbGxzIGluIHRoaXMgc3RydWN0dXJlIHRvIGJlIGxhdGVyIHVzZWQgZm9yCi0gKiBpbml0aWFsaXphdGlvbiBhbmQgRFZGUwotICovCi1zdHJ1Y3QgZW1pZl9yZWdzIHsKLQl1MzIgZnJlcTsKLQl1MzIgc2RyYW1fY29uZmlnX2luaXQ7Ci0JdTMyIHNkcmFtX2NvbmZpZzsKLQl1MzIgcmVmX2N0cmw7Ci0JdTMyIHNkcmFtX3RpbTE7Ci0JdTMyIHNkcmFtX3RpbTI7Ci0JdTMyIHNkcmFtX3RpbTM7Ci0JdTMyIHJlYWRfaWRsZV9jdHJsOwotCXUzMiB6cV9jb25maWc7Ci0JdTMyIHRlbXBfYWxlcnRfY29uZmlnOwotCXUzMiBlbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQ7Ci0JdTMyIGVtaWZfZGRyX3BoeV9jdGxyXzE7Ci19OwotCi0vKiBhc3NlcnQgbWFjcm9zICovCi0jaWYgZGVmaW5lZChERUJVRykKLSNkZWZpbmUgZW1pZl9hc3NlcnQoYykJKHsgaWYgKCEoYykpIGZvciAoOzspOyB9KQotI2Vsc2UKLSNkZWZpbmUgZW1pZl9hc3NlcnQoYykJKHsgaWYgKDApIGhhbmcoKTsgfSkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKLXZvaWQgZW1pZl9nZXRfcmVnX2R1bXAodTMyIGVtaWZfbnIsIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKipyZWdzKTsKLXZvaWQgZW1pZl9nZXRfZG1tX3JlZ3MoY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICoqZG1tX2xpc2FfcmVncyk7Ci0jZWxzZQotc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqZW1pZl9nZXRfZGV2aWNlX2RldGFpbHModTMyIGVtaWZfbnIsIHU4IGNzLAotCQkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqbHBkZHIyX2Rldl9kZXRhaWxzKTsKLXZvaWQgZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3ModTMyIGVtaWZfbnIsCi0JCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczBfZGV2aWNlX3RpbWluZ3MsCi0JCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczFfZGV2aWNlX3RpbWluZ3MpOwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9tbWNfaG9zdF9kZWYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvbW1jX2hvc3RfZGVmLmgKaW5kZXggNzMzZDhlZC4uNzQ0MzljOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9tbWNfaG9zdF9kZWYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L21tY19ob3N0X2RlZi5oCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIE9NQVBfSFNNTUMyX0JBU0UJMHg0ODBCNDEwMAogI2RlZmluZSBPTUFQX0hTTU1DM19CQVNFCTB4NDgwQUQxMDAKIAotdHlwZWRlZiBzdHJ1Y3QgaHNtbWMgeworc3RydWN0IGhzbW1jIHsKIAl1bnNpZ25lZCBjaGFyIHJlczFbMHgxMF07CiAJdW5zaWduZWQgaW50IHN5c2NvbmZpZzsJCS8qIDB4MTAgKi8KIAl1bnNpZ25lZCBpbnQgc3lzc3RhdHVzOwkJLyogMHgxNCAqLwpAQCAtNTUsNyArNTUsNyBAQAogCXVuc2lnbmVkIGludCBpZTsJCS8qIDB4MTM0ICovCiAJdW5zaWduZWQgY2hhciByZXM0WzB4OF07CiAJdW5zaWduZWQgaW50IGNhcGE7CQkvKiAweDE0MCAqLwotfSBoc21tY190OworfTsKIAogLyoKICAqIE9NQVAgSFMgTU1DIEJpdCBkZWZpbml0aW9ucwpAQCAtMTYwLDEzICsxNjAsNiBAQAogI2RlZmluZSBDTEtfNDAwS0haCQkJMQogI2RlZmluZSBDTEtfTUlTQwkJCTIKIAotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBjYXJkX3R5cGU7Ci0JdW5zaWduZWQgaW50IHZlcnNpb247Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0JdW5zaWduZWQgaW50IFJDQTsKLX0gbW1jX2NhcmRfZGF0YTsKICNkZWZpbmUgUlNQX1RZUEVfTk9ORQkoUlNQX1RZUEVfTk9SU1AgICB8IENDQ0VfTk9DSEVDSyB8IENJQ0VfTk9DSEVDSykKICNkZWZpbmUgTU1DX0NNRDAJKElOREVYKDApICB8IFJTUF9UWVBFX05PTkUgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwNC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwLmgKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwNC5oCnJlbmFtZSB0byBhcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L29tYXAuaAppbmRleCA2MWViYjNkLi5lOTk0MjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L29tYXA0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwLmgKQEAgLTQ0LDcgKzQ0LDggQEAKIAogI2RlZmluZSBPTUFQNDRYWF9EUkFNX0FERFJfU1BBQ0VfU1RBUlQJMHg4MDAwMDAwMAogI2RlZmluZSBPTUFQNDRYWF9EUkFNX0FERFJfU1BBQ0VfRU5ECTB4RDAwMDAwMDAKLQorI2RlZmluZSBEUkFNX0FERFJfU1BBQ0VfU1RBUlQJT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX1NUQVJUCisjZGVmaW5lIERSQU1fQUREUl9TUEFDRV9FTkQJT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX0VORAogCiAvKiBDT05UUk9MICovCiAjZGVmaW5lIENUUkxfQkFTRQkJKE9NQVA0NFhYX0w0X0NPUkVfQkFTRSArIDB4MjAwMCkKQEAgLTU3LDE2ICs1OCwxMSBAQAogLyogQ09OVFJPTF9JRF9DT0RFICovCiAjZGVmaW5lIENPTlRST0xfSURfQ09ERQkJMHg0QTAwMjIwNAogCi0vKiA0NDMwICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzFfMAkweDBCODUyMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMAkweDFCODUyMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMQkweDNCOTVDMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMgkweDRCOTVDMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMwkweDZCOTVDMDJGCi0KLS8qIDQ0NjAgKi8KLSNkZWZpbmUgT01BUDQ0NjBfQ09OVFJPTF9JRF9DT0RFX0VTMV8wCTB4MEI5NEUwMkYKLSNkZWZpbmUgT01BUDQ0NjBfQ09OVFJPTF9JRF9DT0RFX0VTMV8xCTB4MkI5NEUwMkYKKyNkZWZpbmUgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMV8wCTB4MEI4NTIwMkYKKyNkZWZpbmUgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMl8wCTB4MUI4NTIwMkYKKyNkZWZpbmUgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMl8xCTB4M0I5NUMwMkYKKyNkZWZpbmUgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMl8yCTB4NEI5NUMwMkYKKyNkZWZpbmUgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMl8zCTB4NkI5NUMwMkYKIAogLyogVUFSVCAqLwogI2RlZmluZSBVQVJUMV9CQVNFCQkoT01BUDQ0WFhfTDRfUEVSX0JBU0UgKyAweDZhMDAwKQpAQCAtMTUxLDcgKzE0Nyw3IEBACiAJdW5zaWduZWQgaW50IGNvbnRyb2xfbGRvc3JhbV9tcHVfdm9sdGFnZV9jdHJsOwkvKiAweDRBMDAyMzI0ICovCiAJdW5zaWduZWQgaW50IGNvbnRyb2xfbGRvc3JhbV9jb3JlX3ZvbHRhZ2VfY3RybDsJLyogMHg0QTAwMjMyOCAqLwogCXVuc2lnbmVkIGludCBwYWQzWzI2MDI3N107Ci0JdW5zaWduZWQgaW50IGNvbnRyb2xfcGJpYXNsaXRlOwkJCS8qIDB4NEExMDA2MDAgKi8KKwl1bnNpZ25lZCBpbnQgY29udHJvbF9wYmlhc2xpdGU7ICAgICAgICAgICAgICAgICAvKiAweDRBMTAwNjAwICovCiAJdW5zaWduZWQgaW50IHBhZDRbNjNdOwogCXVuc2lnbmVkIGludCBjb250cm9sX2VmdXNlXzE7CQkJLyogMHg0QTEwMDcwMCAqLwogCXVuc2lnbmVkIGludCBjb250cm9sX2VmdXNlXzI7CQkJLyogMHg0QTEwMDcwNCAqLwpAQCAtMTg4LDE2ICsxODQsNiBAQAogI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9UX0RFTgkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweDEwKQogI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfU1BBQ0VfRU5ECShTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUiArIDB4MTQpCiAKLS8qIFNpbGljb24gcmV2aXNpb25zICovCi0jZGVmaW5lIE9NQVA0NDMwX1NJTElDT05fSURfSU5WQUxJRAkweEZGRkZGRkZGCi0jZGVmaW5lIE9NQVA0NDMwX0VTMV8wCTB4NDQzMDAxMDAKLSNkZWZpbmUgT01BUDQ0MzBfRVMyXzAJMHg0NDMwMDIwMAotI2RlZmluZSBPTUFQNDQzMF9FUzJfMQkweDQ0MzAwMjEwCi0jZGVmaW5lIE9NQVA0NDMwX0VTMl8yCTB4NDQzMDAyMjAKLSNkZWZpbmUgT01BUDQ0MzBfRVMyXzMJMHg0NDMwMDIzMAotI2RlZmluZSBPTUFQNDQ2MF9FUzFfMAkweDQ0NjAwMTAwCi0jZGVmaW5lIE9NQVA0NDYwX0VTMV8xCTB4NDQ2MDAxMTAKLQogLyogUk9NIGNvZGUgZGVmaW5lcyAqLwogLyogQm9vdCBkZXZpY2UgKi8KICNkZWZpbmUgQk9PVF9ERVZJQ0VfTUFTSwkweEZGCkBAIC0yMDUsNSArMTkxLDIxIEBACiAjZGVmaW5lIERFVl9ERVNDX1BUUl9PRkZTRVQJMHg0CiAjZGVmaW5lIERFVl9EQVRBX1BUUl9PRkZTRVQJMHgxOAogI2RlZmluZSBCT09UX01PREVfT0ZGU0VUCTB4OAorI2RlZmluZSBSRVNFVF9SRUFTT05fT0ZGU0VUCTB4OQorI2RlZmluZSBDSF9GTEFHU19PRkZTRVQJCTB4QQogCisjZGVmaW5lIENIX0ZMQUdTX0NIU0VUVElOR1MJKDB4MSA8PCAwKQorI2RlZmluZSBDSF9GTEFHU19DSFJBTQkJKDB4MSA8PCAxKQorI2RlZmluZSBDSF9GTEFHU19DSEZMQVNICSgweDEgPDwgMikKKyNkZWZpbmUgQ0hfRkxBR1NfQ0hNTUNTRAkoMHgxIDw8IDMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3Qgb21hcF9ib290X3BhcmFtZXRlcnMgeworCWNoYXIgKmJvb3RfbWVzc2FnZTsKKwl1bnNpZ25lZCBpbnQgbWVtX2Jvb3RfZGVzY3JpcHRvcjsKKwl1bnNpZ25lZCBjaGFyIG9tYXBfYm9vdGRldmljZTsKKwl1bnNpZ25lZCBjaGFyIHJlc2V0X3JlYXNvbjsKKwl1bnNpZ25lZCBjaGFyIGNoX2ZsYWdzOworfTsKKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L3N5c19wcm90by5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9zeXNfcHJvdG8uaAppbmRleCAxYWFjYmIxLi40MTQ2ZTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L3N5c19wcm90by5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvc3lzX3Byb3RvLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgX1NZU19QUk9UT19IXwogI2RlZmluZSBfU1lTX1BST1RPX0hfCiAKLSNpbmNsdWRlIDxhc20vYXJjaC9vbWFwNC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jbG9ja3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vb21hcF9jb21tb24uaD4KQEAgLTMyLDE3ICszMiwxNyBAQAogfTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgb21hcF9zeXNpbmZvIHN5c2luZm87CiAKLWV4dGVybiBzdHJ1Y3Qgb21hcDRfcHJjbV9yZWdzICpjb25zdCBwcmNtOwotCiB2b2lkIGdwbWNfaW5pdCh2b2lkKTsKIHZvaWQgd2F0Y2hkb2dfaW5pdCh2b2lkKTsKIHUzMiBnZXRfZGV2aWNlX3R5cGUodm9pZCk7CiB2b2lkIGRvX3NldF9tdXgodTMyIGJhc2UsIHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb25zdCAqYXJyYXksIGludCBzaXplKTsKK3ZvaWQgc2V0X211eGNvbmZfcmVnc19lc3NlbnRpYWwodm9pZCk7CiB2b2lkIHNldF9tdXhjb25mX3JlZ3Nfbm9uX2Vzc2VudGlhbCh2b2lkKTsKIHZvaWQgc3IzMih2b2lkICosIHUzMiwgdTMyLCB1MzIpOwogdTMyIHdhaXRfb25fdmFsdWUodTMyLCB1MzIsIHZvaWQgKiwgdTMyKTsKIHZvaWQgc2RlbGF5KHVuc2lnbmVkIGxvbmcpOwogdm9pZCBzZXRfcGwzMTBfY3RybF9yZWcodTMyIHZhbCk7Cit2b2lkIG9tYXBfcmV2X3N0cmluZyhjaGFyICpvbWFwX3Jldl9zdHJpbmcpOwogdm9pZCBzZXR1cF9jbG9ja3NfZm9yX2NvbnNvbGUodm9pZCk7CiB2b2lkIHByY21faW5pdCh2b2lkKTsKIHZvaWQgYnlwYXNzX2RwbGwodTMyICpjb25zdCBiYXNlKTsKQEAgLTUxLDcgKzUxLDE3IEBACiB1MzIgb21hcDRfZGRyX2Nsayh2b2lkKTsKIHZvaWQgY2FuY2VsX291dCh1MzIgKm51bSwgdTMyICpkZW4sIHUzMiBkZW5fbGltaXQpOwogdm9pZCBzZHJhbV9pbml0KHZvaWQpOwotdTMyIG9tYXA0X3NkcmFtX3NpemUodm9pZCk7Cit1MzIgb21hcF9zZHJhbV9zaXplKHZvaWQpOwordTMyIGNvcnRleF9yZXYodm9pZCk7Cit2b2lkIGluaXRfb21hcF9yZXZpc2lvbih2b2lkKTsKK3ZvaWQgZG9faW9fc2V0dGluZ3Modm9pZCk7CisvKgorICogVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIKKyAqIHdhcyBleGVjdXRlZCBieSBSb21jb2RlIHByaW9yIHRvIGNvbnRyb2wgb2YgdHJhbnNmZXIKKyAqIHRvIHRoZSBib290bG9hZGVyLiBTUEwgaXMgcmVzcG9uc2libGUgZm9yIHNhdmluZyBhbmQKKyAqIHBhc3NpbmcgdGhpcyB0byB0aGUgdS1ib290LgorICovCitleHRlcm4gc3RydWN0IG9tYXBfYm9vdF9wYXJhbWV0ZXJzIGJvb3RfcGFyYW1zOwogCiBzdGF0aWMgaW5saW5lIHUzMiBydW5uaW5nX2Zyb21fc2RyYW0odm9pZCkKIHsKQEAgLTY0LDE1ICs3NCwxNyBAQAogc3RhdGljIGlubGluZSB1OCB1Ym9vdF9sb2FkZWRfYnlfc3BsKHZvaWQpCiB7CiAJLyoKLQkgKiBDb25maWd1cmF0aW9uIEhlYWRlciBpcyBub3Qgc3VwcG9ydGVkIHlldCwgc28gdS1ib290IGluaXQgcnVubmluZwotCSAqIGZyb20gU0RSQU0gaW1wbGllcyB0aGF0IGl0IHdhcyBsb2FkZWQgYnkgU1BMLiBXaGVuIHRoaXMgc2l0dWF0aW9uCi0JICogY2hhbmdlcyBvbmUgb2YgdGhlc2UgYXBwcm9hY2hlcyBjb3VsZCBiZSB0YWtlbjoKLQkgKiBpLiAgUGFzcyBhIG1hZ2ljIGZyb20gU1BMIHRvIFUtQm9vdCBhbmQgVS1Cb290IHNhdmUgaXQgYXQgYSBrbm93bgotCSAqICAgICBsb2NhdGlvbi4KLQkgKiBpaS4gQ2hlY2sgdGhlIE9QUC4gQ0ggY2FuIHN1cHBvcnQgb25seSA1MCUgT1BQIHdoaWxlIFNQTCBpbml0aWFsaXplcwotCSAqICAgICB0aGUgRFBMTHMgYXQgMTAwJSBPUFAuCisJICogdS1ib290IGNhbiBiZSBydW5uaW5nIGZyb20gc2RyYW0gZWl0aGVyIGJlY2F1c2Ugb2YgY29uZmlndXJhdGlvbgorCSAqIEhlYWRlciBvciBieSBTUEwuIElmIGJlY2F1c2Ugb2YgQ0gsIHRoZW4gdGhlIHJvbWNvZGUgc2V0cyB0aGUKKwkgKiBDSFNFVFRJTkdTIGV4ZWN1dGVkIGJpdCB0byB0cnVlIGluIHRoZSBib290IHBhcmFtZXRlciBzdHJ1Y3R1cmUgdGhhdAorCSAqIGl0IHBhc3NlcyB0byB0aGUgYm9vdGxvYWRlci5UaGlzIHBhcmFtZXRlciBpcyBzdG9yZWQgaW4gdGhlIGNoX2ZsYWdzCisJICogdmFyaWFibGUgYnkgYm90aCBTUEwgYW5kIHUtYm9vdC5DaGVjayBvdXQgZm9yIENIU0VUVElOR1MsIHdoaWNoIGlzIGEKKwkgKiBtYW5kYXRvcnkgc2VjdGlvbiBpZiBDSCBpcyBwcmVzZW50LgogCSAqLwotCXJldHVybiBydW5uaW5nX2Zyb21fc2RyYW0oKTsKKwlpZiAoKGJvb3RfcGFyYW1zLmNoX2ZsYWdzKSAmIChDSF9GTEFHU19DSFNFVFRJTkdTKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gcnVubmluZ19mcm9tX3NkcmFtKCk7CiB9CiAvKgogICogVGhlIGJhc2ljIGhhcmR3YXJlIGluaXQgb2YgT01BUChzX2luaXQoKSkgY2FuIGhhcHBlbiBpbiA0CkBAIC04Niw3ICs5OCw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoaXMgY29udGV4dC4KICAqIERlZmluaW5nIGFzIGlubGluZSBtYXkgaGVscCBpbiBjb21waWxpbmcgb3V0IHVudXNlZCBmdW5jdGlvbnMgaW4gU1BMCiAgKi8KLXN0YXRpYyBpbmxpbmUgdTMyIG9tYXA0X2h3X2luaXRfY29udGV4dCh2b2lkKQorc3RhdGljIGlubGluZSB1MzIgb21hcF9od19pbml0X2NvbnRleHQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfU1BMX0JVSUxECiAJcmV0dXJuIE9NQVBfSU5JVF9DT05URVhUX1NQTDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvY2xvY2tzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2Nsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOTlmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2Nsb2Nrcy5oCkBAIC0wLDAgKzEsNzIyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICoJQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKglTcmljaGFyYW4gUiA8ci5zcmljaGFyYW5AdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0NMT0NLU19PTUFQNV9IXworI2RlZmluZSBfQ0xPQ0tTX09NQVA1X0hfCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKy8qCisgKiBBc3N1bWluZyBhIG1heGltdW0gb2YgMS41IEdIeiBBUk0gc3BlZWQgYW5kIGEgbWluaW11bSBvZiAyIGN5Y2xlcyBwZXIKKyAqIGxvb3AsIGFsbG93IGZvciBhIG1pbmltdW0gb2YgMiBtcyB3YWl0IChpbiByZWFsaXR5IHRoZSB3YWl0IHdpbGwgYmUKKyAqIG11Y2ggbW9yZSB0aGFuIHRoYXQpCisgKi8KKyNkZWZpbmUgTERFTEFZCQkxMDAwMDAwCisKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0NPUkUJCShPTUFQNTRYWF9MNF9DT1JFX0JBU0UgKyAweDQxMjApCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9QRVIJCShPTUFQNTRYWF9MNF9DT1JFX0JBU0UgKyAweDgxNDApCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9NUFUJCShPTUFQNTRYWF9MNF9DT1JFX0JBU0UgKyAweDQxNjApCisjZGVmaW5lIENNX0NMS1NFTF9DT1JFCQkJKE9NQVA1NFhYX0w0X0NPUkVfQkFTRSArIDB4NDEwMCkKKworc3RydWN0IG9tYXA1X3ByY21fcmVncyB7CisJLyogY20xLmNrZ2VuICovCisJdTMyIGNtX2Nsa3NlbF9jb3JlOwkJCS8qIDRhMDA0MTAwICovCisJdTMyIHBhZDAwMVsxXTsJCQkJLyogNGEwMDQxMDQgKi8KKwl1MzIgY21fY2xrc2VsX2FiZTsJCQkvKiA0YTAwNDEwOCAqLworCXUzMiBwYWQwMDJbMV07CQkJCS8qIDRhMDA0MTBjICovCisJdTMyIGNtX2RsbF9jdHJsOwkJCS8qIDRhMDA0MTEwICovCisJdTMyIHBhZDAwM1szXTsJCQkJLyogNGEwMDQxMTQgKi8KKwl1MzIgY21fY2xrbW9kZV9kcGxsX2NvcmU7CQkvKiA0YTAwNDEyMCAqLworCXUzMiBjbV9pZGxlc3RfZHBsbF9jb3JlOwkJLyogNGEwMDQxMjQgKi8KKwl1MzIgY21fYXV0b2lkbGVfZHBsbF9jb3JlOwkJLyogNGEwMDQxMjggKi8KKwl1MzIgY21fY2xrc2VsX2RwbGxfY29yZTsJCS8qIDRhMDA0MTJjICovCisJdTMyIGNtX2Rpdl9tMl9kcGxsX2NvcmU7CQkvKiA0YTAwNDEzMCAqLworCXUzMiBjbV9kaXZfbTNfZHBsbF9jb3JlOwkJLyogNGEwMDQxMzQgKi8KKwl1MzIgY21fZGl2X2gxMV9kcGxsX2NvcmU7CQkvKiA0YTAwNDEzOCAqLworCXUzMiBjbV9kaXZfaDEyX2RwbGxfY29yZTsJCS8qIDRhMDA0MTNjICovCisJdTMyIGNtX2Rpdl9oMTNfZHBsbF9jb3JlOwkJLyogNGEwMDQxNDAgKi8KKwl1MzIgY21fZGl2X2gxNF9kcGxsX2NvcmU7CQkvKiA0YTAwNDE0NCAqLworCXUzMiBjbV9zc2NfZGVsdGFtc3RlcF9kcGxsX2NvcmU7CS8qIDRhMDA0MTQ4ICovCisJdTMyIGNtX3NzY19tb2RmcmVxZGl2X2RwbGxfY29yZTsJLyogNGEwMDQxNGMgKi8KKwl1MzIgY21fZW11X292ZXJyaWRlX2RwbGxfY29yZTsJCS8qIDRhMDA0MTUwICovCisKKwl1MzIgY21fZGl2X2gyMl9kcGxsY29yZTsJCS8qIDRhMDA0MTU0ICovCisJdTMyIGNtX2Rpdl9oMjNfZHBsbF9jb3JlOwkJLyogNGEwMDQxNTggKi8KKwl1MzIgcGFkMDA0MVsxXTsJCQkJLyogNGEwMDQxNWMgKi8KKwl1MzIgY21fY2xrbW9kZV9kcGxsX21wdTsJCS8qIDRhMDA0MTYwICovCisJdTMyIGNtX2lkbGVzdF9kcGxsX21wdTsJCQkvKiA0YTAwNDE2NCAqLworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX21wdTsJCS8qIDRhMDA0MTY4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX21wdTsJCQkvKiA0YTAwNDE2YyAqLworCXUzMiBjbV9kaXZfbTJfZHBsbF9tcHU7CQkJLyogNGEwMDQxNzAgKi8KKwl1MzIgcGFkMDA1WzVdOwkJCQkvKiA0YTAwNDE3NCAqLworCXUzMiBjbV9zc2NfZGVsdGFtc3RlcF9kcGxsX21wdTsJCS8qIDRhMDA0MTg4ICovCisJdTMyIGNtX3NzY19tb2RmcmVxZGl2X2RwbGxfbXB1OwkJLyogNGEwMDQxOGMgKi8KKwl1MzIgcGFkMDA2WzNdOwkJCQkvKiA0YTAwNDE5MCAqLworCXUzMiBjbV9ieXBjbGtfZHBsbF9tcHU7CQkJLyogNGEwMDQxOWMgKi8KKwl1MzIgY21fY2xrbW9kZV9kcGxsX2l2YTsJCS8qIDRhMDA0MWEwICovCisJdTMyIGNtX2lkbGVzdF9kcGxsX2l2YTsJCQkvKiA0YTAwNDFhNCAqLworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX2l2YTsJCS8qIDRhMDA0MWE4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX2l2YTsJCQkvKiA0YTAwNDFhYyAqLworCXUzMiBwYWQwMDdbMl07CQkJCS8qIDRhMDA0MWIwICovCisJdTMyIGNtX2Rpdl9oMTFfZHBsbF9pdmE7CQkvKiA0YTAwNDFiOCAqLworCXUzMiBjbV9kaXZfaDEyX2RwbGxfaXZhOwkJLyogNGEwMDQxYmMgKi8KKwl1MzIgcGFkMDA4WzJdOwkJCQkvKiA0YTAwNDFjMCAqLworCXUzMiBjbV9zc2NfZGVsdGFtc3RlcF9kcGxsX2l2YTsJCS8qIDRhMDA0MWM4ICovCisJdTMyIGNtX3NzY19tb2RmcmVxZGl2X2RwbGxfaXZhOwkJLyogNGEwMDQxY2MgKi8KKwl1MzIgcGFkMDA5WzNdOwkJCQkvKiA0YTAwNDFkMCAqLworCXUzMiBjbV9ieXBjbGtfZHBsbF9pdmE7CQkJLyogNGEwMDQxZGMgKi8KKwl1MzIgY21fY2xrbW9kZV9kcGxsX2FiZTsJCS8qIDRhMDA0MWUwICovCisJdTMyIGNtX2lkbGVzdF9kcGxsX2FiZTsJCQkvKiA0YTAwNDFlNCAqLworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX2FiZTsJCS8qIDRhMDA0MWU4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX2FiZTsJCQkvKiA0YTAwNDFlYyAqLworCXUzMiBjbV9kaXZfbTJfZHBsbF9hYmU7CQkJLyogNGEwMDQxZjAgKi8KKwl1MzIgY21fZGl2X20zX2RwbGxfYWJlOwkJCS8qIDRhMDA0MWY0ICovCisJdTMyIHBhZDAxMFs0XTsJCQkJLyogNGEwMDQxZjggKi8KKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF9hYmU7CQkvKiA0YTAwNDIwOCAqLworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX2FiZTsJCS8qIDRhMDA0MjBjICovCisJdTMyIHBhZDAxMVs0XTsJCQkJLyogNGEwMDQyMTAgKi8KKwl1MzIgY21fY2xrbW9kZV9kcGxsX2RkcnBoeTsJCS8qIDRhMDA0MjIwICovCisJdTMyIGNtX2lkbGVzdF9kcGxsX2RkcnBoeTsJCS8qIDRhMDA0MjI0ICovCisJdTMyIGNtX2F1dG9pZGxlX2RwbGxfZGRycGh5OwkJLyogNGEwMDQyMjggKi8KKwl1MzIgY21fY2xrc2VsX2RwbGxfZGRycGh5OwkJLyogNGEwMDQyMmMgKi8KKwl1MzIgY21fZGl2X20yX2RwbGxfZGRycGh5OwkJLyogNGEwMDQyMzAgKi8KKwl1MzIgcGFkMDEyWzFdOwkJCQkvKiA0YTAwNDIzNCAqLworCXUzMiBjbV9kaXZfaDExX2RwbGxfZGRycGh5OwkJLyogNGEwMDQyMzggKi8KKwl1MzIgY21fZGl2X2gxMl9kcGxsX2RkcnBoeTsJCS8qIDRhMDA0MjNjICovCisJdTMyIGNtX2Rpdl9oMTNfZHBsbF9kZHJwaHk7CQkvKiA0YTAwNDI0MCAqLworCXUzMiBwYWQwMTNbMV07CQkJCS8qIDRhMDA0MjQ0ICovCisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfZGRycGh5OwkvKiA0YTAwNDI0OCAqLworCXUzMiBwYWQwMTRbNV07CQkJCS8qIDRhMDA0MjRjICovCisJdTMyIGNtX3NoYWRvd19mcmVxX2NvbmZpZzE7CQkvKiA0YTAwNDI2MCAqLworCXUzMiBwYWQwMTQxWzQ3XTsJCQkvKiA0YTAwNDI2NCAqLworCXUzMiBjbV9tcHVfbXB1X2Nsa2N0cmw7CQkJLyogNGEwMDQzMjAgKi8KKworCisJLyogY20xLmRzcCAqLworCXUzMiBwYWQwMTVbNTVdOwkJCQkvKiA0YTAwNDMyNCAqLworCXUzMiBjbV9kc3BfY2xrc3RjdHJsOwkJCS8qIDRhMDA0NDAwICovCisJdTMyIHBhZDAxNls3XTsJCQkJLyogNGEwMDQ0MDQgKi8KKwl1MzIgY21fZHNwX2RzcF9jbGtjdHJsOwkJCS8qIDRhMDA0NDIwICovCisKKwkvKiBjbTEuYWJlICovCisJdTMyIHBhZDAxN1s1NV07CQkJCS8qIDRhMDA0NDI0ICovCisJdTMyIGNtMV9hYmVfY2xrc3RjdHJsOwkJCS8qIDRhMDA0NTAwICovCisJdTMyIHBhZDAxOFs3XTsJCQkJLyogNGEwMDQ1MDQgKi8KKwl1MzIgY20xX2FiZV9sNGFiZV9jbGtjdHJsOwkJLyogNGEwMDQ1MjAgKi8KKwl1MzIgcGFkMDE5WzFdOwkJCQkvKiA0YTAwNDUyNCAqLworCXUzMiBjbTFfYWJlX2Flc3NfY2xrY3RybDsJCS8qIDRhMDA0NTI4ICovCisJdTMyIHBhZDAyMFsxXTsJCQkJLyogNGEwMDQ1MmMgKi8KKwl1MzIgY20xX2FiZV9wZG1fY2xrY3RybDsJCS8qIDRhMDA0NTMwICovCisJdTMyIHBhZDAyMVsxXTsJCQkJLyogNGEwMDQ1MzQgKi8KKwl1MzIgY20xX2FiZV9kbWljX2Nsa2N0cmw7CQkvKiA0YTAwNDUzOCAqLworCXUzMiBwYWQwMjJbMV07CQkJCS8qIDRhMDA0NTNjICovCisJdTMyIGNtMV9hYmVfbWNhc3BfY2xrY3RybDsJCS8qIDRhMDA0NTQwICovCisJdTMyIHBhZDAyM1sxXTsJCQkJLyogNGEwMDQ1NDQgKi8KKwl1MzIgY20xX2FiZV9tY2JzcDFfY2xrY3RybDsJCS8qIDRhMDA0NTQ4ICovCisJdTMyIHBhZDAyNFsxXTsJCQkJLyogNGEwMDQ1NGMgKi8KKwl1MzIgY20xX2FiZV9tY2JzcDJfY2xrY3RybDsJCS8qIDRhMDA0NTUwICovCisJdTMyIHBhZDAyNVsxXTsJCQkJLyogNGEwMDQ1NTQgKi8KKwl1MzIgY20xX2FiZV9tY2JzcDNfY2xrY3RybDsJCS8qIDRhMDA0NTU4ICovCisJdTMyIHBhZDAyNlsxXTsJCQkJLyogNGEwMDQ1NWMgKi8KKwl1MzIgY20xX2FiZV9zbGltYnVzX2Nsa2N0cmw7CQkvKiA0YTAwNDU2MCAqLworCXUzMiBwYWQwMjdbMV07CQkJCS8qIDRhMDA0NTY0ICovCisJdTMyIGNtMV9hYmVfdGltZXI1X2Nsa2N0cmw7CQkvKiA0YTAwNDU2OCAqLworCXUzMiBwYWQwMjhbMV07CQkJCS8qIDRhMDA0NTZjICovCisJdTMyIGNtMV9hYmVfdGltZXI2X2Nsa2N0cmw7CQkvKiA0YTAwNDU3MCAqLworCXUzMiBwYWQwMjlbMV07CQkJCS8qIDRhMDA0NTc0ICovCisJdTMyIGNtMV9hYmVfdGltZXI3X2Nsa2N0cmw7CQkvKiA0YTAwNDU3OCAqLworCXUzMiBwYWQwMzBbMV07CQkJCS8qIDRhMDA0NTdjICovCisJdTMyIGNtMV9hYmVfdGltZXI4X2Nsa2N0cmw7CQkvKiA0YTAwNDU4MCAqLworCXUzMiBwYWQwMzFbMV07CQkJCS8qIDRhMDA0NTg0ICovCisJdTMyIGNtMV9hYmVfd2R0M19jbGtjdHJsOwkJLyogNGEwMDQ1ODggKi8KKworCS8qIGNtMi5ja2dlbiAqLworCXUzMiBwYWQwMzJbMzgwNV07CQkJLyogNGEwMDQ1OGMgKi8KKwl1MzIgY21fY2xrc2VsX21wdV9tM19pc3Nfcm9vdDsJCS8qIDRhMDA4MTAwICovCisJdTMyIGNtX2Nsa3NlbF91c2JfNjBtaHo7CQkvKiA0YTAwODEwNCAqLworCXUzMiBjbV9zY2FsZV9mY2xrOwkJCS8qIDRhMDA4MTA4ICovCisJdTMyIHBhZDAzM1sxXTsJCQkJLyogNGEwMDgxMGMgKi8KKwl1MzIgY21fY29yZV9kdmZzX3BlcmYxOwkJCS8qIDRhMDA4MTEwICovCisJdTMyIGNtX2NvcmVfZHZmc19wZXJmMjsJCQkvKiA0YTAwODExNCAqLworCXUzMiBjbV9jb3JlX2R2ZnNfcGVyZjM7CQkJLyogNGEwMDgxMTggKi8KKwl1MzIgY21fY29yZV9kdmZzX3BlcmY0OwkJCS8qIDRhMDA4MTFjICovCisJdTMyIHBhZDAzNFsxXTsJCQkJLyogNGEwMDgxMjAgKi8KKwl1MzIgY21fY29yZV9kdmZzX2N1cnJlbnQ7CQkvKiA0YTAwODEyNCAqLworCXUzMiBjbV9pdmFfZHZmc19wZXJmX3Rlc2xhOwkJLyogNGEwMDgxMjggKi8KKwl1MzIgY21faXZhX2R2ZnNfcGVyZl9pdmFoZDsJCS8qIDRhMDA4MTJjICovCisJdTMyIGNtX2l2YV9kdmZzX3BlcmZfYWJlOwkJLyogNGEwMDgxMzAgKi8KKwl1MzIgcGFkMDM1WzFdOwkJCQkvKiA0YTAwODEzNCAqLworCXUzMiBjbV9pdmFfZHZmc19jdXJyZW50OwkJLyogNGEwMDgxMzggKi8KKwl1MzIgcGFkMDM2WzFdOwkJCQkvKiA0YTAwODEzYyAqLworCXUzMiBjbV9jbGttb2RlX2RwbGxfcGVyOwkJLyogNGEwMDgxNDAgKi8KKwl1MzIgY21faWRsZXN0X2RwbGxfcGVyOwkJCS8qIDRhMDA4MTQ0ICovCisJdTMyIGNtX2F1dG9pZGxlX2RwbGxfcGVyOwkJLyogNGEwMDgxNDggKi8KKwl1MzIgY21fY2xrc2VsX2RwbGxfcGVyOwkJCS8qIDRhMDA4MTRjICovCisJdTMyIGNtX2Rpdl9tMl9kcGxsX3BlcjsJCQkvKiA0YTAwODE1MCAqLworCXUzMiBjbV9kaXZfbTNfZHBsbF9wZXI7CQkJLyogNGEwMDgxNTQgKi8KKwl1MzIgY21fZGl2X2gxMV9kcGxsX3BlcjsJCS8qIDRhMDA4MTU4ICovCisJdTMyIGNtX2Rpdl9oMTJfZHBsbF9wZXI7CQkvKiA0YTAwODE1YyAqLworCXUzMiBwYWQwMzYxWzFdOwkJCQkvKiA0YTAwODE2MCAqLworCXUzMiBjbV9kaXZfaDE0X2RwbGxfcGVyOwkJLyogNGEwMDgxNjQgKi8KKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF9wZXI7CQkvKiA0YTAwODE2OCAqLworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX3BlcjsJCS8qIDRhMDA4MTZjICovCisJdTMyIGNtX2VtdV9vdmVycmlkZV9kcGxsX3BlcjsJCS8qIDRhMDA4MTcwICovCisJdTMyIHBhZDAzN1szXTsJCQkJLyogNGEwMDgxNzQgKi8KKwl1MzIgY21fY2xrbW9kZV9kcGxsX3VzYjsJCS8qIDRhMDA4MTgwICovCisJdTMyIGNtX2lkbGVzdF9kcGxsX3VzYjsJCQkvKiA0YTAwODE4NCAqLworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX3VzYjsJCS8qIDRhMDA4MTg4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX3VzYjsJCQkvKiA0YTAwODE4YyAqLworCXUzMiBjbV9kaXZfbTJfZHBsbF91c2I7CQkJLyogNGEwMDgxOTAgKi8KKwl1MzIgcGFkMDM4WzVdOwkJCQkvKiA0YTAwODE5NCAqLworCXUzMiBjbV9zc2NfZGVsdGFtc3RlcF9kcGxsX3VzYjsJCS8qIDRhMDA4MWE4ICovCisJdTMyIGNtX3NzY19tb2RmcmVxZGl2X2RwbGxfdXNiOwkJLyogNGEwMDgxYWMgKi8KKwl1MzIgcGFkMDM5WzFdOwkJCQkvKiA0YTAwODFiMCAqLworCXUzMiBjbV9jbGtkY29sZG9fZHBsbF91c2I7CQkvKiA0YTAwODFiNCAqLworCXUzMiBwYWQwNDBbMl07CQkJCS8qIDRhMDA4MWI4ICovCisJdTMyIGNtX2Nsa21vZGVfZHBsbF91bmlwcm87CQkvKiA0YTAwODFjMCAqLworCXUzMiBjbV9pZGxlc3RfZHBsbF91bmlwcm87CQkvKiA0YTAwODFjNCAqLworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX3VuaXBybzsJCS8qIDRhMDA4MWM4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX3VuaXBybzsJCS8qIDRhMDA4MWNjICovCisJdTMyIGNtX2Rpdl9tMl9kcGxsX3VuaXBybzsJCS8qIDRhMDA4MWQwICovCisJdTMyIHBhZDA0MVs1XTsJCQkJLyogNGEwMDgxZDQgKi8KKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF91bmlwcm87CS8qIDRhMDA4MWU4ICovCisJdTMyIGNtX3NzY19tb2RmcmVxZGl2X2RwbGxfdW5pcHJvOwkvKiA0YTAwODFlYyAqLworCisJLyogY20yLmNvcmUgKi8KKwl1MzIgcGFkMDQxMVszMjRdOwkJCS8qIDRhMDA4MWYwICovCisJdTMyIGNtX2wzXzFfY2xrc3RjdHJsOwkJCS8qIDRhMDA4NzAwICovCisJdTMyIHBhZDA0MlsxXTsJCQkJLyogNGEwMDg3MDQgKi8KKwl1MzIgY21fbDNfMV9keW5hbWljZGVwOwkJCS8qIDRhMDA4NzA4ICovCisJdTMyIHBhZDA0M1s1XTsJCQkJLyogNGEwMDg3MGMgKi8KKwl1MzIgY21fbDNfMV9sM18xX2Nsa2N0cmw7CQkvKiA0YTAwODcyMCAqLworCXUzMiBwYWQwNDRbNTVdOwkJCQkvKiA0YTAwODcyNCAqLworCXUzMiBjbV9sM18yX2Nsa3N0Y3RybDsJCQkvKiA0YTAwODgwMCAqLworCXUzMiBwYWQwNDVbMV07CQkJCS8qIDRhMDA4ODA0ICovCisJdTMyIGNtX2wzXzJfZHluYW1pY2RlcDsJCQkvKiA0YTAwODgwOCAqLworCXUzMiBwYWQwNDZbNV07CQkJCS8qIDRhMDA4ODBjICovCisJdTMyIGNtX2wzXzJfbDNfMl9jbGtjdHJsOwkJLyogNGEwMDg4MjAgKi8KKwl1MzIgcGFkMDQ3WzFdOwkJCQkvKiA0YTAwODgyNCAqLworCXUzMiBjbV9sM18yX2dwbWNfY2xrY3RybDsJCS8qIDRhMDA4ODI4ICovCisJdTMyIHBhZDA0OFsxXTsJCQkJLyogNGEwMDg4MmMgKi8KKwl1MzIgY21fbDNfMl9vY21jX3JhbV9jbGtjdHJsOwkJLyogNGEwMDg4MzAgKi8KKwl1MzIgcGFkMDQ5WzUxXTsJCQkJLyogNGEwMDg4MzQgKi8KKwl1MzIgY21fbXB1X20zX2Nsa3N0Y3RybDsJCS8qIDRhMDA4OTAwICovCisJdTMyIGNtX21wdV9tM19zdGF0aWNkZXA7CQkvKiA0YTAwODkwNCAqLworCXUzMiBjbV9tcHVfbTNfZHluYW1pY2RlcDsJCS8qIDRhMDA4OTA4ICovCisJdTMyIHBhZDA1MFs1XTsJCQkJLyogNGEwMDg5MGMgKi8KKwl1MzIgY21fbXB1X20zX21wdV9tM19jbGtjdHJsOwkJLyogNGEwMDg5MjAgKi8KKwl1MzIgcGFkMDUxWzU1XTsJCQkJLyogNGEwMDg5MjQgKi8KKwl1MzIgY21fc2RtYV9jbGtzdGN0cmw7CQkJLyogNGEwMDhhMDAgKi8KKwl1MzIgY21fc2RtYV9zdGF0aWNkZXA7CQkJLyogNGEwMDhhMDQgKi8KKwl1MzIgY21fc2RtYV9keW5hbWljZGVwOwkJCS8qIDRhMDA4YTA4ICovCisJdTMyIHBhZDA1Mls1XTsJCQkJLyogNGEwMDhhMGMgKi8KKwl1MzIgY21fc2RtYV9zZG1hX2Nsa2N0cmw7CQkvKiA0YTAwOGEyMCAqLworCXUzMiBwYWQwNTNbNTVdOwkJCQkvKiA0YTAwOGEyNCAqLworCXUzMiBjbV9tZW1pZl9jbGtzdGN0cmw7CQkJLyogNGEwMDhiMDAgKi8KKwl1MzIgcGFkMDU0WzddOwkJCQkvKiA0YTAwOGIwNCAqLworCXUzMiBjbV9tZW1pZl9kbW1fY2xrY3RybDsJCS8qIDRhMDA4YjIwICovCisJdTMyIHBhZDA1NVsxXTsJCQkJLyogNGEwMDhiMjQgKi8KKwl1MzIgY21fbWVtaWZfZW1pZl9md19jbGtjdHJsOwkJLyogNGEwMDhiMjggKi8KKwl1MzIgcGFkMDU2WzFdOwkJCQkvKiA0YTAwOGIyYyAqLworCXUzMiBjbV9tZW1pZl9lbWlmXzFfY2xrY3RybDsJCS8qIDRhMDA4YjMwICovCisJdTMyIHBhZDA1N1sxXTsJCQkJLyogNGEwMDhiMzQgKi8KKwl1MzIgY21fbWVtaWZfZW1pZl8yX2Nsa2N0cmw7CQkvKiA0YTAwOGIzOCAqLworCXUzMiBwYWQwNThbMV07CQkJCS8qIDRhMDA4YjNjICovCisJdTMyIGNtX21lbWlmX2RsbF9jbGtjdHJsOwkJLyogNGEwMDhiNDAgKi8KKwl1MzIgcGFkMDU5WzNdOwkJCQkvKiA0YTAwOGI0NCAqLworCXUzMiBjbV9tZW1pZl9lbWlmX2gxX2Nsa2N0cmw7CQkvKiA0YTAwOGI1MCAqLworCXUzMiBwYWQwNjBbMV07CQkJCS8qIDRhMDA4YjU0ICovCisJdTMyIGNtX21lbWlmX2VtaWZfaDJfY2xrY3RybDsJCS8qIDRhMDA4YjU4ICovCisJdTMyIHBhZDA2MVsxXTsJCQkJLyogNGEwMDhiNWMgKi8KKwl1MzIgY21fbWVtaWZfZGxsX2hfY2xrY3RybDsJCS8qIDRhMDA4YjYwICovCisJdTMyIHBhZDA2MlszOV07CQkJCS8qIDRhMDA4YjY0ICovCisJdTMyIGNtX2MyY19jbGtzdGN0cmw7CQkJLyogNGEwMDhjMDAgKi8KKwl1MzIgY21fYzJjX3N0YXRpY2RlcDsJCQkvKiA0YTAwOGMwNCAqLworCXUzMiBjbV9jMmNfZHluYW1pY2RlcDsJCQkvKiA0YTAwOGMwOCAqLworCXUzMiBwYWQwNjNbNV07CQkJCS8qIDRhMDA4YzBjICovCisJdTMyIGNtX2MyY19zYWQyZF9jbGtjdHJsOwkJLyogNGEwMDhjMjAgKi8KKwl1MzIgcGFkMDY0WzFdOwkJCQkvKiA0YTAwOGMyNCAqLworCXUzMiBjbV9jMmNfbW9kZW1faWNyX2Nsa2N0cmw7CQkvKiA0YTAwOGMyOCAqLworCXUzMiBwYWQwNjVbMV07CQkJCS8qIDRhMDA4YzJjICovCisJdTMyIGNtX2MyY19zYWQyZF9md19jbGtjdHJsOwkJLyogNGEwMDhjMzAgKi8KKwl1MzIgcGFkMDY2WzUxXTsJCQkJLyogNGEwMDhjMzQgKi8KKwl1MzIgY21fbDRjZmdfY2xrc3RjdHJsOwkJCS8qIDRhMDA4ZDAwICovCisJdTMyIHBhZDA2N1sxXTsJCQkJLyogNGEwMDhkMDQgKi8KKwl1MzIgY21fbDRjZmdfZHluYW1pY2RlcDsJCS8qIDRhMDA4ZDA4ICovCisJdTMyIHBhZDA2OFs1XTsJCQkJLyogNGEwMDhkMGMgKi8KKwl1MzIgY21fbDRjZmdfbDRfY2ZnX2Nsa2N0cmw7CQkvKiA0YTAwOGQyMCAqLworCXUzMiBwYWQwNjlbMV07CQkJCS8qIDRhMDA4ZDI0ICovCisJdTMyIGNtX2w0Y2ZnX2h3X3NlbV9jbGtjdHJsOwkJLyogNGEwMDhkMjggKi8KKwl1MzIgcGFkMDcwWzFdOwkJCQkvKiA0YTAwOGQyYyAqLworCXUzMiBjbV9sNGNmZ19tYWlsYm94X2Nsa2N0cmw7CQkvKiA0YTAwOGQzMCAqLworCXUzMiBwYWQwNzFbMV07CQkJCS8qIDRhMDA4ZDM0ICovCisJdTMyIGNtX2w0Y2ZnX3Nhcl9yb21fY2xrY3RybDsJCS8qIDRhMDA4ZDM4ICovCisJdTMyIHBhZDA3Mls0OV07CQkJCS8qIDRhMDA4ZDNjICovCisJdTMyIGNtX2wzaW5zdHJfY2xrc3RjdHJsOwkJLyogNGEwMDhlMDAgKi8KKwl1MzIgcGFkMDczWzddOwkJCQkvKiA0YTAwOGUwNCAqLworCXUzMiBjbV9sM2luc3RyX2wzXzNfY2xrY3RybDsJCS8qIDRhMDA4ZTIwICovCisJdTMyIHBhZDA3NFsxXTsJCQkJLyogNGEwMDhlMjQgKi8KKwl1MzIgY21fbDNpbnN0cl9sM19pbnN0cl9jbGtjdHJsOwkvKiA0YTAwOGUyOCAqLworCXUzMiBwYWQwNzVbNV07CQkJCS8qIDRhMDA4ZTJjICovCisJdTMyIGNtX2wzaW5zdHJfaW50cmNvbm5fd3AxX2Nsa2N0cmw7CS8qIDRhMDA4ZTQwICovCisKKworCS8qIGNtMi5pdmFoZCAqLworCXUzMiBwYWQwNzZbNDddOwkJCQkvKiA0YTAwOGU0NCAqLworCXUzMiBjbV9pdmFoZF9jbGtzdGN0cmw7CQkJLyogNGEwMDhmMDAgKi8KKwl1MzIgcGFkMDc3WzddOwkJCQkvKiA0YTAwOGYwNCAqLworCXUzMiBjbV9pdmFoZF9pdmFoZF9jbGtjdHJsOwkJLyogNGEwMDhmMjAgKi8KKwl1MzIgcGFkMDc4WzFdOwkJCQkvKiA0YTAwOGYyNCAqLworCXUzMiBjbV9pdmFoZF9zbDJfY2xrY3RybDsJCS8qIDRhMDA4ZjI4ICovCisKKwkvKiBjbTIuY2FtICovCisJdTMyIHBhZDA3OVs1M107CQkJCS8qIDRhMDA4ZjJjICovCisJdTMyIGNtX2NhbV9jbGtzdGN0cmw7CQkJLyogNGEwMDkwMDAgKi8KKwl1MzIgcGFkMDgwWzddOwkJCQkvKiA0YTAwOTAwNCAqLworCXUzMiBjbV9jYW1faXNzX2Nsa2N0cmw7CQkJLyogNGEwMDkwMjAgKi8KKwl1MzIgcGFkMDgxWzFdOwkJCQkvKiA0YTAwOTAyNCAqLworCXUzMiBjbV9jYW1fZmRpZl9jbGtjdHJsOwkJLyogNGEwMDkwMjggKi8KKworCS8qIGNtMi5kc3MgKi8KKwl1MzIgcGFkMDgyWzUzXTsJCQkJLyogNGEwMDkwMmMgKi8KKwl1MzIgY21fZHNzX2Nsa3N0Y3RybDsJCQkvKiA0YTAwOTEwMCAqLworCXUzMiBwYWQwODNbN107CQkJCS8qIDRhMDA5MTA0ICovCisJdTMyIGNtX2Rzc19kc3NfY2xrY3RybDsJCQkvKiA0YTAwOTEyMCAqLworCisJLyogY20yLnNneCAqLworCXUzMiBwYWQwODRbNTVdOwkJCQkvKiA0YTAwOTEyNCAqLworCXUzMiBjbV9zZ3hfY2xrc3RjdHJsOwkJCS8qIDRhMDA5MjAwICovCisJdTMyIHBhZDA4NVs3XTsJCQkJLyogNGEwMDkyMDQgKi8KKwl1MzIgY21fc2d4X3NneF9jbGtjdHJsOwkJCS8qIDRhMDA5MjIwICovCisKKwkvKiBjbTIubDNpbml0ICovCisJdTMyIHBhZDA4Nls1NV07CQkJCS8qIDRhMDA5MjI0ICovCisJdTMyIGNtX2wzaW5pdF9jbGtzdGN0cmw7CQkvKiA0YTAwOTMwMCAqLworCisJLyogY20yLmwzaW5pdCAqLworCXUzMiBwYWQwODdbOV07CQkJCS8qIDRhMDA5MzA0ICovCisJdTMyIGNtX2wzaW5pdF9oc21tYzFfY2xrY3RybDsJCS8qIDRhMDA5MzI4ICovCisJdTMyIHBhZDA4OFsxXTsJCQkJLyogNGEwMDkzMmMgKi8KKwl1MzIgY21fbDNpbml0X2hzbW1jMl9jbGtjdHJsOwkJLyogNGEwMDkzMzAgKi8KKwl1MzIgcGFkMDg5WzFdOwkJCQkvKiA0YTAwOTMzNCAqLworCXUzMiBjbV9sM2luaXRfaHNpX2Nsa2N0cmw7CQkvKiA0YTAwOTMzOCAqLworCXUzMiBwYWQwOTBbN107CQkJCS8qIDRhMDA5MzNjICovCisJdTMyIGNtX2wzaW5pdF9oc3VzYmhvc3RfY2xrY3RybDsJLyogNGEwMDkzNTggKi8KKwl1MzIgcGFkMDkxWzFdOwkJCQkvKiA0YTAwOTM1YyAqLworCXUzMiBjbV9sM2luaXRfaHN1c2JvdGdfY2xrY3RybDsJCS8qIDRhMDA5MzYwICovCisJdTMyIHBhZDA5MlsxXTsJCQkJLyogNGEwMDkzNjQgKi8KKwl1MzIgY21fbDNpbml0X2hzdXNidGxsX2Nsa2N0cmw7CQkvKiA0YTAwOTM2OCAqLworCXUzMiBwYWQwOTNbM107CQkJCS8qIDRhMDA5MzZjICovCisJdTMyIGNtX2wzaW5pdF9wMTUwMF9jbGtjdHJsOwkJLyogNGEwMDkzNzggKi8KKwl1MzIgcGFkMDk0WzIxXTsJCQkJLyogNGEwMDkzN2MgKi8KKwl1MzIgY21fbDNpbml0X2ZzdXNiX2Nsa2N0cmw7CQkvKiA0YTAwOTNkMCAqLworCXUzMiBwYWQwOTVbM107CQkJCS8qIDRhMDA5M2Q0ICovCisJdTMyIGNtX2wzaW5pdF9vY3Ayc2NwMV9jbGtjdHJsOworCisJLyogY20yLmw0cGVyICovCisJdTMyIHBhZDA5Nls3XTsJCQkJLyogNGEwMDkzZTQgKi8KKwl1MzIgY21fbDRwZXJfY2xrc3RjdHJsOwkJCS8qIDRhMDA5NDAwICovCisJdTMyIHBhZDA5N1sxXTsJCQkJLyogNGEwMDk0MDQgKi8KKwl1MzIgY21fbDRwZXJfZHluYW1pY2RlcDsJCS8qIDRhMDA5NDA4ICovCisJdTMyIHBhZDA5OFs1XTsJCQkJLyogNGEwMDk0MGMgKi8KKwl1MzIgY21fbDRwZXJfYWRjX2Nsa2N0cmw7CQkvKiA0YTAwOTQyMCAqLworCXUzMiBwYWQxMDBbMV07CQkJCS8qIDRhMDA5NDI0ICovCisJdTMyIGNtX2w0cGVyX2dwdGltZXIxMF9jbGtjdHJsOwkJLyogNGEwMDk0MjggKi8KKwl1MzIgcGFkMTAxWzFdOwkJCQkvKiA0YTAwOTQyYyAqLworCXUzMiBjbV9sNHBlcl9ncHRpbWVyMTFfY2xrY3RybDsJCS8qIDRhMDA5NDMwICovCisJdTMyIHBhZDEwMlsxXTsJCQkJLyogNGEwMDk0MzQgKi8KKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjJfY2xrY3RybDsJCS8qIDRhMDA5NDM4ICovCisJdTMyIHBhZDEwM1sxXTsJCQkJLyogNGEwMDk0M2MgKi8KKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjNfY2xrY3RybDsJCS8qIDRhMDA5NDQwICovCisJdTMyIHBhZDEwNFsxXTsJCQkJLyogNGEwMDk0NDQgKi8KKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjRfY2xrY3RybDsJCS8qIDRhMDA5NDQ4ICovCisJdTMyIHBhZDEwNVsxXTsJCQkJLyogNGEwMDk0NGMgKi8KKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjlfY2xrY3RybDsJCS8qIDRhMDA5NDUwICovCisJdTMyIHBhZDEwNlsxXTsJCQkJLyogNGEwMDk0NTQgKi8KKwl1MzIgY21fbDRwZXJfZWxtX2Nsa2N0cmw7CQkvKiA0YTAwOTQ1OCAqLworCXUzMiBwYWQxMDdbMV07CQkJCS8qIDRhMDA5NDVjICovCisJdTMyIGNtX2w0cGVyX2dwaW8yX2Nsa2N0cmw7CQkvKiA0YTAwOTQ2MCAqLworCXUzMiBwYWQxMDhbMV07CQkJCS8qIDRhMDA5NDY0ICovCisJdTMyIGNtX2w0cGVyX2dwaW8zX2Nsa2N0cmw7CQkvKiA0YTAwOTQ2OCAqLworCXUzMiBwYWQxMDlbMV07CQkJCS8qIDRhMDA5NDZjICovCisJdTMyIGNtX2w0cGVyX2dwaW80X2Nsa2N0cmw7CQkvKiA0YTAwOTQ3MCAqLworCXUzMiBwYWQxMTBbMV07CQkJCS8qIDRhMDA5NDc0ICovCisJdTMyIGNtX2w0cGVyX2dwaW81X2Nsa2N0cmw7CQkvKiA0YTAwOTQ3OCAqLworCXUzMiBwYWQxMTFbMV07CQkJCS8qIDRhMDA5NDdjICovCisJdTMyIGNtX2w0cGVyX2dwaW82X2Nsa2N0cmw7CQkvKiA0YTAwOTQ4MCAqLworCXUzMiBwYWQxMTJbMV07CQkJCS8qIDRhMDA5NDg0ICovCisJdTMyIGNtX2w0cGVyX2hkcTF3X2Nsa2N0cmw7CQkvKiA0YTAwOTQ4OCAqLworCXUzMiBwYWQxMTNbMV07CQkJCS8qIDRhMDA5NDhjICovCisJdTMyIGNtX2w0cGVyX2hlY2MxX2Nsa2N0cmw7CQkvKiA0YTAwOTQ5MCAqLworCXUzMiBwYWQxMTRbMV07CQkJCS8qIDRhMDA5NDk0ICovCisJdTMyIGNtX2w0cGVyX2hlY2MyX2Nsa2N0cmw7CQkvKiA0YTAwOTQ5OCAqLworCXUzMiBwYWQxMTVbMV07CQkJCS8qIDRhMDA5NDljICovCisJdTMyIGNtX2w0cGVyX2kyYzFfY2xrY3RybDsJCS8qIDRhMDA5NGEwICovCisJdTMyIHBhZDExNlsxXTsJCQkJLyogNGEwMDk0YTQgKi8KKwl1MzIgY21fbDRwZXJfaTJjMl9jbGtjdHJsOwkJLyogNGEwMDk0YTggKi8KKwl1MzIgcGFkMTE3WzFdOwkJCQkvKiA0YTAwOTRhYyAqLworCXUzMiBjbV9sNHBlcl9pMmMzX2Nsa2N0cmw7CQkvKiA0YTAwOTRiMCAqLworCXUzMiBwYWQxMThbMV07CQkJCS8qIDRhMDA5NGI0ICovCisJdTMyIGNtX2w0cGVyX2kyYzRfY2xrY3RybDsJCS8qIDRhMDA5NGI4ICovCisJdTMyIHBhZDExOVsxXTsJCQkJLyogNGEwMDk0YmMgKi8KKwl1MzIgY21fbDRwZXJfbDRwZXJfY2xrY3RybDsJCS8qIDRhMDA5NGMwICovCisJdTMyIHBhZDExOTFbM107CQkJCS8qIDRhMDA5NGM0ICovCisJdTMyIGNtX2w0cGVyX21jYXNwMl9jbGtjdHJsOwkJLyogNGEwMDk0ZDAgKi8KKwl1MzIgcGFkMTIwWzFdOwkJCQkvKiA0YTAwOTRkNCAqLworCXUzMiBjbV9sNHBlcl9tY2FzcDNfY2xrY3RybDsJCS8qIDRhMDA5NGQ4ICovCisJdTMyIHBhZDEyMVszXTsJCQkJLyogNGEwMDk0ZGMgKi8KKwl1MzIgY21fbDRwZXJfbWdhdGVfY2xrY3RybDsJCS8qIDRhMDA5NGU4ICovCisJdTMyIHBhZDEyM1sxXTsJCQkJLyogNGEwMDk0ZWMgKi8KKwl1MzIgY21fbDRwZXJfbWNzcGkxX2Nsa2N0cmw7CQkvKiA0YTAwOTRmMCAqLworCXUzMiBwYWQxMjRbMV07CQkJCS8qIDRhMDA5NGY0ICovCisJdTMyIGNtX2w0cGVyX21jc3BpMl9jbGtjdHJsOwkJLyogNGEwMDk0ZjggKi8KKwl1MzIgcGFkMTI1WzFdOwkJCQkvKiA0YTAwOTRmYyAqLworCXUzMiBjbV9sNHBlcl9tY3NwaTNfY2xrY3RybDsJCS8qIDRhMDA5NTAwICovCisJdTMyIHBhZDEyNlsxXTsJCQkJLyogNGEwMDk1MDQgKi8KKwl1MzIgY21fbDRwZXJfbWNzcGk0X2Nsa2N0cmw7CQkvKiA0YTAwOTUwOCAqLworCXUzMiBwYWQxMjdbMV07CQkJCS8qIDRhMDA5NTBjICovCisJdTMyIGNtX2w0cGVyX2dwaW83X2Nsa2N0cmw7CQkvKiA0YTAwOTUxMCAqLworCXUzMiBwYWQxMjcxWzFdOwkJCQkvKiA0YTAwOTUxNCAqLworCXUzMiBjbV9sNHBlcl9ncGlvOF9jbGtjdHJsOwkJLyogNGEwMDk1MTggKi8KKwl1MzIgcGFkMTI3MlsxXTsJCQkJLyogNGEwMDk1MWMgKi8KKwl1MzIgY21fbDRwZXJfbW1jc2QzX2Nsa2N0cmw7CQkvKiA0YTAwOTUyMCAqLworCXUzMiBwYWQxMjhbMV07CQkJCS8qIDRhMDA5NTI0ICovCisJdTMyIGNtX2w0cGVyX21tY3NkNF9jbGtjdHJsOwkJLyogNGEwMDk1MjggKi8KKwl1MzIgcGFkMTI5WzFdOwkJCQkvKiA0YTAwOTUyYyAqLworCXUzMiBjbV9sNHBlcl9tc3Byb2hnX2Nsa2N0cmw7CQkvKiA0YTAwOTUzMCAqLworCXUzMiBwYWQxMzBbMV07CQkJCS8qIDRhMDA5NTM0ICovCisJdTMyIGNtX2w0cGVyX3NsaW1idXMyX2Nsa2N0cmw7CQkvKiA0YTAwOTUzOCAqLworCXUzMiBwYWQxMzFbMV07CQkJCS8qIDRhMDA5NTNjICovCisJdTMyIGNtX2w0cGVyX3VhcnQxX2Nsa2N0cmw7CQkvKiA0YTAwOTU0MCAqLworCXUzMiBwYWQxMzJbMV07CQkJCS8qIDRhMDA5NTQ0ICovCisJdTMyIGNtX2w0cGVyX3VhcnQyX2Nsa2N0cmw7CQkvKiA0YTAwOTU0OCAqLworCXUzMiBwYWQxMzNbMV07CQkJCS8qIDRhMDA5NTRjICovCisJdTMyIGNtX2w0cGVyX3VhcnQzX2Nsa2N0cmw7CQkvKiA0YTAwOTU1MCAqLworCXUzMiBwYWQxMzRbMV07CQkJCS8qIDRhMDA5NTU0ICovCisJdTMyIGNtX2w0cGVyX3VhcnQ0X2Nsa2N0cmw7CQkvKiA0YTAwOTU1OCAqLworCXUzMiBwYWQxMzVbMV07CQkJCS8qIDRhMDA5NTVjICovCisJdTMyIGNtX2w0cGVyX21tY3NkNV9jbGtjdHJsOwkJLyogNGEwMDk1NjAgKi8KKwl1MzIgcGFkMTM2WzFdOwkJCQkvKiA0YTAwOTU2NCAqLworCXUzMiBjbV9sNHBlcl9pMmM1X2Nsa2N0cmw7CQkvKiA0YTAwOTU2OCAqLworCXUzMiBwYWQxMzcxWzFdOwkJCQkvKiA0YTAwOTU2YyAqLworCXUzMiBjbV9sNHBlcl91YXJ0NV9jbGtjdHJsOwkJLyogNGEwMDk1NzAgKi8KKwl1MzIgcGFkMTM3MlsxXTsJCQkJLyogNGEwMDk1NzQgKi8KKwl1MzIgY21fbDRwZXJfdWFydDZfY2xrY3RybDsJCS8qIDRhMDA5NTc4ICovCisJdTMyIHBhZDEzNzRbMV07CQkJCS8qIDRhMDA5NTdjICovCisJdTMyIGNtX2w0c2VjX2Nsa3N0Y3RybDsJCQkvKiA0YTAwOTU4MCAqLworCXUzMiBjbV9sNHNlY19zdGF0aWNkZXA7CQkJLyogNGEwMDk1ODQgKi8KKwl1MzIgY21fbDRzZWNfZHluYW1pY2RlcDsJCS8qIDRhMDA5NTg4ICovCisJdTMyIHBhZDEzOFs1XTsJCQkJLyogNGEwMDk1OGMgKi8KKwl1MzIgY21fbDRzZWNfYWVzMV9jbGtjdHJsOwkJLyogNGEwMDk1YTAgKi8KKwl1MzIgcGFkMTM5WzFdOwkJCQkvKiA0YTAwOTVhNCAqLworCXUzMiBjbV9sNHNlY19hZXMyX2Nsa2N0cmw7CQkvKiA0YTAwOTVhOCAqLworCXUzMiBwYWQxNDBbMV07CQkJCS8qIDRhMDA5NWFjICovCisJdTMyIGNtX2w0c2VjX2RlczNkZXNfY2xrY3RybDsJCS8qIDRhMDA5NWIwICovCisJdTMyIHBhZDE0MVsxXTsJCQkJLyogNGEwMDk1YjQgKi8KKwl1MzIgY21fbDRzZWNfcGthZWlwMjlfY2xrY3RybDsJCS8qIDRhMDA5NWI4ICovCisJdTMyIHBhZDE0MlsxXTsJCQkJLyogNGEwMDk1YmMgKi8KKwl1MzIgY21fbDRzZWNfcm5nX2Nsa2N0cmw7CQkvKiA0YTAwOTVjMCAqLworCXUzMiBwYWQxNDNbMV07CQkJCS8qIDRhMDA5NWM0ICovCisJdTMyIGNtX2w0c2VjX3NoYTJtZDUxX2Nsa2N0cmw7CQkvKiA0YTAwOTVjOCAqLworCXUzMiBwYWQxNDRbM107CQkJCS8qIDRhMDA5NWNjICovCisJdTMyIGNtX2w0c2VjX2NyeXB0b2RtYV9jbGtjdHJsOwkJLyogNGEwMDk1ZDggKi8KKwl1MzIgcGFkMTQ1WzM2NjA0MjVdOwkJCS8qIDRhMDA5NWRjICovCisKKwkvKiBsNCB3a3VwIHJlZ3MgKi8KKwl1MzIgcGFkMjAxWzYyMTFdOwkJCS8qIDRhZTAwMDAwICovCisJdTMyIGNtX2FiZV9wbGxfcmVmX2Nsa3NlbDsJCS8qIDRhZTA2MTBjICovCisJdTMyIGNtX3N5c19jbGtzZWw7CQkJLyogNGFlMDYxMTAgKi8KKwl1MzIgcGFkMjAyWzE0NjddOwkJCS8qIDRhZTA2MTE0ICovCisJdTMyIGNtX3drdXBfY2xrc3RjdHJsOwkJCS8qIDRhZTA3ODAwICovCisJdTMyIHBhZDIwM1s3XTsJCQkJLyogNGFlMDc4MDQgKi8KKwl1MzIgY21fd2t1cF9sNHdrdXBfY2xrY3RybDsJCS8qIDRhZTA3ODIwICovCisJdTMyIHBhZDIwNDsJCQkJLyogNGFlMDc4MjQgKi8KKwl1MzIgY21fd2t1cF93ZHRpbWVyMV9jbGtjdHJsOwkJLyogNGFlMDc4MjggKi8KKwl1MzIgcGFkMjA1OwkJCQkvKiA0YWUwNzgyYyAqLworCXUzMiBjbV93a3VwX3dkdGltZXIyX2Nsa2N0cmw7CQkvKiA0YWUwNzgzMCAqLworCXUzMiBwYWQyMDY7CQkJCS8qIDRhZTA3ODM0ICovCisJdTMyIGNtX3drdXBfZ3BpbzFfY2xrY3RybDsJCS8qIDRhZTA3ODM4ICovCisJdTMyIHBhZDIwNzsJCQkJLyogNGFlMDc4M2MgKi8KKwl1MzIgY21fd2t1cF9ncHRpbWVyMV9jbGtjdHJsOwkJLyogNGFlMDc4NDAgKi8KKwl1MzIgcGFkMjA4OwkJCQkvKiA0YWUwNzg0NCAqLworCXUzMiBjbV93a3VwX2dwdGltZXIxMl9jbGtjdHJsOwkJLyogNGFlMDc4NDggKi8KKwl1MzIgcGFkMjA5OwkJCQkvKiA0YWUwNzg0YyAqLworCXUzMiBjbV93a3VwX3N5bmN0aW1lcl9jbGtjdHJsOwkJLyogNGFlMDc4NTAgKi8KKwl1MzIgcGFkMjEwOwkJCQkvKiA0YWUwNzg1NCAqLworCXUzMiBjbV93a3VwX3VzaW1fY2xrY3RybDsJCS8qIDRhZTA3ODU4ICovCisJdTMyIHBhZDIxMTsJCQkJLyogNGFlMDc4NWMgKi8KKwl1MzIgY21fd2t1cF9zYXJyYW1fY2xrY3RybDsJCS8qIDRhZTA3ODYwICovCisJdTMyIHBhZDIxMls1XTsJCQkJLyogNGFlMDc4NjQgKi8KKwl1MzIgY21fd2t1cF9rZXlib2FyZF9jbGtjdHJsOwkJLyogNGFlMDc4NzggKi8KKwl1MzIgcGFkMjEzOwkJCQkvKiA0YWUwNzg3YyAqLworCXUzMiBjbV93a3VwX3J0Y19jbGtjdHJsOwkJLyogNGFlMDc4ODAgKi8KKwl1MzIgcGFkMjE0OwkJCQkvKiA0YWUwNzg4NCAqLworCXUzMiBjbV93a3VwX2JhbmRnYXBfY2xrY3RybDsJCS8qIDRhZTA3ODg4ICovCisJdTMyIHBhZDIxNVsxOTddOwkJCS8qIDRhZTA3ODhjICovCisJdTMyIHBybV92Y192YWxfYnlwYXNzOwkJCS8qIDRhZTA3YmEwICovCisJdTMyIHBhZDIxNls0XTsKKwl1MzIgcHJtX3ZjX2NmZ19pMmNfbW9kZTsJCS8qIDRhZTA3YmI0ICovCisJdTMyIHBybV92Y19jZmdfaTJjX2NsazsJCQkvKiA0YWUwN2JiOCAqLworfTsKKworLyogRFBMTCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENNX0NMS01PREVfRFBMTAkJMAorI2RlZmluZSBDTV9JRExFU1RfRFBMTAkJMHg0CisjZGVmaW5lIENNX0FVVE9JRExFX0RQTEwJMHg4CisjZGVmaW5lIENNX0NMS1NFTF9EUExMCQkweEMKKworI2RlZmluZSBEUExMX0NMS09VVF9ESVZfTUFTSwkweDFGIC8qIHBvc3QtZGl2aWRlciBtYXNrICovCisKKy8qIENNX0NMS01PREVfRFBMTCAqLworI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfUkVHTTRYRU5fU0hJRlQJCTExCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9SRUdNNFhFTl9NQVNLCQkoMSA8PCAxMSkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0xQTU9ERV9FTl9TSElGVAkJMTAKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0xQTU9ERV9FTl9NQVNLCQkoMSA8PCAxMCkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX1JFTE9DS19SQU1QX0VOX1NISUZUCTkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX1JFTE9DS19SQU1QX0VOX01BU0sJKDEgPDwgOSkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0RSSUZUR1VBUkRfRU5fU0hJRlQJOAorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRFJJRlRHVUFSRF9FTl9NQVNLCSgxIDw8IDgpCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9SQU1QX1JBVEVfU0hJRlQJCTUKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX1JBTVBfUkFURV9NQVNLCQkoMHg3IDw8IDUpCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9FTl9TSElGVAkJMAorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRU5fTUFTSwkJCSgweDcgPDwgMCkKKworI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRFBMTF9FTl9TSElGVAkJMAorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRFBMTF9FTl9NQVNLCQk3CisKKyNkZWZpbmUgRFBMTF9FTl9TVE9QCQkJMQorI2RlZmluZSBEUExMX0VOX01OX0JZUEFTUwkJNAorI2RlZmluZSBEUExMX0VOX0xPV19QT1dFUl9CWVBBU1MJNQorI2RlZmluZSBEUExMX0VOX0ZBU1RfUkVMT0NLX0JZUEFTUwk2CisjZGVmaW5lIERQTExfRU5fTE9DSwkJCTcKKworLyogQ01fSURMRVNUX0RQTEwgZmllbGRzICovCisjZGVmaW5lIFNUX0RQTExfQ0xLX01BU0sJCTEKKworLyogQ01fQ0xLU0VMX0RQTEwgKi8KKyNkZWZpbmUgQ01fQ0xLU0VMX0RQTExfRFBMTF9TRF9ESVZfU0hJRlQJMjQKKyNkZWZpbmUgQ01fQ0xLU0VMX0RQTExfRFBMTF9TRF9ESVZfTUFTSwkJKDB4RkYgPDwgMjQpCisjZGVmaW5lIENNX0NMS1NFTF9EUExMX01fU0hJRlQJCQk4CisjZGVmaW5lIENNX0NMS1NFTF9EUExMX01fTUFTSwkJCSgweDdGRiA8PCA4KQorI2RlZmluZSBDTV9DTEtTRUxfRFBMTF9OX1NISUZUCQkJMAorI2RlZmluZSBDTV9DTEtTRUxfRFBMTF9OX01BU0sJCQkweDdGCisjZGVmaW5lIENNX0NMS1NFTF9EQ0NfRU5fU0hJRlQJCQkyMgorI2RlZmluZSBDTV9DTEtTRUxfRENDX0VOX01BU0sJCQkoMSA8PCAyMikKKworI2RlZmluZSBPTUFQNF9EUExMX01BWF9OCTEyNworCisvKiBDTV9TWVNfQ0xLU0VMICovCisjZGVmaW5lIENNX1NZU19DTEtTRUxfU1lTX0NMS1NFTF9NQVNLCTcKKworLyogQ01fQ0xLU0VMX0NPUkUgKi8KKyNkZWZpbmUgQ0xLU0VMX0NPUkVfU0hJRlQJMAorI2RlZmluZSBDTEtTRUxfTDNfU0hJRlQJCTQKKyNkZWZpbmUgQ0xLU0VMX0w0X1NISUZUCQk4CisKKyNkZWZpbmUgQ0xLU0VMX0NPUkVfWDJfRElWXzEJMAorI2RlZmluZSBDTEtTRUxfTDNfQ09SRV9ESVZfMgkxCisjZGVmaW5lIENMS1NFTF9MNF9MM19ESVZfMgkxCisKKy8qIENNX0FCRV9QTExfUkVGX0NMS1NFTCAqLworI2RlZmluZSBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX1NISUZUCTAKKyNkZWZpbmUgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9NQVNLCTEKKyNkZWZpbmUgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9TWVNDTEsJMAorI2RlZmluZSBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMXzMyS0NMSwkxCisKKy8qIENNX0JZUENMS19EUExMX0lWQSAqLworI2RlZmluZSBDTV9CWVBDTEtfRFBMTF9JVkFfQ0xLU0VMX1NISUZUCQkwCisjZGVmaW5lIENNX0JZUENMS19EUExMX0lWQV9DTEtTRUxfTUFTSwkJMworCisjZGVmaW5lIERQTExfSVZBX0NMS1NFTF9DT1JFX1gyX0RJVl8yCQkxCisKKy8qIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9GUkVRX1VQREFURV9NQVNLCTEKKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9ETExfT1ZFUlJJREVfTUFTSwk0CisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRExMX1JFU0VUX01BU0sJOAorCisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRFBMTF9FTl9TSElGVAk4CisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRFBMTF9FTl9NQVNLCSg3IDw8IDgpCisKKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9NMl9ESVZfU0hJRlQJMTEKKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9NMl9ESVZfTUFTSwkJKDB4MUYgPDwgMTEpCisKKy8qQ01fPGNsb2NrX2RvbWFpbj5fX0NMS0NUUkwgKi8KKyNkZWZpbmUgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU0hJRlQJCTAKKyNkZWZpbmUgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTUFTSwkJMworCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX05PX1NMRUVQCQkwCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1NMRUVQCQkxCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1dLVVAJCTIKKyNkZWZpbmUgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTwkJMworCisKKy8qIENNXzxjbG9ja19kb21haW4+Xzxtb2R1bGU+X0NMS0NUUkwgKi8KKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVAkJMAorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0sJCTMKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX1NISUZUCQkxNgorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfTUFTSwkJKDMgPDwgMTYpCisKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19ESVNBQkxFCQkwCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfSFdfQVVUTwkJMQorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOCTIKKworI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfRlVMTFlfRlVOQ1RJT05BTAkwCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9UUkFOU0lUSU9OSU5HCTEKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX0lETEUJCTIKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX0RJU0FCTEVECQkzCisKKy8qIENNX0w0UEVSX0dQSU80X0NMS0NUUkwgKi8KKyNkZWZpbmUgR1BJTzRfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSwkJKDEgPDwgOCkKKworLyogQ01fTDNJTklUX0hTTU1Dbl9DTEtDVFJMICovCisjZGVmaW5lIEhTTU1DX0NMS0NUUkxfQ0xLU0VMX01BU0sJCSgxIDw8IDI0KQorCisvKiBDTV9XS1VQX0dQVElNRVIxX0NMS0NUUkwgKi8KKyNkZWZpbmUgR1BUSU1FUjFfQ0xLQ1RSTF9DTEtTRUxfTUFTSwkJKDEgPDwgMjQpCisKKy8qIENNX0NBTV9JU1NfQ0xLQ1RSTCAqLworI2RlZmluZSBJU1NfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSwkJKDEgPDwgOCkKKworLyogQ01fRFNTX0RTU19DTEtDVFJMICovCisjZGVmaW5lIERTU19DTEtDVFJMX09QVEZDTEtFTl9NQVNLCQkweEYwMAorCisvKiBDTV9MM0lOSVRfVVNCUEhZX0NMS0NUUkwgKi8KKyNkZWZpbmUgVVNCUEhZX0NMS0NUUkxfT1BURkNMS0VOX1BIWV80OE1fTUFTSwk4CisKKy8qIENNX01QVV9NUFVfQ0xLQ1RSTCAqLworI2RlZmluZSBNUFVfQ0xLQ1RSTF9DTEtTRUxfRU1JRl9ESVZfTU9ERV9TSElGVAkyNAorI2RlZmluZSBNUFVfQ0xLQ1RSTF9DTEtTRUxfRU1JRl9ESVZfTU9ERV9NQVNLCSgxIDw8IDI0KQorI2RlZmluZSBNUFVfQ0xLQ1RSTF9DTEtTRUxfQUJFX0RJVl9NT0RFX1NISUZUCTI1CisjZGVmaW5lIE1QVV9DTEtDVFJMX0NMS1NFTF9BQkVfRElWX01PREVfTUFTSwkoMSA8PCAyNSkKKworLyogQ2xvY2sgZnJlcXVlbmNpZXMgKi8KKyNkZWZpbmUgT01BUF9TWVNfQ0xLX0ZSRVFfMzhfNF9NSFoJMzg0MDAwMDAKKyNkZWZpbmUgT01BUF9TWVNfQ0xLX0lORF8zOF80X01IWgk2CisjZGVmaW5lIE9NQVBfMzJLX0NMS19GUkVRCQkzMjc2OAorCisvKiBQUk1fVkNfQ0ZHX0kyQ19DTEsgKi8KKyNkZWZpbmUgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTEhfU0hJRlQJCTAKKyNkZWZpbmUgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTEhfTUFTSwkJMHhGRgorI2RlZmluZSBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMTF9TSElGVAkJOAorI2RlZmluZSBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMTF9NQVNLCQkoMHhGRiA8PCA4KQorCisvKiBQUk1fVkNfVkFMX0JZUEFTUyAqLworI2RlZmluZSBQUk1fVkNfSTJDX0NIQU5ORUxfRlJFUV9LSFoJNDAwCisKKyNkZWZpbmUgUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklUCTB4MTAwMDAwMAorI2RlZmluZSBQUk1fVkNfVkFMX0JZUEFTU19TTEFWRUFERFJfU0hJRlQJMAorI2RlZmluZSBQUk1fVkNfVkFMX0JZUEFTU19TTEFWRUFERFJfTUFTSwkweDdGCisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX1JFR0FERFJfU0hJRlQJCTgKKyNkZWZpbmUgUFJNX1ZDX1ZBTF9CWVBBU1NfUkVHQUREUl9NQVNLCQkweEZGCisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX0RBVEFfU0hJRlQJCTE2CisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX0RBVEFfTUFTSwkJMHhGRgorCisvKiBTTVBTICovCisjZGVmaW5lIFNNUFNfSTJDX1NMQVZFX0FERFIJMHgxMgorI2RlZmluZSBTTVBTX1JFR19BRERSX1ZDT1JFMQkweDU1CisjZGVmaW5lIFNNUFNfUkVHX0FERFJfVkNPUkUyCTB4NUIKKyNkZWZpbmUgU01QU19SRUdfQUREUl9WQ09SRTMJMHg2MQorCisjZGVmaW5lIFBIT0VOSVhfU01QU19CQVNFX1ZPTFRfU1REX01PREVfVVYJCTYwNzcwMAorI2RlZmluZSBQSE9FTklYX1NNUFNfQkFTRV9WT0xUX1NURF9NT0RFX1dJVEhfT0ZGU0VUX1VWCTcwOTAwMAorCisvKiBUUFMgKi8KKyNkZWZpbmUgVFBTNjIzNjFfSTJDX1NMQVZFX0FERFIJCTB4NjAKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfU0VUMAkJMHgwCisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX1NFVDEJCTB4MQorI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9TRVQyCQkweDIKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfU0VUMwkJMHgzCisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX0NUUkwJCTB4NAorI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9URU1QCQkweDUKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfUk1QX0NUUkwJMHg2CisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX0NISVBfSUQJMHg4CisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX0NISVBfSURfMgkweDkKKworI2RlZmluZSBUUFM2MjM2MV9CQVNFX1ZPTFRfTVYJNTAwCisjZGVmaW5lIFRQUzYyMzYxX1ZTRUwwX0dQSU8JNworCisvKiBEZWZpbmVzIGZvciBEUExMIHNldHVwICovCisjZGVmaW5lIERQTExfTE9DS0VEX0ZSRVFfVE9MRVJBTkNFXzAJCTAKKyNkZWZpbmUgRFBMTF9MT0NLRURfRlJFUV9UT0xFUkFOQ0VfNTAwX0tIWgk1MDAKKyNkZWZpbmUgRFBMTF9MT0NLRURfRlJFUV9UT0xFUkFOQ0VfMV9NSFoJMTAwMAorCisjZGVmaW5lIERQTExfTk9fTE9DSwkwCisjZGVmaW5lIERQTExfTE9DSwkxCisKKyNkZWZpbmUgTlVNX1NZU19DTEtTCTcKKworc3RydWN0IGRwbGxfcmVncyB7CisJdTMyIGNtX2Nsa21vZGVfZHBsbDsKKwl1MzIgY21faWRsZXN0X2RwbGw7CisJdTMyIGNtX2F1dG9pZGxlX2RwbGw7CisJdTMyIGNtX2Nsa3NlbF9kcGxsOworCXUzMiBjbV9kaXZfbTJfZHBsbDsKKwl1MzIgY21fZGl2X20zX2RwbGw7CisJdTMyIGNtX2Rpdl9oMTFfZHBsbDsKKwl1MzIgY21fZGl2X2gxMl9kcGxsOworCXUzMiBjbV9kaXZfaDEzX2RwbGw7CisJdTMyIGNtX2Rpdl9oMTRfZHBsbDsKKwl1MzIgcmVzZXJ2ZWRbMl07CisJdTMyIGNtX2Rpdl9oMjJfZHBsbDsKKwl1MzIgY21fZGl2X2gyM19kcGxsOworfTsKKworLyogRFBMTCBwYXJhbWV0ZXIgdGFibGUgKi8KK3N0cnVjdCBkcGxsX3BhcmFtcyB7CisJdTMyIG07CisJdTMyIG47CisJdTggbTI7CisJdTggbTM7CisJdTggaDExOworCXU4IGgxMjsKKwl1OCBoMTM7CisJdTggaDE0OworCXU4IGgyMjsKKwl1OCBoMjM7Cit9OworCitleHRlcm4gc3RydWN0IG9tYXA1X3ByY21fcmVncyAqY29uc3QgcHJjbTsKK2V4dGVybiBjb25zdCB1MzIgc3lzX2Nsa19hcnJheVs4XTsKKwordm9pZCBzY2FsZV92Y29yZXModm9pZCk7Cit2b2lkIGRvX3NjYWxlX3RwczYyMzYxKHUzMiByZWcsIHUzMiB2b2x0X212KTsKK3UzMiBvbWFwX2Rkcl9jbGsodm9pZCk7Cit2b2lkIGRvX3NjYWxlX3Zjb3JlKHUzMiB2Y29yZV9yZWcsIHUzMiB2b2x0X212KTsKK3ZvaWQgc2V0dXBfc3JpMmModm9pZCk7Cit2b2lkIHNldHVwX3Bvc3RfZGl2aWRlcnModTMyICpjb25zdCBiYXNlLCBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKnBhcmFtcyk7Cit1MzIgZ2V0X3N5c19jbGtfaW5kZXgodm9pZCk7Cit2b2lkIGVuYWJsZV9iYXNpY19jbG9ja3Modm9pZCk7Cit2b2lkIGVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2Nrcyh2b2lkKTsKK3ZvaWQgZW5hYmxlX2Jhc2ljX3Vib290X2Nsb2Nrcyh2b2lkKTsKK3ZvaWQgZG9fZW5hYmxlX2Nsb2Nrcyh1MzIgKmNvbnN0ICpjbGtfZG9tYWlucywKKwkJICAgICAgdTMyICpjb25zdCAqY2xrX21vZHVsZXNfaHdfYXV0bywKKwkJICAgICAgdTMyICpjb25zdCAqY2xrX21vZHVsZXNfZXhwbGljaXRfZW4sCisJCSAgICAgIHU4IHdhaXRfZm9yX2VuYWJsZSk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9tcHVfZHBsbF9wYXJhbXModm9pZCk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9jb3JlX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfcGVyX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfaXZhX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfdXNiX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfYWJlX2RwbGxfcGFyYW1zKHZvaWQpOworI2VuZGlmIC8qIF9DTE9DS1NfT01BUDVfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvY3B1LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OTdhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2NwdS5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2LTIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKglBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9DUFVfSAorI2RlZmluZSBfQ1BVX0gKKworI2lmICEoZGVmaW5lZChfX0tFUk5FTF9TVFJJQ1RfTkFNRVMpIHx8IGRlZmluZWQoX19BU1NFTUJMWV9fKSkKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNlbmRpZiAvKiAhKF9fS0VSTkVMX1NUUklDVF9OQU1FUyB8fCBfX0FTU0VNQkxZX18pICovCisKKyNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGdwbWNfY3MgeworCXUzMiBjb25maWcxOwkJLyogMHgwMCAqLworCXUzMiBjb25maWcyOwkJLyogMHgwNCAqLworCXUzMiBjb25maWczOwkJLyogMHgwOCAqLworCXUzMiBjb25maWc0OwkJLyogMHgwQyAqLworCXUzMiBjb25maWc1OwkJLyogMHgxMCAqLworCXUzMiBjb25maWc2OwkJLyogMHgxNCAqLworCXUzMiBjb25maWc3OwkJLyogMHgxOCAqLworCXUzMiBuYW5kX2NtZDsJCS8qIDB4MUMgKi8KKwl1MzIgbmFuZF9hZHI7CQkvKiAweDIwICovCisJdTMyIG5hbmRfZGF0OwkJLyogMHgyNCAqLworCXU4IHJlc1s4XTsJCS8qIGJsb3cgdXAgdG8gMHgzMCBieXRlICovCit9OworCitzdHJ1Y3QgZ3BtYyB7CisJdTggcmVzMVsweDEwXTsKKwl1MzIgc3lzY29uZmlnOwkJLyogMHgxMCAqLworCXU4IHJlczJbMHg0XTsKKwl1MzIgaXJxc3RhdHVzOwkJLyogMHgxOCAqLworCXUzMiBpcnFlbmFibGU7CQkvKiAweDFDICovCisJdTggcmVzM1sweDIwXTsKKwl1MzIgdGltZW91dF9jb250cm9sOwkvKiAweDQwICovCisJdTggcmVzNFsweENdOworCXUzMiBjb25maWc7CQkvKiAweDUwICovCisJdTMyIHN0YXR1czsJCS8qIDB4NTQgKi8KKwl1OCByZXM1WzB4OF07CS8qIDB4NTggKi8KKwlzdHJ1Y3QgZ3BtY19jcyBjc1s4XTsJLyogMHg2MCwgMHg5MCwgLi4gKi8KKwl1OCByZXM2WzB4MTRdOwkJLyogMHgxRTAgKi8KKwl1MzIgZWNjX2NvbmZpZzsJCS8qIDB4MUY0ICovCisJdTMyIGVjY19jb250cm9sOwkvKiAweDFGOCAqLworCXUzMiBlY2Nfc2l6ZV9jb25maWc7CS8qIDB4MUZDICovCisJdTMyIGVjYzFfcmVzdWx0OwkvKiAweDIwMCAqLworCXUzMiBlY2MyX3Jlc3VsdDsJLyogMHgyMDQgKi8KKwl1MzIgZWNjM19yZXN1bHQ7CS8qIDB4MjA4ICovCisJdTMyIGVjYzRfcmVzdWx0OwkvKiAweDIwQyAqLworCXUzMiBlY2M1X3Jlc3VsdDsJLyogMHgyMTAgKi8KKwl1MzIgZWNjNl9yZXN1bHQ7CS8qIDB4MjE0ICovCisJdTMyIGVjYzdfcmVzdWx0OwkvKiAweDIxOCAqLworCXUzMiBlY2M4X3Jlc3VsdDsJLyogMHgyMUMgKi8KKwl1MzIgZWNjOV9yZXN1bHQ7CS8qIDB4MjIwICovCit9OworCisvKiBVc2VkIGZvciBib2FyZCBzcGVjaWZpYyBncG1jIGluaXRpYWxpemF0aW9uICovCitleHRlcm4gc3RydWN0IGdwbWMgKmdwbWNfY2ZnOworCitzdHJ1Y3QgZ3B0aW1lciB7CisJdTMyIHRpZHI7CQkvKiAweDAwIHIgKi8KKwl1OCByZXMxWzB4Y107CisJdTMyIHRpb2NwX2NmZzsJCS8qIDB4MTAgcncgKi8KKwl1OCByZXMyWzB4MTBdOworCXUzMiB0aXNyX3JhdzsJCS8qIDB4MjQgciAqLworCXUzMiB0aXNyOwkJLyogMHgyOCBydyAqLworCXUzMiB0aWVyOwkJLyogMHgyYyBydyAqLworCXUzMiB0aWNyOwkJLyogMHgzMCBydyAqLworCXUzMiB0d2VyOwkJLyogMHgzNCBydyAqLworCXUzMiB0Y2xyOwkJLyogMHgzOCBydyAqLworCXUzMiB0Y3JyOwkJLyogMHgzYyBydyAqLworCXUzMiB0bGRyOwkJLyogMHg0MCBydyAqLworCXUzMiB0dGdyOwkJLyogMHg0NCBydyAqLworCXUzMiB0d3BjOwkJLyogMHg0OCByICovCisJdTMyIHRtYXI7CQkvKiAweDRjIHJ3ICovCisJdTMyIHRjYXIxOwkJLyogMHg1MCByICovCisJdTMyIHRjaWNyOwkJLyogMHg1NCBydyAqLworCXUzMiB0Y2FyMjsJCS8qIDB4NTggciAqLworfTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMgKi8KKworLyogZW5hYmxlIHN5c19jbGsgTk8tcHJlc2NhbGUgLzEgKi8KKyNkZWZpbmUgR1BUX0VOCQkJKCgweDAgPDwgMikgfCAoMHgxIDw8IDEpIHwgKDB4MSA8PCAwKSkKKworLyogV2F0Y2hkb2cgKi8KKyNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IHdhdGNoZG9nIHsKKwl1OCByZXMxWzB4MzRdOworCXUzMiB3d3BzOwkJLyogMHgzNCByICovCisJdTggcmVzMlsweDEwXTsKKwl1MzIgd3NwcjsJCS8qIDB4NDggcncgKi8KK307CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19LRVJORUxfU1RSSUNUX05BTUVTICovCisKKyNkZWZpbmUgV0RfVU5MT0NLMQkJMHhBQUFBCisjZGVmaW5lIFdEX1VOTE9DSzIJCTB4NTU1NQorCisjZGVmaW5lIFNZU0NMS0RJVl8xCQkoMHgxIDw8IDYpCisjZGVmaW5lIFNZU0NMS0RJVl8yCQkoMHgxIDw8IDcpCisKKyNkZWZpbmUgQ0xLU0VMX0dQVDEJCSgweDEgPDwgMCkKKworI2RlZmluZSBFTl9HUFQxCQkJKDB4MSA8PCAwKQorI2RlZmluZSBFTl8zMktTWU5DCQkoMHgxIDw8IDIpCisKKyNkZWZpbmUgU1RfV0RUMgkJCSgweDEgPDwgNSkKKworI2RlZmluZSBSRVNFVERPTkUJCSgweDEgPDwgMCkKKworI2RlZmluZSBUQ0xSX1NUCQkJKDB4MSA8PCAwKQorI2RlZmluZSBUQ0xSX0FSCQkJKDB4MSA8PCAxKQorI2RlZmluZSBUQ0xSX1BSRQkJKDB4MSA8PCA1KQorCisvKiBHUE1DIEJBU0UgKi8KKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDU0WFhfR1BNQ19CQVNFKQorCisvKiBJMkMgYmFzZSAqLworI2RlZmluZSBJMkNfQkFTRTEJCShPTUFQNTRYWF9MNF9QRVJfQkFTRSArIDB4NzAwMDApCisjZGVmaW5lIEkyQ19CQVNFMgkJKE9NQVA1NFhYX0w0X1BFUl9CQVNFICsgMHg3MjAwMCkKKyNkZWZpbmUgSTJDX0JBU0UzCQkoT01BUDU0WFhfTDRfUEVSX0JBU0UgKyAweDYwMDAwKQorCisvKiBNVVNCIGJhc2UgKi8KKyNkZWZpbmUgTVVTQl9CQVNFCQkoT01BUDU0WFhfTDRfQ09SRV9CQVNFICsgMHhBQjAwMCkKKworLyogT01BUDQgR1BJTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT01BUF9HUElPX1JFVklTSU9OCQkweDAwMDAKKyNkZWZpbmUgT01BUF9HUElPX1NZU0NPTkZJRwkJMHgwMDEwCisjZGVmaW5lIE9NQVBfR1BJT19TWVNTVEFUVVMJCTB4MDExNAorI2RlZmluZSBPTUFQX0dQSU9fSVJRU1RBVFVTMQkJMHgwMTE4CisjZGVmaW5lIE9NQVBfR1BJT19JUlFTVEFUVVMyCQkweDAxMjgKKyNkZWZpbmUgT01BUF9HUElPX0lSUUVOQUJMRTIJCTB4MDEyYworI2RlZmluZSBPTUFQX0dQSU9fSVJRRU5BQkxFMQkJMHgwMTFjCisjZGVmaW5lIE9NQVBfR1BJT19XQUtFX0VOCQkweDAxMjAKKyNkZWZpbmUgT01BUF9HUElPX0NUUkwJCQkweDAxMzAKKyNkZWZpbmUgT01BUF9HUElPX09FCQkJMHgwMTM0CisjZGVmaW5lIE9NQVBfR1BJT19EQVRBSU4JCTB4MDEzOAorI2RlZmluZSBPTUFQX0dQSU9fREFUQU9VVAkJMHgwMTNjCisjZGVmaW5lIE9NQVBfR1BJT19MRVZFTERFVEVDVDAJCTB4MDE0MAorI2RlZmluZSBPTUFQX0dQSU9fTEVWRUxERVRFQ1QxCQkweDAxNDQKKyNkZWZpbmUgT01BUF9HUElPX1JJU0lOR0RFVEVDVAkJMHgwMTQ4CisjZGVmaW5lIE9NQVBfR1BJT19GQUxMSU5HREVURUNUCQkweDAxNGMKKyNkZWZpbmUgT01BUF9HUElPX0RFQk9VTkNFX0VOCQkweDAxNTAKKyNkZWZpbmUgT01BUF9HUElPX0RFQk9VTkNFX1ZBTAkJMHgwMTU0CisjZGVmaW5lIE9NQVBfR1BJT19DTEVBUklSUUVOQUJMRTEJMHgwMTYwCisjZGVmaW5lIE9NQVBfR1BJT19TRVRJUlFFTkFCTEUxCQkweDAxNjQKKyNkZWZpbmUgT01BUF9HUElPX0NMRUFSV0tVRU5BCQkweDAxODAKKyNkZWZpbmUgT01BUF9HUElPX1NFVFdLVUVOQQkJMHgwMTg0CisjZGVmaW5lIE9NQVBfR1BJT19DTEVBUkRBVEFPVVQJCTB4MDE5MAorI2RlZmluZSBPTUFQX0dQSU9fU0VUREFUQU9VVAkJMHgwMTk0CisKKyNlbmRpZiAvKiBfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvZ3Bpby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0ZGZmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvZ3Bpby5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKiBUb20gUml4IDxUb20uUml4QHdpbmRyaXZlci5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogVGhpcyB3b3JrIGlzIGRlcml2ZWQgZnJvbSB0aGUgbGludXggMi42LjI3IGtlcm5lbCBzb3VyY2UKKyAqIFRvIGZldGNoLCB1c2UgdGhlIGtlcm5lbCByZXBvc2l0b3J5CisgKiBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXgtMi42LmdpdAorICogVXNlIHRoZSB2Mi42LjI3IHRhZy4KKyAqCisgKiBCZWxvdyBpcyB0aGUgb3JpZ2luYWwncyBoZWFkZXIgaW5jbHVkaW5nIGl0cyBjb3B5cmlnaHQKKyAqCisgKiAgbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworICoKKyAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBPTUFQIEdQSU8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogV3JpdHRlbiBieSBKdWhhIFlyasO2bMOkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfR1BJT19PTUFQNV9ICisjZGVmaW5lIF9HUElPX09NQVA1X0gKKworI2luY2x1ZGUgPGFzbS9vbWFwX2dwaW8uaD4KKworI2RlZmluZSBPTUFQNTRYWF9HUElPMV9CQVNFCQkweDRBZTEwMDAwCisjZGVmaW5lIE9NQVA1NFhYX0dQSU8yX0JBU0UJCTB4NDgwNTUwMDAKKyNkZWZpbmUgT01BUDU0WFhfR1BJTzNfQkFTRQkJMHg0ODA1NzAwMAorI2RlZmluZSBPTUFQNTRYWF9HUElPNF9CQVNFCQkweDQ4MDU5MDAwCisjZGVmaW5lIE9NQVA1NFhYX0dQSU81X0JBU0UJCTB4NDgwNUIwMDAKKyNkZWZpbmUgT01BUDU0WFhfR1BJTzZfQkFTRQkJMHg0ODA1RDAwMAorCisjZW5kaWYgLyogX0dQSU9fT01BUDVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9pMmMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiZTAzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvaTJjLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX09NQVA1X0kyQ19IXworI2RlZmluZSBfT01BUDVfSTJDX0hfCisKKyNkZWZpbmUgSTJDX0JVU19NQVgJMworI2RlZmluZSBJMkNfREVGQVVMVF9CQVNFCUkyQ19CQVNFMQorCitzdHJ1Y3QgaTJjIHsKKwl1bnNpZ25lZCBzaG9ydCByZXZuYl9sbzsJLyogMHgwMCAqLworCXVuc2lnbmVkIHNob3J0IHJlczE7CisJdW5zaWduZWQgc2hvcnQgcmV2bmJfaGk7CS8qIDB4MDQgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMyWzEzXTsKKwl1bnNpZ25lZCBzaG9ydCBzeXNjOwkJLyogMHgyMCAqLworCXVuc2lnbmVkIHNob3J0IHJlczM7CisJdW5zaWduZWQgc2hvcnQgaXJxc3RhdHVzX3JhdzsJLyogMHgyNCAqLworCXVuc2lnbmVkIHNob3J0IHJlczQ7CisJdW5zaWduZWQgc2hvcnQgc3RhdDsJCS8qIDB4MjggKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM1OworCXVuc2lnbmVkIHNob3J0IGllOwkJLyogMHgyQyAqLworCXVuc2lnbmVkIHNob3J0IHJlczY7CisJdW5zaWduZWQgc2hvcnQgaXJxZW5hYmxlX2NscjsJLyogMHgzMCAqLworCXVuc2lnbmVkIHNob3J0IHJlczc7CisJdW5zaWduZWQgc2hvcnQgaXY7CQkvKiAweDM0ICovCisJdW5zaWduZWQgc2hvcnQgcmVzOFs0NV07CisJdW5zaWduZWQgc2hvcnQgc3lzczsJCS8qIDB4OTAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM5OworCXVuc2lnbmVkIHNob3J0IGJ1ZjsJCS8qIDB4OTQgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxMDsKKwl1bnNpZ25lZCBzaG9ydCBjbnQ7CQkvKiAweDk4ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTE7CisJdW5zaWduZWQgc2hvcnQgZGF0YTsJCS8qIDB4OUMgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxMzsKKwl1bnNpZ25lZCBzaG9ydCByZXMxNDsJCS8qIDB4QTAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxNTsKKwl1bnNpZ25lZCBzaG9ydCBjb247CQkvKiAweEE0ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTY7CisJdW5zaWduZWQgc2hvcnQgb2E7CQkvKiAweEE4ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTc7CisJdW5zaWduZWQgc2hvcnQgc2E7CQkvKiAweEFDICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTg7CisJdW5zaWduZWQgc2hvcnQgcHNjOwkJLyogMHhCMCAqLworCXVuc2lnbmVkIHNob3J0IHJlczE5OworCXVuc2lnbmVkIHNob3J0IHNjbGw7CQkvKiAweEI0ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMjA7CisJdW5zaWduZWQgc2hvcnQgc2NsaDsJCS8qIDB4QjggKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMyMTsKKwl1bnNpZ25lZCBzaG9ydCBzeXN0ZXN0OwkJLyogMHhCQyAqLworCXVuc2lnbmVkIHNob3J0IHJlczIyOworCXVuc2lnbmVkIHNob3J0IGJ1ZnN0YXQ7CQkvKiAweEMwICovCisJdW5zaWduZWQgc2hvcnQgcmVzMjM7Cit9OworCisjZW5kaWYgLyogX09NQVA1X0kyQ19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9tbWNfaG9zdF9kZWYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvbW1jX2hvc3RfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0MzljOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvbW1jX2hvc3RfZGVmLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBNTUNfSE9TVF9ERUZfSAorI2RlZmluZSBNTUNfSE9TVF9ERUZfSAorCisvKgorICogT01BUCBIU01NQyByZWdpc3RlciBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgT01BUF9IU01NQzFfQkFTRQkweDQ4MDlDMTAwCisjZGVmaW5lIE9NQVBfSFNNTUMyX0JBU0UJMHg0ODBCNDEwMAorI2RlZmluZSBPTUFQX0hTTU1DM19CQVNFCTB4NDgwQUQxMDAKKworc3RydWN0IGhzbW1jIHsKKwl1bnNpZ25lZCBjaGFyIHJlczFbMHgxMF07CisJdW5zaWduZWQgaW50IHN5c2NvbmZpZzsJCS8qIDB4MTAgKi8KKwl1bnNpZ25lZCBpbnQgc3lzc3RhdHVzOwkJLyogMHgxNCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMlsweDE0XTsKKwl1bnNpZ25lZCBpbnQgY29uOwkJLyogMHgyQyAqLworCXVuc2lnbmVkIGNoYXIgcmVzM1sweEQ0XTsKKwl1bnNpZ25lZCBpbnQgYmxrOwkJLyogMHgxMDQgKi8KKwl1bnNpZ25lZCBpbnQgYXJnOwkJLyogMHgxMDggKi8KKwl1bnNpZ25lZCBpbnQgY21kOwkJLyogMHgxMEMgKi8KKwl1bnNpZ25lZCBpbnQgcnNwMTA7CQkvKiAweDExMCAqLworCXVuc2lnbmVkIGludCByc3AzMjsJCS8qIDB4MTE0ICovCisJdW5zaWduZWQgaW50IHJzcDU0OwkJLyogMHgxMTggKi8KKwl1bnNpZ25lZCBpbnQgcnNwNzY7CQkvKiAweDExQyAqLworCXVuc2lnbmVkIGludCBkYXRhOwkJLyogMHgxMjAgKi8KKwl1bnNpZ25lZCBpbnQgcHN0YXRlOwkJLyogMHgxMjQgKi8KKwl1bnNpZ25lZCBpbnQgaGN0bDsJCS8qIDB4MTI4ICovCisJdW5zaWduZWQgaW50IHN5c2N0bDsJCS8qIDB4MTJDICovCisJdW5zaWduZWQgaW50IHN0YXQ7CQkvKiAweDEzMCAqLworCXVuc2lnbmVkIGludCBpZTsJCS8qIDB4MTM0ICovCisJdW5zaWduZWQgY2hhciByZXM0WzB4OF07CisJdW5zaWduZWQgaW50IGNhcGE7CQkvKiAweDE0MCAqLworfTsKKworLyoKKyAqIE9NQVAgSFMgTU1DIEJpdCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIE1NQ19TT0ZUUkVTRVQJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJFU0VURE9ORQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgTk9PUEVORFJBSU4JCQkoMHgwIDw8IDApCisjZGVmaW5lIE9QRU5EUkFJTgkJCSgweDEgPDwgMCkKKyNkZWZpbmUgT0QJCQkJKDB4MSA8PCAwKQorI2RlZmluZSBJTklUX05PSU5JVAkJCSgweDAgPDwgMSkKKyNkZWZpbmUgSU5JVF9JTklUU1RSRUFNCQkJKDB4MSA8PCAxKQorI2RlZmluZSBIUl9OT0hPU1RSRVNQCQkJKDB4MCA8PCAyKQorI2RlZmluZSBTVFJfQkxPQ0sJCQkoMHgwIDw8IDMpCisjZGVmaW5lIE1PREVfRlVOQwkJCSgweDAgPDwgNCkKKyNkZWZpbmUgRFc4XzFfNEJJVE1PREUJCQkoMHgwIDw8IDUpCisjZGVmaW5lIE1JVF9DVE8JCQkJKDB4MCA8PCA2KQorI2RlZmluZSBDRFBfQUNUSVZFSElHSAkJCSgweDAgPDwgNykKKyNkZWZpbmUgV1BQX0FDVElWRUhJR0gJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJFU0VSVkVEX01BU0sJCQkoMHgzIDw8IDkpCisjZGVmaW5lIENUUExfTU1DX1NECQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgQkxFTl81MTJCWVRFU0xFTgkJKDB4MjAwIDw8IDApCisjZGVmaW5lIE5CTEtfU1RQQ05UCQkJKDB4MCA8PCAxNikKKyNkZWZpbmUgREVfRElTQUJMRQkJCSgweDAgPDwgMCkKKyNkZWZpbmUgQkNFX0RJU0FCTEUJCQkoMHgwIDw8IDEpCisjZGVmaW5lIEJDRV9FTkFCTEUJCQkoMHgxIDw8IDEpCisjZGVmaW5lIEFDRU5fRElTQUJMRQkJCSgweDAgPDwgMikKKyNkZWZpbmUgRERJUl9PRkZTRVQJCQkoNCkKKyNkZWZpbmUgRERJUl9NQVNLCQkJKDB4MSA8PCA0KQorI2RlZmluZSBERElSX1dSSVRFCQkJKDB4MCA8PCA0KQorI2RlZmluZSBERElSX1JFQUQJCQkoMHgxIDw8IDQpCisjZGVmaW5lIE1TQlNfU0dMRUJMSwkJCSgweDAgPDwgNSkKKyNkZWZpbmUgTVNCU19NVUxUSUJMSwkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlNQX1RZUEVfT0ZGU0VUCQkJKDE2KQorI2RlZmluZSBSU1BfVFlQRV9NQVNLCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUgUlNQX1RZUEVfTk9SU1AJCQkoMHgwIDw8IDE2KQorI2RlZmluZSBSU1BfVFlQRV9MR0hUMTM2CQkoMHgxIDw8IDE2KQorI2RlZmluZSBSU1BfVFlQRV9MR0hUNDgJCQkoMHgyIDw8IDE2KQorI2RlZmluZSBSU1BfVFlQRV9MR0hUNDhCCQkoMHgzIDw8IDE2KQorI2RlZmluZSBDQ0NFX05PQ0hFQ0sJCQkoMHgwIDw8IDE5KQorI2RlZmluZSBDQ0NFX0NIRUNLCQkJKDB4MSA8PCAxOSkKKyNkZWZpbmUgQ0lDRV9OT0NIRUNLCQkJKDB4MCA8PCAyMCkKKyNkZWZpbmUgQ0lDRV9DSEVDSwkJCSgweDEgPDwgMjApCisjZGVmaW5lIERQX09GRlNFVAkJCSgyMSkKKyNkZWZpbmUgRFBfTUFTSwkJCQkoMHgxIDw8IDIxKQorI2RlZmluZSBEUF9OT19EQVRBCQkJKDB4MCA8PCAyMSkKKyNkZWZpbmUgRFBfREFUQQkJCQkoMHgxIDw8IDIxKQorI2RlZmluZSBDTURfVFlQRV9OT1JNQUwJCQkoMHgwIDw8IDIyKQorI2RlZmluZSBJTkRFWF9PRkZTRVQJCQkoMjQpCisjZGVmaW5lIElOREVYX01BU0sJCQkoMHgzZiA8PCAyNCkKKyNkZWZpbmUgSU5ERVgoaSkJCQkoaSA8PCAyNCkKKyNkZWZpbmUgREFUSV9NQVNLCQkJKDB4MSA8PCAxKQorI2RlZmluZSBEQVRJX0NNRERJUwkJCSgweDEgPDwgMSkKKyNkZWZpbmUgRFRXXzFfQklUTU9ERQkJCSgweDAgPDwgMSkKKyNkZWZpbmUgRFRXXzRfQklUTU9ERQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgRFRXXzhfQklUTU9ERSAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDUpIC8qIENPTltEVzhdKi8KKyNkZWZpbmUgU0RCUF9QV1JPRkYJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFNEQlBfUFdST04JCQkoMHgxIDw8IDgpCisjZGVmaW5lIFNEVlNfMVY4CQkJKDB4NSA8PCA5KQorI2RlZmluZSBTRFZTXzNWMAkJCSgweDYgPDwgOSkKKyNkZWZpbmUgSUNFX01BU0sJCQkoMHgxIDw8IDApCisjZGVmaW5lIElDRV9TVE9QCQkJKDB4MCA8PCAwKQorI2RlZmluZSBJQ1NfTUFTSwkJCSgweDEgPDwgMSkKKyNkZWZpbmUgSUNTX05PVFJFQURZCQkJKDB4MCA8PCAxKQorI2RlZmluZSBJQ0VfT1NDSUxMQVRFCQkJKDB4MSA8PCAwKQorI2RlZmluZSBDRU5fTUFTSwkJCSgweDEgPDwgMikKKyNkZWZpbmUgQ0VOX0RJU0FCTEUJCQkoMHgwIDw8IDIpCisjZGVmaW5lIENFTl9FTkFCTEUJCQkoMHgxIDw8IDIpCisjZGVmaW5lIENMS0RfT0ZGU0VUCQkJKDYpCisjZGVmaW5lIENMS0RfTUFTSwkJCSgweDNGRiA8PCA2KQorI2RlZmluZSBEVE9fTUFTSwkJCSgweEYgPDwgMTYpCisjZGVmaW5lIERUT18xNVRIRFRPCQkJKDB4RSA8PCAxNikKKyNkZWZpbmUgU09GVFJFU0VUQUxMCQkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgQ0NfTUFTSwkJCQkoMHgxIDw8IDApCisjZGVmaW5lIFRDX01BU0sJCQkJKDB4MSA8PCAxKQorI2RlZmluZSBCV1JfTUFTSwkJCSgweDEgPDwgNCkKKyNkZWZpbmUgQlJSX01BU0sJCQkoMHgxIDw8IDUpCisjZGVmaW5lIEVSUklfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIElFX0NDCQkJCSgweDAxIDw8IDApCisjZGVmaW5lIElFX1RDCQkJCSgweDAxIDw8IDEpCisjZGVmaW5lIElFX0JXUgkJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBJRV9CUlIJCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgSUVfQ1RPCQkJCSgweDAxIDw8IDE2KQorI2RlZmluZSBJRV9DQ1JDCQkJCSgweDAxIDw8IDE3KQorI2RlZmluZSBJRV9DRUIJCQkJKDB4MDEgPDwgMTgpCisjZGVmaW5lIElFX0NJRQkJCQkoMHgwMSA8PCAxOSkKKyNkZWZpbmUgSUVfRFRPCQkJCSgweDAxIDw8IDIwKQorI2RlZmluZSBJRV9EQ1JDCQkJCSgweDAxIDw8IDIxKQorI2RlZmluZSBJRV9ERUIJCQkJKDB4MDEgPDwgMjIpCisjZGVmaW5lIElFX0NFUlIJCQkJKDB4MDEgPDwgMjgpCisjZGVmaW5lIElFX0JBREEJCQkJKDB4MDEgPDwgMjkpCisKKyNkZWZpbmUgVlMzMF8zVjBTVVAJCQkoMSA8PCAyNSkKKyNkZWZpbmUgVlMxOF8xVjhTVVAJCQkoMSA8PCAyNikKKworLyogRHJpdmVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1NQ1NEX1NFQ1RPUl9TSVpFCQk1MTIKKyNkZWZpbmUgTU1DX0NBUkQJCQkwCisjZGVmaW5lIFNEX0NBUkQJCQkJMQorI2RlZmluZSBCWVRFX01PREUJCQkwCisjZGVmaW5lIFNFQ1RPUl9NT0RFCQkJMQorI2RlZmluZSBDTEtfSU5JVFNFUQkJCTAKKyNkZWZpbmUgQ0xLXzQwMEtIWgkJCTEKKyNkZWZpbmUgQ0xLX01JU0MJCQkyCisKKyNkZWZpbmUgUlNQX1RZUEVfTk9ORQkoUlNQX1RZUEVfTk9SU1AgICB8IENDQ0VfTk9DSEVDSyB8IENJQ0VfTk9DSEVDSykKKyNkZWZpbmUgTU1DX0NNRDAJKElOREVYKDApICB8IFJTUF9UWVBFX05PTkUgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKworLyogQ2xvY2sgQ29uZmlndXJhdGlvbnMgYW5kIE1hY3JvcyAqLworI2RlZmluZSBNTUNfQ0xPQ0tfUkVGRVJFTkNFCTk2IC8qIE1IeiAqLworCisjZGVmaW5lIG1tY19yZWdfb3V0KGFkZHIsIG1hc2ssIHZhbClcCisJd3JpdGVsKChyZWFkbChhZGRyKSAmICh+KG1hc2spKSkgfCAoKHZhbCkgJiAobWFzaykpLCAoYWRkcikpCisKK2ludCBvbWFwX21tY19pbml0KGludCBkZXZfaW5kZXgpOworCisjZW5kaWYgLyogTU1DX0hPU1RfREVGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvbXV4X29tYXA1LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L211eF9vbWFwNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzIxODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L211eF9vbWFwNS5oCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0LTIwMDkKKyAqIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorICogUmljaGFyZCBXb29kcnVmZgkJPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIEFuZWVzaCBWCQkJPGFuZWVzaEB0aS5jb20+CisgKiBCYWxhamkgS3Jpc2huYW1vb3J0aHkJPGJhbGFqaXRrQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9NVVhfT01BUDVfSF8KKyNkZWZpbmUgX01VWF9PTUFQNV9IXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBwYWRfY29uZl9lbnRyeSB7CisKKwl1MTYgb2Zmc2V0OworCisJdTE2IHZhbDsKKworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisjaWZkZWYgQ09ORklHX09GRl9QQURDT05GCisjZGVmaW5lIE9GRl9QRCAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgT0ZGX1BVICAgICAgICAgICgzIDw8IDEyKQorI2RlZmluZSBPRkZfT1VUX1BURCAgICAgKDAgPDwgMTApCisjZGVmaW5lIE9GRl9PVVRfUFRVICAgICAoMiA8PCAxMCkKKyNkZWZpbmUgT0ZGX0lOICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBPRkZfT1VUICAgICAgICAgKDAgPDwgMTApCisjZGVmaW5lIE9GRl9FTiAgICAgICAgICAoMSA8PCA5KQorI2Vsc2UKKyNkZWZpbmUgT0ZGX1BEICAgICAgICAgICgwIDw8IDEyKQorI2RlZmluZSBPRkZfUFUgICAgICAgICAgKDAgPDwgMTIpCisjZGVmaW5lIE9GRl9PVVRfUFREICAgICAoMCA8PCAxMCkKKyNkZWZpbmUgT0ZGX09VVF9QVFUgICAgICgwIDw8IDEwKQorI2RlZmluZSBPRkZfSU4gICAgICAgICAgKDAgPDwgMTApCisjZGVmaW5lIE9GRl9PVVQgICAgICAgICAoMCA8PCAxMCkKKyNkZWZpbmUgT0ZGX0VOICAgICAgICAgICgwIDw8IDkpCisjZW5kaWYKKworI2RlZmluZSBJRU4gICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSURJUyAgICAgICAgICAgICgwIDw8IDgpCisjZGVmaW5lIFBUVSAgICAgICAgICAgICAoMyA8PCAzKQorI2RlZmluZSBQVEQgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgRU4gICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIERJUyAgICAgICAgICAgICAoMCA8PCAzKQorCisjZGVmaW5lIE0wICAgICAgICAgICAgICAwCisjZGVmaW5lIE0xICAgICAgICAgICAgICAxCisjZGVmaW5lIE0yICAgICAgICAgICAgICAyCisjZGVmaW5lIE0zICAgICAgICAgICAgICAzCisjZGVmaW5lIE00ICAgICAgICAgICAgICA0CisjZGVmaW5lIE01ICAgICAgICAgICAgICA1CisjZGVmaW5lIE02ICAgICAgICAgICAgICA2CisjZGVmaW5lIE03ICAgICAgICAgICAgICA3CisKKyNkZWZpbmUgU0FGRV9NT0RFCU03CisKKyNpZmRlZiBDT05GSUdfT0ZGX1BBRENPTkYKKyNkZWZpbmUgT0ZGX0lOX1BEICAgICAgIChPRkZfUEQgfCBPRkZfSU4gfCBPRkZfRU4pCisjZGVmaW5lIE9GRl9JTl9QVSAgICAgICAoT0ZGX1BVIHwgT0ZGX0lOIHwgT0ZGX0VOKQorI2RlZmluZSBPRkZfT1VUX1BEICAgICAgKE9GRl9PVVRfUFREIHwgT0ZGX09VVCB8IE9GRl9FTikKKyNkZWZpbmUgT0ZGX09VVF9QVSAgICAgIChPRkZfT1VUX1BUVSB8IE9GRl9PVVQgfCBPRkZfRU4pCisjZWxzZQorI2RlZmluZSBPRkZfSU5fUEQgICAgICAgMAorI2RlZmluZSBPRkZfSU5fUFUgICAgICAgMAorI2RlZmluZSBPRkZfT1VUX1BEICAgICAgMAorI2RlZmluZSBPRkZfT1VUX1BVICAgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgQ09SRV9SRVZJU0lPTgkJMHgwMDAwCisjZGVmaW5lIENPUkVfSFdJTkZPCQkweDAwMDQKKyNkZWZpbmUgQ09SRV9TWVNDT05GSUcJCTB4MDAxMAorI2RlZmluZSBHUE1DX0FEMAkJMHgwMDQwCisjZGVmaW5lIEdQTUNfQUQxCQkweDAwNDIKKyNkZWZpbmUgR1BNQ19BRDIJCTB4MDA0NAorI2RlZmluZSBHUE1DX0FEMwkJMHgwMDQ2CisjZGVmaW5lIEdQTUNfQUQ0CQkweDAwNDgKKyNkZWZpbmUgR1BNQ19BRDUJCTB4MDA0QQorI2RlZmluZSBHUE1DX0FENgkJMHgwMDRDCisjZGVmaW5lIEdQTUNfQUQ3CQkweDAwNEUKKyNkZWZpbmUgR1BNQ19BRDgJCTB4MDA1MAorI2RlZmluZSBHUE1DX0FEOQkJMHgwMDUyCisjZGVmaW5lIEdQTUNfQUQxMAkJMHgwMDU0CisjZGVmaW5lIEdQTUNfQUQxMQkJMHgwMDU2CisjZGVmaW5lIEdQTUNfQUQxMgkJMHgwMDU4CisjZGVmaW5lIEdQTUNfQUQxMwkJMHgwMDVBCisjZGVmaW5lIEdQTUNfQUQxNAkJMHgwMDVDCisjZGVmaW5lIEdQTUNfQUQxNQkJMHgwMDVFCisjZGVmaW5lIEdQTUNfQTE2CQkweDAwNjAKKyNkZWZpbmUgR1BNQ19BMTcJCTB4MDA2MgorI2RlZmluZSBHUE1DX0ExOAkJMHgwMDY0CisjZGVmaW5lIEdQTUNfQTE5CQkweDAwNjYKKyNkZWZpbmUgR1BNQ19BMjAJCTB4MDA2OAorI2RlZmluZSBHUE1DX0EyMQkJMHgwMDZBCisjZGVmaW5lIEdQTUNfQTIyCQkweDAwNkMKKyNkZWZpbmUgR1BNQ19BMjMJCTB4MDA2RQorI2RlZmluZSBHUE1DX0EyNAkJMHgwMDcwCisjZGVmaW5lIEdQTUNfQTI1CQkweDAwNzIKKyNkZWZpbmUgR1BNQ19OQ1MwCQkweDAwNzQKKyNkZWZpbmUgR1BNQ19OQ1MxCQkweDAwNzYKKyNkZWZpbmUgR1BNQ19OQ1MyCQkweDAwNzgKKyNkZWZpbmUgR1BNQ19OQ1MzCQkweDAwN0EKKyNkZWZpbmUgR1BNQ19OV1AJCTB4MDA3QworI2RlZmluZSBHUE1DX0NMSwkJMHgwMDdFCisjZGVmaW5lIEdQTUNfTkFEVl9BTEUJCTB4MDA4MAorI2RlZmluZSBHUE1DX05PRQkJMHgwMDgyCisjZGVmaW5lIEdQTUNfTldFCQkweDAwODQKKyNkZWZpbmUgR1BNQ19OQkUwX0NMRQkJMHgwMDg2CisjZGVmaW5lIEdQTUNfTkJFMQkJMHgwMDg4CisjZGVmaW5lIEdQTUNfV0FJVDAJCTB4MDA4QQorI2RlZmluZSBHUE1DX1dBSVQxCQkweDAwOEMKKyNkZWZpbmUgQzJDX0RBVEExMQkJMHgwMDhFCisjZGVmaW5lIEMyQ19EQVRBMTIJCTB4MDA5MAorI2RlZmluZSBDMkNfREFUQTEzCQkweDAwOTIKKyNkZWZpbmUgQzJDX0RBVEExNAkJMHgwMDk0CisjZGVmaW5lIEMyQ19EQVRBMTUJCTB4MDA5NgorI2RlZmluZSBIRE1JX0hQRAkJMHgwMDk4CisjZGVmaW5lIEhETUlfQ0VDCQkweDAwOUEKKyNkZWZpbmUgSERNSV9ERENfU0NMCQkweDAwOUMKKyNkZWZpbmUgSERNSV9ERENfU0RBCQkweDAwOUUKKyNkZWZpbmUgQ1NJMjFfRFgwCQkweDAwQTAKKyNkZWZpbmUgQ1NJMjFfRFkwCQkweDAwQTIKKyNkZWZpbmUgQ1NJMjFfRFgxCQkweDAwQTQKKyNkZWZpbmUgQ1NJMjFfRFkxCQkweDAwQTYKKyNkZWZpbmUgQ1NJMjFfRFgyCQkweDAwQTgKKyNkZWZpbmUgQ1NJMjFfRFkyCQkweDAwQUEKKyNkZWZpbmUgQ1NJMjFfRFgzCQkweDAwQUMKKyNkZWZpbmUgQ1NJMjFfRFkzCQkweDAwQUUKKyNkZWZpbmUgQ1NJMjFfRFg0CQkweDAwQjAKKyNkZWZpbmUgQ1NJMjFfRFk0CQkweDAwQjIKKyNkZWZpbmUgQ1NJMjJfRFgwCQkweDAwQjQKKyNkZWZpbmUgQ1NJMjJfRFkwCQkweDAwQjYKKyNkZWZpbmUgQ1NJMjJfRFgxCQkweDAwQjgKKyNkZWZpbmUgQ1NJMjJfRFkxCQkweDAwQkEKKyNkZWZpbmUgQ0FNX1NIVVRURVIJCTB4MDBCQworI2RlZmluZSBDQU1fU1RST0JFCQkweDAwQkUKKyNkZWZpbmUgQ0FNX0dMT0JBTFJFU0VUCQkweDAwQzAKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9DTEsJMHgwMEMyCisjZGVmaW5lIFVTQkIxX1VMUElUTExfU1RQCTB4MDBDNAorI2RlZmluZSBVU0JCMV9VTFBJVExMX0RJUgkweDAwQzYKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9OWFQJMHgwMEM4CisjZGVmaW5lIFVTQkIxX1VMUElUTExfREFUMAkweDAwQ0EKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9EQVQxCTB4MDBDQworI2RlZmluZSBVU0JCMV9VTFBJVExMX0RBVDIJMHgwMENFCisjZGVmaW5lIFVTQkIxX1VMUElUTExfREFUMwkweDAwRDAKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9EQVQ0CTB4MDBEMgorI2RlZmluZSBVU0JCMV9VTFBJVExMX0RBVDUJMHgwMEQ0CisjZGVmaW5lIFVTQkIxX1VMUElUTExfREFUNgkweDAwRDYKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9EQVQ3CTB4MDBEOAorI2RlZmluZSBVU0JCMV9IU0lDX0RBVEEJCTB4MDBEQQorI2RlZmluZSBVU0JCMV9IU0lDX1NUUk9CRQkweDAwREMKKyNkZWZpbmUgVVNCQzFfSUNVU0JfRFAJCTB4MDBERQorI2RlZmluZSBVU0JDMV9JQ1VTQl9ETQkJMHgwMEUwCisjZGVmaW5lIFNETU1DMV9DTEsJCTB4MDBFMgorI2RlZmluZSBTRE1NQzFfQ01ECQkweDAwRTQKKyNkZWZpbmUgU0RNTUMxX0RBVDAJCTB4MDBFNgorI2RlZmluZSBTRE1NQzFfREFUMQkJMHgwMEU4CisjZGVmaW5lIFNETU1DMV9EQVQyCQkweDAwRUEKKyNkZWZpbmUgU0RNTUMxX0RBVDMJCTB4MDBFQworI2RlZmluZSBTRE1NQzFfREFUNAkJMHgwMEVFCisjZGVmaW5lIFNETU1DMV9EQVQ1CQkweDAwRjAKKyNkZWZpbmUgU0RNTUMxX0RBVDYJCTB4MDBGMgorI2RlZmluZSBTRE1NQzFfREFUNwkJMHgwMEY0CisjZGVmaW5lIEFCRV9NQ0JTUDJfQ0xLWAkJMHgwMEY2CisjZGVmaW5lIEFCRV9NQ0JTUDJfRFIJCTB4MDBGOAorI2RlZmluZSBBQkVfTUNCU1AyX0RYCQkweDAwRkEKKyNkZWZpbmUgQUJFX01DQlNQMl9GU1gJCTB4MDBGQworI2RlZmluZSBBQkVfTUNCU1AxX0NMS1gJCTB4MDBGRQorI2RlZmluZSBBQkVfTUNCU1AxX0RSCQkweDAxMDAKKyNkZWZpbmUgQUJFX01DQlNQMV9EWAkJMHgwMTAyCisjZGVmaW5lIEFCRV9NQ0JTUDFfRlNYCQkweDAxMDQKKyNkZWZpbmUgQUJFX1BETV9VTF9EQVRBCQkweDAxMDYKKyNkZWZpbmUgQUJFX1BETV9ETF9EQVRBCQkweDAxMDgKKyNkZWZpbmUgQUJFX1BETV9GUkFNRQkJMHgwMTBBCisjZGVmaW5lIEFCRV9QRE1fTEJfQ0xLCQkweDAxMEMKKyNkZWZpbmUgQUJFX0NMS1MJCTB4MDEwRQorI2RlZmluZSBBQkVfRE1JQ19DTEsxCQkweDAxMTAKKyNkZWZpbmUgQUJFX0RNSUNfRElOMQkJMHgwMTEyCisjZGVmaW5lIEFCRV9ETUlDX0RJTjIJCTB4MDExNAorI2RlZmluZSBBQkVfRE1JQ19ESU4zCQkweDAxMTYKKyNkZWZpbmUgVUFSVDJfQ1RTCQkweDAxMTgKKyNkZWZpbmUgVUFSVDJfUlRTCQkweDAxMUEKKyNkZWZpbmUgVUFSVDJfUlgJCTB4MDExQworI2RlZmluZSBVQVJUMl9UWAkJMHgwMTFFCisjZGVmaW5lIEhEUV9TSU8JCQkweDAxMjAKKyNkZWZpbmUgSTJDMV9TQ0wJCTB4MDEyMgorI2RlZmluZSBJMkMxX1NEQQkJMHgwMTI0CisjZGVmaW5lIEkyQzJfU0NMCQkweDAxMjYKKyNkZWZpbmUgSTJDMl9TREEJCTB4MDEyOAorI2RlZmluZSBJMkMzX1NDTAkJMHgwMTJBCisjZGVmaW5lIEkyQzNfU0RBCQkweDAxMkMKKyNkZWZpbmUgSTJDNF9TQ0wJCTB4MDEyRQorI2RlZmluZSBJMkM0X1NEQQkJMHgwMTMwCisjZGVmaW5lIE1DU1BJMV9DTEsJCTB4MDEzMgorI2RlZmluZSBNQ1NQSTFfU09NSQkJMHgwMTM0CisjZGVmaW5lIE1DU1BJMV9TSU1PCQkweDAxMzYKKyNkZWZpbmUgTUNTUEkxX0NTMAkJMHgwMTM4CisjZGVmaW5lIE1DU1BJMV9DUzEJCTB4MDEzQQorI2RlZmluZSBNQ1NQSTFfQ1MyCQkweDAxM0MKKyNkZWZpbmUgTUNTUEkxX0NTMwkJMHgwMTNFCisjZGVmaW5lIFVBUlQzX0NUU19SQ1RYCQkweDAxNDAKKyNkZWZpbmUgVUFSVDNfUlRTX1NECQkweDAxNDIKKyNkZWZpbmUgVUFSVDNfUlhfSVJSWAkJMHgwMTQ0CisjZGVmaW5lIFVBUlQzX1RYX0lSVFgJCTB4MDE0NgorI2RlZmluZSBTRE1NQzVfQ0xLCQkweDAxNDgKKyNkZWZpbmUgU0RNTUM1X0NNRAkJMHgwMTRBCisjZGVmaW5lIFNETU1DNV9EQVQwCQkweDAxNEMKKyNkZWZpbmUgU0RNTUM1X0RBVDEJCTB4MDE0RQorI2RlZmluZSBTRE1NQzVfREFUMgkJMHgwMTUwCisjZGVmaW5lIFNETU1DNV9EQVQzCQkweDAxNTIKKyNkZWZpbmUgTUNTUEk0X0NMSwkJMHgwMTU0CisjZGVmaW5lIE1DU1BJNF9TSU1PCQkweDAxNTYKKyNkZWZpbmUgTUNTUEk0X1NPTUkJCTB4MDE1OAorI2RlZmluZSBNQ1NQSTRfQ1MwCQkweDAxNUEKKyNkZWZpbmUgVUFSVDRfUlgJCTB4MDE1QworI2RlZmluZSBVQVJUNF9UWAkJMHgwMTVFCisjZGVmaW5lIFVTQkIyX1VMUElUTExfQ0xLCTB4MDE2MAorI2RlZmluZSBVU0JCMl9VTFBJVExMX1NUUAkweDAxNjIKKyNkZWZpbmUgVVNCQjJfVUxQSVRMTF9ESVIJMHgwMTY0CisjZGVmaW5lIFVTQkIyX1VMUElUTExfTlhUCTB4MDE2NgorI2RlZmluZSBVU0JCMl9VTFBJVExMX0RBVDAJMHgwMTY4CisjZGVmaW5lIFVTQkIyX1VMUElUTExfREFUMQkweDAxNkEKKyNkZWZpbmUgVVNCQjJfVUxQSVRMTF9EQVQyCTB4MDE2QworI2RlZmluZSBVU0JCMl9VTFBJVExMX0RBVDMJMHgwMTZFCisjZGVmaW5lIFVTQkIyX1VMUElUTExfREFUNAkweDAxNzAKKyNkZWZpbmUgVVNCQjJfVUxQSVRMTF9EQVQ1CTB4MDE3MgorI2RlZmluZSBVU0JCMl9VTFBJVExMX0RBVDYJMHgwMTc0CisjZGVmaW5lIFVTQkIyX1VMUElUTExfREFUNwkweDAxNzYKKyNkZWZpbmUgVVNCQjJfSFNJQ19EQVRBCQkweDAxNzgKKyNkZWZpbmUgVVNCQjJfSFNJQ19TVFJPQkUJMHgwMTdBCisjZGVmaW5lIFVOSVBST19UWDAJCTB4MDE3QworI2RlZmluZSBVTklQUk9fVFkwCQkweDAxN0UKKyNkZWZpbmUgVU5JUFJPX1RYMQkJMHgwMTgwCisjZGVmaW5lIFVOSVBST19UWTEJCTB4MDE4MgorI2RlZmluZSBVTklQUk9fVFgyCQkweDAxODQKKyNkZWZpbmUgVU5JUFJPX1RZMgkJMHgwMTg2CisjZGVmaW5lIFVOSVBST19SWDAJCTB4MDE4OAorI2RlZmluZSBVTklQUk9fUlkwCQkweDAxOEEKKyNkZWZpbmUgVU5JUFJPX1JYMQkJMHgwMThDCisjZGVmaW5lIFVOSVBST19SWTEJCTB4MDE4RQorI2RlZmluZSBVTklQUk9fUlgyCQkweDAxOTAKKyNkZWZpbmUgVU5JUFJPX1JZMgkJMHgwMTkyCisjZGVmaW5lIFVTQkEwX09UR19DRQkJMHgwMTk0CisjZGVmaW5lIFVTQkEwX09UR19EUAkJMHgwMTk2CisjZGVmaW5lIFVTQkEwX09UR19ETQkJMHgwMTk4CisjZGVmaW5lIEZSRUZfQ0xLMV9PVVQJCTB4MDE5QQorI2RlZmluZSBGUkVGX0NMSzJfT1VUCQkweDAxOUMKKyNkZWZpbmUgU1lTX05JUlExCQkweDAxOUUKKyNkZWZpbmUgU1lTX05JUlEyCQkweDAxQTAKKyNkZWZpbmUgU1lTX0JPT1QwCQkweDAxQTIKKyNkZWZpbmUgU1lTX0JPT1QxCQkweDAxQTQKKyNkZWZpbmUgU1lTX0JPT1QyCQkweDAxQTYKKyNkZWZpbmUgU1lTX0JPT1QzCQkweDAxQTgKKyNkZWZpbmUgU1lTX0JPT1Q0CQkweDAxQUEKKyNkZWZpbmUgU1lTX0JPT1Q1CQkweDAxQUMKKyNkZWZpbmUgRFBNX0VNVTAJCTB4MDFBRQorI2RlZmluZSBEUE1fRU1VMQkJMHgwMUIwCisjZGVmaW5lIERQTV9FTVUyCQkweDAxQjIKKyNkZWZpbmUgRFBNX0VNVTMJCTB4MDFCNAorI2RlZmluZSBEUE1fRU1VNAkJMHgwMUI2CisjZGVmaW5lIERQTV9FTVU1CQkweDAxQjgKKyNkZWZpbmUgRFBNX0VNVTYJCTB4MDFCQQorI2RlZmluZSBEUE1fRU1VNwkJMHgwMUJDCisjZGVmaW5lIERQTV9FTVU4CQkweDAxQkUKKyNkZWZpbmUgRFBNX0VNVTkJCTB4MDFDMAorI2RlZmluZSBEUE1fRU1VMTAJCTB4MDFDMgorI2RlZmluZSBEUE1fRU1VMTEJCTB4MDFDNAorI2RlZmluZSBEUE1fRU1VMTIJCTB4MDFDNgorI2RlZmluZSBEUE1fRU1VMTMJCTB4MDFDOAorI2RlZmluZSBEUE1fRU1VMTQJCTB4MDFDQQorI2RlZmluZSBEUE1fRU1VMTUJCTB4MDFDQworI2RlZmluZSBEUE1fRU1VMTYJCTB4MDFDRQorI2RlZmluZSBEUE1fRU1VMTcJCTB4MDFEMAorI2RlZmluZSBEUE1fRU1VMTgJCTB4MDFEMgorI2RlZmluZSBEUE1fRU1VMTkJCTB4MDFENAorI2RlZmluZSBXQUtFVVBFVkVOVF8wCQkweDAxRDgKKyNkZWZpbmUgV0FLRVVQRVZFTlRfMQkJMHgwMURDCisjZGVmaW5lIFdBS0VVUEVWRU5UXzIJCTB4MDFFMAorI2RlZmluZSBXQUtFVVBFVkVOVF8zCQkweDAxRTQKKyNkZWZpbmUgV0FLRVVQRVZFTlRfNAkJMHgwMUU4CisjZGVmaW5lIFdBS0VVUEVWRU5UXzUJCTB4MDFFQworI2RlZmluZSBXQUtFVVBFVkVOVF82CQkweDAxRjAKKworI2RlZmluZSBXS1VQX1JFVklTSU9OCQkweDAwMDAKKyNkZWZpbmUgV0tVUF9IV0lORk8JCTB4MDAwNAorI2RlZmluZSBXS1VQX1NZU0NPTkZJRwkJMHgwMDEwCisjZGVmaW5lIFBBRDBfU0lNX0lPCQkweDAwNDAKKyNkZWZpbmUgUEFEMV9TSU1fQ0xLCQkweDAwNDIKKyNkZWZpbmUgUEFEMF9TSU1fUkVTRVQJCTB4MDA0NAorI2RlZmluZSBQQUQxX1NJTV9DRAkJMHgwMDQ2CisjZGVmaW5lIFBBRDBfU0lNX1BXUkNUUkwJCTB4MDA0OAorI2RlZmluZSBQQUQxX1NSX1NDTAkJMHgwMDRBCisjZGVmaW5lIFBBRDBfU1JfU0RBCQkweDAwNEMKKyNkZWZpbmUgUEFEMV9GUkVGX1hUQUxfSU4JCTB4MDA0RQorI2RlZmluZSBQQUQwX0ZSRUZfU0xJQ0VSX0lOCTB4MDA1MAorI2RlZmluZSBQQUQxX0ZSRUZfQ0xLX0lPUkVRCTB4MDA1MgorI2RlZmluZSBQQUQwX0ZSRUZfQ0xLMF9PVVQJCTB4MDA1NAorI2RlZmluZSBQQUQxX0ZSRUZfQ0xLM19SRVEJCTB4MDA1NgorI2RlZmluZSBQQUQwX0ZSRUZfQ0xLM19PVVQJCTB4MDA1OAorI2RlZmluZSBQQUQxX0ZSRUZfQ0xLNF9SRVEJCTB4MDA1QQorI2RlZmluZSBQQUQwX0ZSRUZfQ0xLNF9PVVQJCTB4MDA1QworI2RlZmluZSBQQUQxX1NZU18zMksJCTB4MDA1RQorI2RlZmluZSBQQUQwX1NZU19OUkVTUFdST04JCTB4MDA2MAorI2RlZmluZSBQQUQxX1NZU19OUkVTV0FSTQkJMHgwMDYyCisjZGVmaW5lIFBBRDBfU1lTX1BXUl9SRVEJCTB4MDA2NAorI2RlZmluZSBQQUQxX1NZU19QV1JPTl9SRVNFVAkweDAwNjYKKyNkZWZpbmUgUEFEMF9TWVNfQk9PVDYJCTB4MDA2OAorI2RlZmluZSBQQUQxX1NZU19CT09UNwkJMHgwMDZBCisjZGVmaW5lIFBBRDBfSlRBR19OVFJTVAkJMHgwMDZDCisjZGVmaW5lIFBBRDFfSlRBR19UQ0sJCTB4MDA2RAorI2RlZmluZSBQQUQwX0pUQUdfUlRDSwkJMHgwMDcwCisjZGVmaW5lIFBBRDFfSlRBR19UTVNfVE1TQwkJMHgwMDcyCisjZGVmaW5lIFBBRDBfSlRBR19UREkJCTB4MDA3NAorI2RlZmluZSBQQUQxX0pUQUdfVERPCQkweDAwNzYKKyNkZWZpbmUgUEFEQ09ORl9XQUtFVVBFVkVOVF8wCTB4MDA3QworI2RlZmluZSBDT05UUk9MX1NNQVJUMU5PUE1JT19QQURDT05GXzAJCTB4MDVBMAorI2RlZmluZSBDT05UUk9MX1NNQVJUMU5PUE1JT19QQURDT05GXzEJCTB4MDVBNAorI2RlZmluZSBQQURDT05GX01PREUJCTB4MDVBOAorI2RlZmluZSBDT05UUk9MX1hUQUxfT1NDSUxMQVRPUgkJCTB4MDVBQworI2RlZmluZSBDT05UUk9MX0NPTlRST0xfSTJDXzIJCQkweDA2MDQKKyNkZWZpbmUgQ09OVFJPTF9DT05UUk9MX0pUQUcJCQkweDA2MDgKKyNkZWZpbmUgQ09OVFJPTF9DT05UUk9MX1NZUwkJCTB4MDYwQworI2RlZmluZSBDT05UUk9MX1NQQVJFX1JXCQkweDA2MTQKKyNkZWZpbmUgQ09OVFJPTF9TUEFSRV9SCQkweDA2MTgKKyNkZWZpbmUgQ09OVFJPTF9TUEFSRV9SX0MwCQkweDA2MUMKKworI2VuZGlmIC8qIF9NVVhfT01BUDVfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvb21hcDQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvb21hcC5oCnNpbWlsYXJpdHkgaW5kZXggNjUlCmNvcHkgZnJvbSBhcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L29tYXA0LmgKY29weSB0byBhcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L29tYXAuaAppbmRleCA2MWViYjNkLi5kODExZDZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L29tYXA0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9vbWFwLmgKQEAgLTQsMTAgKzQsNyBAQAogICoKICAqIEF1dGhvcnM6CiAgKglBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KLSAqCi0gKiBEZXJpdmVkIGZyb20gT01BUDMgd29yayBieQotICoJUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgotICoJU3llZCBNb2hhbW1lZCBLaGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KKyAqCVNyaWNoYXJhbiBSIDxyLnNyaWNoYXJhbkB0aS5jb20+CiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC0yOCw4ICsyNSw4IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpZm5kZWYgX09NQVA0X0hfCi0jZGVmaW5lIF9PTUFQNF9IXworI2lmbmRlZiBfT01BUDVfSF8KKyNkZWZpbmUgX09NQVA1X0hfCiAKICNpZiAhKGRlZmluZWQoX19LRVJORUxfU1RSSUNUX05BTUVTKSB8fCBkZWZpbmVkKF9fQVNTRU1CTFlfXykpCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CkBAIC0zOCw1NCArMzUsNTIgQEAKIC8qCiAgKiBMNCBQZXJpcGhlcmFscyAtIEw0IFdha2V1cCBhbmQgTDQgQ29yZSBub3cKICAqLwotI2RlZmluZSBPTUFQNDRYWF9MNF9DT1JFX0JBU0UJMHg0QTAwMDAwMAotI2RlZmluZSBPTUFQNDRYWF9MNF9XS1VQX0JBU0UJMHg0QTMwMDAwMAotI2RlZmluZSBPTUFQNDRYWF9MNF9QRVJfQkFTRQkweDQ4MDAwMDAwCisjZGVmaW5lIE9NQVA1NFhYX0w0X0NPUkVfQkFTRQkweDRBMDAwMDAwCisjZGVmaW5lIE9NQVA1NFhYX0w0X1dLVVBfQkFTRQkweDRBZTAwMDAwCisjZGVmaW5lIE9NQVA1NFhYX0w0X1BFUl9CQVNFCTB4NDgwMDAwMDAKIAotI2RlZmluZSBPTUFQNDRYWF9EUkFNX0FERFJfU1BBQ0VfU1RBUlQJMHg4MDAwMDAwMAotI2RlZmluZSBPTUFQNDRYWF9EUkFNX0FERFJfU1BBQ0VfRU5ECTB4RDAwMDAwMDAKLQorI2RlZmluZSBPTUFQNTRYWF9EUkFNX0FERFJfU1BBQ0VfU1RBUlQJMHg4MDAwMDAwMAorI2RlZmluZSBPTUFQNTRYWF9EUkFNX0FERFJfU1BBQ0VfRU5ECTB4RDAwMDAwMDAKKyNkZWZpbmUgRFJBTV9BRERSX1NQQUNFX1NUQVJUCU9NQVA1NFhYX0RSQU1fQUREUl9TUEFDRV9TVEFSVAorI2RlZmluZSBEUkFNX0FERFJfU1BBQ0VfRU5ECU9NQVA1NFhYX0RSQU1fQUREUl9TUEFDRV9FTkQKIAogLyogQ09OVFJPTCAqLwotI2RlZmluZSBDVFJMX0JBU0UJCShPTUFQNDRYWF9MNF9DT1JFX0JBU0UgKyAweDIwMDApCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DT1JFCShPTUFQNDRYWF9MNF9DT1JFX0JBU0UgKyAweDEwMDAwMCkKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1dLVVAJKE9NQVA0NFhYX0w0X0NPUkVfQkFTRSArIDB4MzFFMDAwKQorI2RlZmluZSBDVFJMX0JBU0UJCShPTUFQNTRYWF9MNF9DT1JFX0JBU0UgKyAweDIwMDApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DT1JFCShDVFJMX0JBU0UgKyAweDA4MDApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9XS1VQCShPTUFQNTRYWF9MNF9XS1VQX0JBU0UgKyAweGM4MDApCiAKLS8qIExQRERSMiBJTyByZWdzICovCisvKiBMUEREUjIgSU8gcmVncy4gVG8gYmUgdmVyaWZpZWQgKi8KICNkZWZpbmUgTFBERFIyX0lPX1JFR1NfQkFTRQkweDRBMTAwNjM4CiAKIC8qIENPTlRST0xfSURfQ09ERSAqLwotI2RlZmluZSBDT05UUk9MX0lEX0NPREUJCTB4NEEwMDIyMDQKKyNkZWZpbmUgQ09OVFJPTF9JRF9DT0RFCQkoQ1RSTF9CQVNFICsgMHgyMDQpCiAKLS8qIDQ0MzAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ09OVFJPTF9JRF9DT0RFX0VTMV8wCTB4MEI4NTIwMkYKLSNkZWZpbmUgT01BUDQ0MzBfQ09OVFJPTF9JRF9DT0RFX0VTMl8wCTB4MUI4NTIwMkYKLSNkZWZpbmUgT01BUDQ0MzBfQ09OVFJPTF9JRF9DT0RFX0VTMl8xCTB4M0I5NUMwMkYKLSNkZWZpbmUgT01BUDQ0MzBfQ09OVFJPTF9JRF9DT0RFX0VTMl8yCTB4NEI5NUMwMkYKLSNkZWZpbmUgT01BUDQ0MzBfQ09OVFJPTF9JRF9DT0RFX0VTMl8zCTB4NkI5NUMwMkYKKy8qIFRvIGJlIHZlcmlmaWVkICovCisjZGVmaW5lIE9NQVA1X0NPTlRST0xfSURfQ09ERV9FUzFfMAkweDBCODUyMDJGCiAKLS8qIDQ0NjAgKi8KLSNkZWZpbmUgT01BUDQ0NjBfQ09OVFJPTF9JRF9DT0RFX0VTMV8wCTB4MEI5NEUwMkYKLSNkZWZpbmUgT01BUDQ0NjBfQ09OVFJPTF9JRF9DT0RFX0VTMV8xCTB4MkI5NEUwMkYKKy8qIFNURF9GVVNFX1BST0RfSURfMSAqLworI2RlZmluZSBTVERfRlVTRV9QUk9EX0lEXzEJCShDVFJMX0JBU0UgKyAweDIxOCkKKyNkZWZpbmUgUFJPRF9JRF8xX1NJTElDT05fVFlQRV9TSElGVAkxNgorI2RlZmluZSBQUk9EX0lEXzFfU0lMSUNPTl9UWVBFX01BU0sJKDMgPDwgMTYpCiAKIC8qIFVBUlQgKi8KLSNkZWZpbmUgVUFSVDFfQkFTRQkJKE9NQVA0NFhYX0w0X1BFUl9CQVNFICsgMHg2YTAwMCkKLSNkZWZpbmUgVUFSVDJfQkFTRQkJKE9NQVA0NFhYX0w0X1BFUl9CQVNFICsgMHg2YzAwMCkKLSNkZWZpbmUgVUFSVDNfQkFTRQkJKE9NQVA0NFhYX0w0X1BFUl9CQVNFICsgMHgyMDAwMCkKKyNkZWZpbmUgVUFSVDFfQkFTRQkJKE9NQVA1NFhYX0w0X1BFUl9CQVNFICsgMHg2YTAwMCkKKyNkZWZpbmUgVUFSVDJfQkFTRQkJKE9NQVA1NFhYX0w0X1BFUl9CQVNFICsgMHg2YzAwMCkKKyNkZWZpbmUgVUFSVDNfQkFTRQkJKE9NQVA1NFhYX0w0X1BFUl9CQVNFICsgMHgyMDAwMCkKIAogLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVycyAqLwotI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQNDRYWF9MNF9XS1VQX0JBU0UgKyAweDE4MDAwKQotI2RlZmluZSBHUFQyX0JBU0UJCShPTUFQNDRYWF9MNF9QRVJfQkFTRSAgKyAweDMyMDAwKQotI2RlZmluZSBHUFQzX0JBU0UJCShPTUFQNDRYWF9MNF9QRVJfQkFTRSAgKyAweDM0MDAwKQorI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQNTRYWF9MNF9XS1VQX0JBU0UgKyAweDE4MDAwKQorI2RlZmluZSBHUFQyX0JBU0UJCShPTUFQNTRYWF9MNF9QRVJfQkFTRSAgKyAweDMyMDAwKQorI2RlZmluZSBHUFQzX0JBU0UJCShPTUFQNTRYWF9MNF9QRVJfQkFTRSAgKyAweDM0MDAwKQogCiAvKiBXYXRjaGRvZyBUaW1lcjIgLSBNUFUgd2F0Y2hkb2cgKi8KLSNkZWZpbmUgV0RUMl9CQVNFCQkoT01BUDQ0WFhfTDRfV0tVUF9CQVNFICsgMHgxNDAwMCkKKyNkZWZpbmUgV0RUMl9CQVNFCQkoT01BUDU0WFhfTDRfV0tVUF9CQVNFICsgMHgxNDAwMCkKIAogLyogMzJLVElNRVIgKi8KLSNkZWZpbmUgU1lOQ18zMktUSU1FUl9CQVNFCShPTUFQNDRYWF9MNF9XS1VQX0JBU0UgKyAweDQwMDApCisjZGVmaW5lIFNZTkNfMzJLVElNRVJfQkFTRQkoT01BUDU0WFhfTDRfV0tVUF9CQVNFICsgMHg0MDAwKQogCiAvKiBHUE1DICovCi0jZGVmaW5lIE9NQVA0NFhYX0dQTUNfQkFTRQkweDUwMDAwMDAwCisjZGVmaW5lIE9NQVA1NFhYX0dQTUNfQkFTRQkweDUwMDAwMDAwCiAKIC8qIFNZU1RFTSBDT05UUk9MIE1PRFVMRSAqLwogI2RlZmluZSBTWVNDVFJMX0dFTkVSQUxfQ09SRV9CQVNFCTB4NEEwMDIwMDAKQEAgLTEwOCw3ICsxMDMsNyBAQAogICovCiAKIC8qIFBSTSAqLwotI2RlZmluZSBQUk1fQkFTRQkJMHg0QTMwNjAwMAorI2RlZmluZSBQUk1fQkFTRQkJMHg0QUUwNjAwMAogI2RlZmluZSBQUk1fREVWSUNFX0JBU0UJCShQUk1fQkFTRSArIDB4MUIwMCkKIAogI2RlZmluZSBQUk1fUlNUQ1RSTAkJUFJNX0RFVklDRV9CQVNFCkBAIC0xNzUsMTggKzE3MCwyMSBAQAogICogYXQgMHg0MDMwNDAwMChFTVUgYmFzZSkgc28gdGhhdCBvdXIgY29kZSB3b3JrcyBmb3IgYm90aCBFTVUgYW5kIEdQCiAgKi8KICNkZWZpbmUgTk9OX1NFQ1VSRV9TUkFNX1NUQVJUCTB4NDAzMDQwMDAKLSNkZWZpbmUgTk9OX1NFQ1VSRV9TUkFNX0VORAkweDQwMzBFMDAwCS8qIE5vdCBpbmNsdXNpdmUgKi8KKyNkZWZpbmUgTk9OX1NFQ1VSRV9TUkFNX0VORAkweDQwMzIwMDAwCS8qIE5vdCBpbmNsdXNpdmUgKi8KIC8qIGJhc2UgYWRkcmVzcyBmb3IgaW5kaXJlY3QgdmVjdG9ycyAoaW50ZXJuYWwgYm9vdCBtb2RlKSAqLwotI2RlZmluZSBTUkFNX1JPTV9WRUNUX0JBU0UJMHg0MDMwRDAwMAorI2RlZmluZSBTUkFNX1JPTV9WRUNUX0JBU0UJMHg0MDMxRjAwMAogLyogVGVtcG9yYXJ5IFNSQU0gc3RhY2sgdXNlZCB3aGlsZSBsb3cgbGV2ZWwgaW5pdCBpcyBkb25lICovCi0jZGVmaW5lIExPV19MRVZFTF9TUkFNX1NUQUNLCQlOT05fU0VDVVJFX1NSQU1fRU5ECisjZGVmaW5lIExPV19MRVZFTF9TUkFNX1NUQUNLCU5PTl9TRUNVUkVfU1JBTV9FTkQKKwogI2RlZmluZSBTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUgkJTk9OX1NFQ1VSRV9TUkFNX1NUQVJUCi0vKiBTUkFNIHNjcmF0Y2ggc3BhY2UgZW50cmllcyAqLwotI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfT01BUDRfUkVWCVNSQU1fU0NSQVRDSF9TUEFDRV9BRERSCi0jZGVmaW5lIE9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1NJWkUJKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHg0KQotI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9UX05VTQkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweEMpCi0jZGVmaW5lIE9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1RfREVOCShTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUiArIDB4MTApCi0jZGVmaW5lIE9NQVA0X1NSQU1fU0NSQVRDSF9TUEFDRV9FTkQJKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHgxNCkKKy8qCisgKiBTUkFNIHNjcmF0Y2ggc3BhY2UgZW50cmllcworICovCisjZGVmaW5lIE9NQVA1X1NSQU1fU0NSQVRDSF9PTUFQNV9SRVYJU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIKKyNkZWZpbmUgT01BUDVfU1JBTV9TQ1JBVENIX0VNSUZfU0laRQkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweDQpCisjZGVmaW5lIE9NQVA1X1NSQU1fU0NSQVRDSF9FTUlGX1RfTlVNCShTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUiArIDB4QykKKyNkZWZpbmUgT01BUDVfU1JBTV9TQ1JBVENIX0VNSUZfVF9ERU4JKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHgxMCkKKyNkZWZpbmUgT01BUDVfU1JBTV9TQ1JBVENIX1NQQUNFX0VORAkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweDE0KQogCiAvKiBTaWxpY29uIHJldmlzaW9ucyAqLwogI2RlZmluZSBPTUFQNDQzMF9TSUxJQ09OX0lEX0lOVkFMSUQJMHhGRkZGRkZGRgpAQCAtMjA1LDUgKzIwMywyMSBAQAogI2RlZmluZSBERVZfREVTQ19QVFJfT0ZGU0VUCTB4NAogI2RlZmluZSBERVZfREFUQV9QVFJfT0ZGU0VUCTB4MTgKICNkZWZpbmUgQk9PVF9NT0RFX09GRlNFVAkweDgKKyNkZWZpbmUgUkVTRVRfUkVBU09OX09GRlNFVCAgICAgMHg5CisjZGVmaW5lIENIX0ZMQUdTX09GRlNFVCAgICAgICAgIDB4QQogCisjZGVmaW5lIENIX0ZMQUdTX0NIU0VUVElOR1MJKDB4MSA8PCAwKQorI2RlZmluZQlDSF9GTEFHU19DSFJBTQkJKDB4MSA8PCAxKQorI2RlZmluZSBDSF9GTEFHU19DSEZMQVNICSgweDEgPDwgMikKKyNkZWZpbmUgQ0hfRkxBR1NfQ0hNTUNTRAkoMHgxIDw8IDMpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3Qgb21hcF9ib290X3BhcmFtZXRlcnMgeworCWNoYXIgKmJvb3RfbWVzc2FnZTsKKwl1bnNpZ25lZCBpbnQgbWVtX2Jvb3RfZGVzY3JpcHRvcjsKKwl1bnNpZ25lZCBjaGFyIG9tYXBfYm9vdGRldmljZTsKKwl1bnNpZ25lZCBjaGFyIHJlc2V0X3JlYXNvbjsKKwl1bnNpZ25lZCBjaGFyIGNoX2ZsYWdzOworfTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9zeXNfcHJvdG8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvc3lzX3Byb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxZTE4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvc3lzX3Byb3RvLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX1NZU19QUk9UT19IXworI2RlZmluZSBfU1lTX1BST1RPX0hfCisKKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4X29tYXA1Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisKK3N0cnVjdCBvbWFwX3N5c2luZm8geworCWNoYXIgKmJvYXJkX3N0cmluZzsKK307CitleHRlcm4gY29uc3Qgc3RydWN0IG9tYXBfc3lzaW5mbyBzeXNpbmZvOworCit2b2lkIGdwbWNfaW5pdCh2b2lkKTsKK3ZvaWQgd2F0Y2hkb2dfaW5pdCh2b2lkKTsKK3UzMiBnZXRfZGV2aWNlX3R5cGUodm9pZCk7Cit2b2lkIGRvX3NldF9tdXgodTMyIGJhc2UsIHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb25zdCAqYXJyYXksIGludCBzaXplKTsKK3ZvaWQgc2V0X211eGNvbmZfcmVnc19lc3NlbnRpYWwodm9pZCk7Cit2b2lkIHNldF9tdXhjb25mX3JlZ3Nfbm9uX2Vzc2VudGlhbCh2b2lkKTsKK3ZvaWQgc3IzMih2b2lkICosIHUzMiwgdTMyLCB1MzIpOwordTMyIHdhaXRfb25fdmFsdWUodTMyLCB1MzIsIHZvaWQgKiwgdTMyKTsKK3ZvaWQgc2RlbGF5KHVuc2lnbmVkIGxvbmcpOwordm9pZCBvbWFwX3Jldl9zdHJpbmcoY2hhciAqb21hcF9yZXZfc3RyaW5nKTsKK3ZvaWQgc2V0dXBfY2xvY2tzX2Zvcl9jb25zb2xlKHZvaWQpOwordm9pZCBwcmNtX2luaXQodm9pZCk7Cit2b2lkIGJ5cGFzc19kcGxsKHUzMiAqY29uc3QgYmFzZSk7Cit2b2lkIGZyZXFfdXBkYXRlX2NvcmUodm9pZCk7Cit1MzIgZ2V0X3N5c19jbGtfZnJlcSh2b2lkKTsKK3UzMiBvbWFwNV9kZHJfY2xrKHZvaWQpOwordm9pZCBjYW5jZWxfb3V0KHUzMiAqbnVtLCB1MzIgKmRlbiwgdTMyIGRlbl9saW1pdCk7Cit2b2lkIHNkcmFtX2luaXQodm9pZCk7Cit1MzIgb21hcF9zZHJhbV9zaXplKHZvaWQpOwordTMyIGNvcnRleF9yZXYodm9pZCk7Cit2b2lkIGluaXRfb21hcF9yZXZpc2lvbih2b2lkKTsKK3ZvaWQgZG9faW9fc2V0dGluZ3Modm9pZCk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlcgorICogd2FzIGV4ZWN1dGVkIGJ5IFJvbWNvZGUgcHJpb3IgdG8gY29udHJvbCBvZiB0cmFuc2ZlcgorICogdG8gdGhlIGJvb3Rsb2FkZXIuIFNQTCBpcyByZXNwb25zaWJsZSBmb3Igc2F2aW5nIGFuZAorICogcGFzc2luZyB0aGlzIHRvIHRoZSB1LWJvb3QuCisgKi8KK2V4dGVybiBzdHJ1Y3Qgb21hcF9ib290X3BhcmFtZXRlcnMgYm9vdF9wYXJhbXM7CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJ1bm5pbmdfZnJvbV9zZHJhbSh2b2lkKQoreworCXUzMiBwYzsKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTAsIHBjIiA6ICI9ciIgKHBjKSk7CisJcmV0dXJuICgocGMgPj0gT01BUDU0WFhfRFJBTV9BRERSX1NQQUNFX1NUQVJUKSAmJgorCSAgICAocGMgPCBPTUFQNTRYWF9EUkFNX0FERFJfU1BBQ0VfRU5EKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggdWJvb3RfbG9hZGVkX2J5X3NwbCh2b2lkKQoreworCS8qCisJICogdS1ib290IGNhbiBiZSBydW5uaW5nIGZyb20gc2RyYW0gZWl0aGVyIGJlY2F1c2Ugb2YgY29uZmlndXJhdGlvbgorCSAqIEhlYWRlciBvciBieSBTUEwuIElmIGJlY2F1c2Ugb2YgQ0gsIHRoZW4gdGhlIHJvbWNvZGUgc2V0cyB0aGUKKwkgKiBDSFNFVFRJTkdTIGV4ZWN1dGVkIGJpdCB0byB0cnVlIGluIHRoZSBib290IHBhcmFtZXRlciBzdHJ1Y3R1cmUgdGhhdAorCSAqIGl0IHBhc3NlcyB0byB0aGUgYm9vdGxvYWRlci5UaGlzIHBhcmFtZXRlciBpcyBzdG9yZWQgaW4gdGhlIGNoX2ZsYWdzCisJICogdmFyaWFibGUgYnkgYm90aCBTUEwgYW5kIHUtYm9vdC5DaGVjayBvdXQgZm9yIENIU0VUVElOR1MsIHdoaWNoIGlzIGEKKwkgKiBtYW5kYXRvcnkgc2VjdGlvbiBpZiBDSCBpcyBwcmVzZW50LgorCSAqLworCWlmICgoYm9vdF9wYXJhbXMuY2hfZmxhZ3MpICYgKENIX0ZMQUdTX0NIU0VUVElOR1MpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBydW5uaW5nX2Zyb21fc2RyYW0oKTsKK30KKy8qCisgKiBUaGUgYmFzaWMgaGFyZHdhcmUgaW5pdCBvZiBPTUFQKHNfaW5pdCgpKSBjYW4gaGFwcGVuIGluIDQKKyAqIGRpZmZlcmVudCBjb250ZXh0czoKKyAqICAxLiBTUEwgcnVubmluZyBmcm9tIFNSQU0KKyAqICAyLiBVLUJvb3QgcnVubmluZyBmcm9tIEZMQVNICisgKiAgMy4gTm9uLVhJUCBVLUJvb3QgbG9hZGVkIHRvIFNEUkFNIGJ5IFNQTAorICogIDQuIE5vbi1YSVAgVS1Cb290IGxvYWRlZCB0byBTRFJBTSBieSBST00gY29kZSB1c2luZyB0aGUKKyAqICAgICBDb25maWd1cmF0aW9uIEhlYWRlciBmZWF0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGlzIGNvbnRleHQuCisgKiBEZWZpbmluZyBhcyBpbmxpbmUgbWF5IGhlbHAgaW4gY29tcGlsaW5nIG91dCB1bnVzZWQgZnVuY3Rpb25zIGluIFNQTAorICovCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwX2h3X2luaXRfY29udGV4dCh2b2lkKQoreworI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKwlyZXR1cm4gT01BUF9JTklUX0NPTlRFWFRfU1BMOworI2Vsc2UKKwlpZiAodWJvb3RfbG9hZGVkX2J5X3NwbCgpKQorCQlyZXR1cm4gT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfU1BMOworCWVsc2UgaWYgKHJ1bm5pbmdfZnJvbV9zZHJhbSgpKQorCQlyZXR1cm4gT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfQ0g7CisJZWxzZQorCQlyZXR1cm4gT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfRlJPTV9OT1I7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB1MzIgb21hcF9yZXZpc2lvbih2b2lkKQoreworCWV4dGVybiB1MzIgKmNvbnN0IG9tYXA1X3JldmlzaW9uOworCXJldHVybiAqb21hcDVfcmV2aXNpb247Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1weGEvcHhhLXJlZ3MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtcHhhL3B4YS1yZWdzLmgKaW5kZXggMTA5ZmRjMC4uNTJjNzlhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1weGEvcHhhLXJlZ3MuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLXB4YS9weGEtcmVncy5oCkBAIC0zMTUsMTE3ICszMTUsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIFVBUlRzCi0gKi8KLS8qIEZ1bGwgRnVuY3Rpb24gVUFSVCAoRkZVQVJUKSAqLwotI2RlZmluZSBGRlVBUlQJCUZGUkJSCi0jZGVmaW5lIEZGUkJSCQkweDQwMTAwMDAwICAvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBGRlRIUgkJMHg0MDEwMDAwMCAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgRkZJRVIJCTB4NDAxMDAwMDQgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGSUlSCQkweDQwMTAwMDA4ICAvKiBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgRkZGQ1IJCTB4NDAxMDAwMDggIC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgRkZMQ1IJCTB4NDAxMDAwMEMgIC8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgRkZNQ1IJCTB4NDAxMDAwMTAgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGTFNSCQkweDQwMTAwMDE0ICAvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBGRk1TUgkJMHg0MDEwMDAxOCAgLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIEZGU1BSCQkweDQwMTAwMDFDICAvKiBTY3JhdGNoIFBhZCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgRkZJU1IJCTB4NDAxMDAwMjAgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgRkZETEwJCTB4NDAxMDAwMDAgIC8qIERpdmlzb3IgTGF0Y2ggTG93IFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGRExICQkweDQwMTAwMDA0ICAvKiBEaXZpc29yIExhdGNoIEhpZ2ggUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KLQotLyogQmx1ZXRvb3RoIFVBUlQgKEJUVUFSVCkgKi8KLSNkZWZpbmUgQlRVQVJUCQlCVFJCUgotI2RlZmluZSBCVFJCUgkJMHg0MDIwMDAwMCAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgQlRUSFIJCTB4NDAyMDAwMDAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEJUSUVSCQkweDQwMjAwMDA0ICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVElJUgkJMHg0MDIwMDAwOCAgLyogSW50ZXJydXB0IElEIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIEJURkNSCQkweDQwMjAwMDA4ICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEJUTENSCQkweDQwMjAwMDBDICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEJUTUNSCQkweDQwMjAwMDEwICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVExTUgkJMHg0MDIwMDAxNCAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgQlRNU1IJCTB4NDAyMDAwMTggIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBCVFNQUgkJMHg0MDIwMDAxQyAgLyogU2NyYXRjaCBQYWQgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEJUSVNSCQkweDQwMjAwMDIwICAvKiBJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEJURExMCQkweDQwMjAwMDAwICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVERMSAkJMHg0MDIwMDAwNCAgLyogRGl2aXNvciBMYXRjaCBIaWdoIFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCi0KLS8qIFN0YW5kYXJkIFVBUlQgKFNUVUFSVCkgKi8KLSNkZWZpbmUgU1RVQVJUCQlTVFJCUgotI2RlZmluZSBTVFJCUgkJMHg0MDcwMDAwMCAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgU1RUSFIJCTB4NDA3MDAwMDAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFNUSUVSCQkweDQwNzAwMDA0ICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBTVElJUgkJMHg0MDcwMDAwOCAgLyogSW50ZXJydXB0IElEIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIFNURkNSCQkweDQwNzAwMDA4ICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFNUTENSCQkweDQwNzAwMDBDICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIFNUTUNSCQkweDQwNzAwMDEwICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBTVExTUgkJMHg0MDcwMDAxNCAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgU1RNU1IJCTB4NDA3MDAwMTggIC8qIFJlc2VydmVkICovCi0jZGVmaW5lIFNUU1BSCQkweDQwNzAwMDFDICAvKiBTY3JhdGNoIFBhZCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgU1RJU1IJCTB4NDA3MDAwMjAgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgU1RETEwJCTB4NDA3MDAwMDAgIC8qIERpdmlzb3IgTGF0Y2ggTG93IFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIFNURExICQkweDQwNzAwMDA0ICAvKiBEaXZpc29yIExhdGNoIEhpZ2ggUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KLQotI2RlZmluZSBJRVJfRE1BRQkoMSA8PCA3KQkvKiBETUEgUmVxdWVzdHMgRW5hYmxlICovCi0jZGVmaW5lIElFUl9VVUUJCSgxIDw8IDYpCS8qIFVBUlQgVW5pdCBFbmFibGUgKi8KLSNkZWZpbmUgSUVSX05SWkUJKDEgPDwgNSkJLyogTlJaIGNvZGluZyBFbmFibGUgKi8KLSNkZWZpbmUgSUVSX1JUSU9FCSgxIDw8IDQpCS8qIFJlY2VpdmVyIFRpbWUgT3V0IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgSUVSX01JRQkJKDEgPDwgMykJLyogTW9kZW0gSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBJRVJfUkxTRQkoMSA8PCAyKQkvKiBSZWNlaXZlciBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIElFUl9USUUJCSgxIDw8IDEpCS8qIFRyYW5zbWl0IERhdGEgcmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIElFUl9SQVZJRQkoMSA8PCAwKQkvKiBSZWNlaXZlciBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgSUlSX0ZJRk9FUzEJKDEgPDwgNykJLyogRklGTyBNb2RlIEVuYWJsZSBTdGF0dXMgKi8KLSNkZWZpbmUgSUlSX0ZJRk9FUzAJKDEgPDwgNikJLyogRklGTyBNb2RlIEVuYWJsZSBTdGF0dXMgKi8KLSNkZWZpbmUgSUlSX1RPRAkJKDEgPDwgMykJLyogVGltZSBPdXQgRGV0ZWN0ZWQgKi8KLSNkZWZpbmUgSUlSX0lJRDIJKDEgPDwgMikJLyogSW50ZXJydXB0IFNvdXJjZSBFbmNvZGVkICovCi0jZGVmaW5lIElJUl9JSUQxCSgxIDw8IDEpCS8qIEludGVycnVwdCBTb3VyY2UgRW5jb2RlZCAqLwotI2RlZmluZSBJSVJfSVAJCSgxIDw8IDApCS8qIEludGVycnVwdCBQZW5kaW5nIChhY3RpdmUgbG93KSAqLwotCi0jZGVmaW5lIEZDUl9JVEwyCSgxIDw8IDcpCS8qIEludGVycnVwdCBUcmlnZ2VyIExldmVsICovCi0jZGVmaW5lIEZDUl9JVEwxCSgxIDw8IDYpCS8qIEludGVycnVwdCBUcmlnZ2VyIExldmVsICovCi0jZGVmaW5lIEZDUl9SRVNFVFRGCSgxIDw8IDIpCS8qIFJlc2V0IFRyYW5zbWl0dGVyIEZJRk8gKi8KLSNkZWZpbmUgRkNSX1JFU0VUUkYJKDEgPDwgMSkJLyogUmVzZXQgUmVjZWl2ZXIgRklGTyAqLwotI2RlZmluZSBGQ1JfVFJGSUZPRQkoMSA8PCAwKQkvKiBUcmFuc21pdCBhbmQgUmVjZWl2ZSBGSUZPIEVuYWJsZSAqLwotI2RlZmluZSBGQ1JfSVRMXzEJKDApCi0jZGVmaW5lIEZDUl9JVExfOAkoRkNSX0lUTDEpCi0jZGVmaW5lIEZDUl9JVExfMTYJKEZDUl9JVEwyKQotI2RlZmluZSBGQ1JfSVRMXzMyCShGQ1JfSVRMMnxGQ1JfSVRMMSkKLQotI2RlZmluZSBMQ1JfRExBQgkoMSA8PCA3KQkvKiBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgKi8KLSNkZWZpbmUgTENSX1NCCQkoMSA8PCA2KQkvKiBTZXQgQnJlYWsgKi8KLSNkZWZpbmUgTENSX1NUS1lQCSgxIDw8IDUpCS8qIFN0aWNreSBQYXJpdHkgKi8KLSNkZWZpbmUgTENSX0VQUwkJKDEgPDwgNCkJLyogRXZlbiBQYXJpdHkgU2VsZWN0ICovCi0jZGVmaW5lIExDUl9QRU4JCSgxIDw8IDMpCS8qIFBhcml0eSBFbmFibGUgKi8KLSNkZWZpbmUgTENSX1NUQgkJKDEgPDwgMikJLyogU3RvcCBCaXQgKi8KLSNkZWZpbmUgTENSX1dMUzEJKDEgPDwgMSkJLyogV29yZCBMZW5ndGggU2VsZWN0ICovCi0jZGVmaW5lIExDUl9XTFMwCSgxIDw8IDApCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLwotCi0jZGVmaW5lIExTUl9GSUZPRQkoMSA8PCA3KQkvKiBGSUZPIEVycm9yIFN0YXR1cyAqLwotI2RlZmluZSBMU1JfVEVNVAkoMSA8PCA2KQkvKiBUcmFuc21pdHRlciBFbXB0eSAqLwotI2RlZmluZSBMU1JfVERSUQkoMSA8PCA1KQkvKiBUcmFuc21pdCBEYXRhIFJlcXVlc3QgKi8KLSNkZWZpbmUgTFNSX0JJCQkoMSA8PCA0KQkvKiBCcmVhayBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTFNSX0ZFCQkoMSA8PCAzKQkvKiBGcmFtaW5nIEVycm9yICovCi0jZGVmaW5lIExTUl9QRQkJKDEgPDwgMikJLyogUGFyaXR5IEVycm9yICovCi0jZGVmaW5lIExTUl9PRQkJKDEgPDwgMSkJLyogT3ZlcnJ1biBFcnJvciAqLwotI2RlZmluZSBMU1JfRFIJCSgxIDw8IDApCS8qIERhdGEgUmVhZHkgKi8KLQotI2RlZmluZSBNQ1JfTE9PUAkoMSA8PCA0KQkvKiAqLwotI2RlZmluZSBNQ1JfT1VUMgkoMSA8PCAzKQkvKiBmb3JjZSBNU1JfRENEIGluIGxvb3BiYWNrIG1vZGUgKi8KLSNkZWZpbmUgTUNSX09VVDEJKDEgPDwgMikJLyogZm9yY2UgTVNSX1JJIGluIGxvb3BiYWNrIG1vZGUgKi8KLSNkZWZpbmUgTUNSX1JUUwkJKDEgPDwgMSkJLyogUmVxdWVzdCB0byBTZW5kICovCi0jZGVmaW5lIE1DUl9EVFIJCSgxIDw8IDApCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KLQotI2RlZmluZSBNU1JfRENECQkoMSA8PCA3KQkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCi0jZGVmaW5lIE1TUl9SSQkJKDEgPDwgNikJLyogUmluZyBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgTVNSX0RTUgkJKDEgPDwgNSkJLyogRGF0YSBTZXQgUmVhZHkgKi8KLSNkZWZpbmUgTVNSX0NUUwkJKDEgPDwgNCkJLyogQ2xlYXIgVG8gU2VuZCAqLwotI2RlZmluZSBNU1JfRERDRAkoMSA8PCAzKQkvKiBEZWx0YSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCi0jZGVmaW5lIE1TUl9URVJJCSgxIDw8IDIpCS8qIFRyYWlsaW5nIEVkZ2UgUmluZyBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgTVNSX0REU1IJKDEgPDwgMSkJLyogRGVsdGEgRGF0YSBTZXQgUmVhZHkgKi8KLSNkZWZpbmUgTVNSX0RDVFMJKDEgPDwgMCkJLyogRGVsdGEgQ2xlYXIgVG8gU2VuZCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKICAqIElyU1IgKEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlcikKICAqLwogI2RlZmluZSBJclNSX09GRlNFVCAweDIwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLXB4YS9yZWdzLXVhcnQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtcHhhL3JlZ3MtdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NWU4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLXB4YS9yZWdzLXVhcnQuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYJX19SRUdTX1VBUlRfSF9fCisjZGVmaW5lCV9fUkVHU19VQVJUX0hfXworCisjZGVmaW5lCUZGVUFSVF9CQVNFCQkweDQwMTAwMDAwCisjZGVmaW5lCUJUVUFSVF9CQVNFCQkweDQwMjAwMDAwCisjZGVmaW5lCVNUVUFSVF9CQVNFCQkweDQwNzAwMDAwCisjZGVmaW5lCUhXVUFSVF9CQVNFCQkweDQxNjAwMDAwCisKK3N0cnVjdCBweGFfdWFydF9yZWdzIHsKKwl1bmlvbiB7CisJCXVpbnQzMl90CXRocjsKKwkJdWludDMyX3QJcmJyOworCQl1aW50MzJfdAlkbGw7CisJfTsKKwl1bmlvbiB7CisJCXVpbnQzMl90CWllcjsKKwkJdWludDMyX3QJZGxoOworCX07CisJdW5pb24geworCQl1aW50MzJfdAlmY3I7CisJCXVpbnQzMl90CWlpcjsKKwl9OworCXVpbnQzMl90CWxjcjsKKwl1aW50MzJfdAltY3I7CisJdWludDMyX3QJbHNyOworCXVpbnQzMl90CW1zcjsKKwl1aW50MzJfdAlzcHI7CisJdWludDMyX3QJaXNyOworfTsKKworI2RlZmluZQlJRVJfRE1BRQkoMSA8PCA3KQorI2RlZmluZQlJRVJfVVVFCQkoMSA8PCA2KQorI2RlZmluZQlJRVJfTlJaRQkoMSA8PCA1KQorI2RlZmluZQlJRVJfUlRJT0UJKDEgPDwgNCkKKyNkZWZpbmUJSUVSX01JRQkJKDEgPDwgMykKKyNkZWZpbmUJSUVSX1JMU0UJKDEgPDwgMikKKyNkZWZpbmUJSUVSX1RJRQkJKDEgPDwgMSkKKyNkZWZpbmUJSUVSX1JBVklFCSgxIDw8IDApCisKKyNkZWZpbmUJSUlSX0ZJRk9FUzEJKDEgPDwgNykKKyNkZWZpbmUJSUlSX0ZJRk9FUzAJKDEgPDwgNikKKyNkZWZpbmUJSUlSX1RPRAkJKDEgPDwgMykKKyNkZWZpbmUJSUlSX0lJRDIJKDEgPDwgMikKKyNkZWZpbmUJSUlSX0lJRDEJKDEgPDwgMSkKKyNkZWZpbmUJSUlSX0lQCQkoMSA8PCAwKQorCisjZGVmaW5lCUZDUl9JVEwyCSgxIDw8IDcpCisjZGVmaW5lCUZDUl9JVEwxCSgxIDw8IDYpCisjZGVmaW5lCUZDUl9SRVNFVFRGCSgxIDw8IDIpCisjZGVmaW5lCUZDUl9SRVNFVFJGCSgxIDw8IDEpCisjZGVmaW5lCUZDUl9UUkZJRk9FCSgxIDw8IDApCisjZGVmaW5lCUZDUl9JVExfMQkwCisjZGVmaW5lCUZDUl9JVExfOAkoRkNSX0lUTDEpCisjZGVmaW5lCUZDUl9JVExfMTYJKEZDUl9JVEwyKQorI2RlZmluZQlGQ1JfSVRMXzMyCShGQ1JfSVRMMnxGQ1JfSVRMMSkKKworI2RlZmluZQlMQ1JfRExBQgkoMSA8PCA3KQorI2RlZmluZQlMQ1JfU0IJCSgxIDw8IDYpCisjZGVmaW5lCUxDUl9TVEtZUAkoMSA8PCA1KQorI2RlZmluZQlMQ1JfRVBTCQkoMSA8PCA0KQorI2RlZmluZQlMQ1JfUEVOCQkoMSA8PCAzKQorI2RlZmluZQlMQ1JfU1RCCQkoMSA8PCAyKQorI2RlZmluZQlMQ1JfV0xTMQkoMSA8PCAxKQorI2RlZmluZQlMQ1JfV0xTMAkoMSA8PCAwKQorCisjZGVmaW5lCUxTUl9GSUZPRQkoMSA8PCA3KQorI2RlZmluZQlMU1JfVEVNVAkoMSA8PCA2KQorI2RlZmluZQlMU1JfVERSUQkoMSA8PCA1KQorI2RlZmluZQlMU1JfQkkJCSgxIDw8IDQpCisjZGVmaW5lCUxTUl9GRQkJKDEgPDwgMykKKyNkZWZpbmUJTFNSX1BFCQkoMSA8PCAyKQorI2RlZmluZQlMU1JfT0UJCSgxIDw8IDEpCisjZGVmaW5lCUxTUl9EUgkJKDEgPDwgMCkKKworI2RlZmluZQlNQ1JfTE9PUAkoMSA8PCA0KQorI2RlZmluZQlNQ1JfT1VUMgkoMSA8PCAzKQorI2RlZmluZQlNQ1JfT1VUMQkoMSA8PCAyKQorI2RlZmluZQlNQ1JfUlRTCQkoMSA8PCAxKQorI2RlZmluZQlNQ1JfRFRSCQkoMSA8PCAwKQorCisjZGVmaW5lCU1TUl9EQ0QJCSgxIDw8IDcpCisjZGVmaW5lCU1TUl9SSQkJKDEgPDwgNikKKyNkZWZpbmUJTVNSX0RTUgkJKDEgPDwgNSkKKyNkZWZpbmUJTVNSX0NUUwkJKDEgPDwgNCkKKyNkZWZpbmUJTVNSX0REQ0QJKDEgPDwgMykKKyNkZWZpbmUJTVNSX1RFUkkJKDEgPDwgMikKKyNkZWZpbmUJTVNSX0REU1IJKDEgPDwgMSkKKyNkZWZpbmUJTVNSX0RDVFMJKDEgPDwgMCkKKworI2VuZGlmCS8qIF9fUkVHU19VQVJUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJtdjcuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FybXY3LmgKaW5kZXggOWFkYzU2My4uYWQ5YTg3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJtdjcuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcm12Ny5oCkBAIC0zMSw2ICszMSw5IEBACiAjZGVmaW5lIE1JRFJfQ09SVEVYX0E5X1IxUDMJMHg0MTFGQzA5MwogI2RlZmluZSBNSURSX0NPUlRFWF9BOV9SMlAxMAkweDQxMkZDMDlBCiAKKy8qIENvcnRleC1BMTUgcmV2aXNpb25zICovCisjZGVmaW5lIE1JRFJfQ09SVEVYX0ExNV9SMFAwCTB4NDEwRkMwRjAKKwogLyogQ0NTSURSICovCiAjZGVmaW5lIENDU0lEUl9MSU5FX1NJWkVfT0ZGU0VUCQkwCiAjZGVmaW5lIENDU0lEUl9MSU5FX1NJWkVfTUFTSwkJMHg3CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbWlmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbWlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjN2QyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VtaWYuaApAQCAtMCwwICsxLDEwMzUgQEAKKy8qCisgKiBPTUFQNDR4eCBFTUlGIGhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9FTUlGX0hfCisjZGVmaW5lIF9FTUlGX0hfCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKy8qIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBFTUlGMV9CQVNFCQkJCTB4NGMwMDAwMDAKKyNkZWZpbmUgRU1JRjJfQkFTRQkJCQkweDRkMDAwMDAwCisKKy8qIFJlZ2lzdGVycyBzaGlmdHMgYW5kIG1hc2tzICovCisKKy8qIEVNSUZfTU9EX0lEX1JFViAqLworI2RlZmluZSBFTUlGX1JFR19TQ0hFTUVfU0hJRlQJCQkzMAorI2RlZmluZSBFTUlGX1JFR19TQ0hFTUVfTUFTSwkJCSgweDMgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX01PRFVMRV9JRF9TSElGVAkJCTE2CisjZGVmaW5lIEVNSUZfUkVHX01PRFVMRV9JRF9NQVNLCQkJKDB4ZmZmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19SVExfVkVSU0lPTl9TSElGVAkJCTExCisjZGVmaW5lIEVNSUZfUkVHX1JUTF9WRVJTSU9OX01BU0sJCQkoMHgxZiA8PCAxMSkKKyNkZWZpbmUgRU1JRl9SRUdfTUFKT1JfUkVWSVNJT05fU0hJRlQJCTgKKyNkZWZpbmUgRU1JRl9SRUdfTUFKT1JfUkVWSVNJT05fTUFTSwkJKDB4NyA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19NSU5PUl9SRVZJU0lPTl9TSElGVAkJMAorI2RlZmluZSBFTUlGX1JFR19NSU5PUl9SRVZJU0lPTl9NQVNLCQkoMHgzZiA8PCAwKQorCisvKiBTVEFUVVMgKi8KKyNkZWZpbmUgRU1JRl9SRUdfQkVfU0hJRlQJCQkJMzEKKyNkZWZpbmUgRU1JRl9SRUdfQkVfTUFTSwkJCQkoMSA8PCAzMSkKKyNkZWZpbmUgRU1JRl9SRUdfRFVBTF9DTEtfTU9ERV9TSElGVAkJMzAKKyNkZWZpbmUgRU1JRl9SRUdfRFVBTF9DTEtfTU9ERV9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX0ZBU1RfSU5JVF9TSElGVAkJCTI5CisjZGVmaW5lIEVNSUZfUkVHX0ZBU1RfSU5JVF9NQVNLCQkJKDEgPDwgMjkpCisjZGVmaW5lIEVNSUZfUkVHX1BIWV9ETExfUkVBRFlfU0hJRlQJCTIKKyNkZWZpbmUgRU1JRl9SRUdfUEhZX0RMTF9SRUFEWV9NQVNLCQkJKDEgPDwgMikKKworLyogU0RSQU1fQ09ORklHICovCisjZGVmaW5lIEVNSUZfUkVHX1NEUkFNX1RZUEVfU0hJRlQJCQkyOQorI2RlZmluZSBFTUlGX1JFR19TRFJBTV9UWVBFX01BU0sJCQkoMHg3IDw8IDI5KQorI2RlZmluZSBFTUlGX1JFR19JQkFOS19QT1NfU0hJRlQJCQkyNworI2RlZmluZSBFTUlGX1JFR19JQkFOS19QT1NfTUFTSwkJCSgweDMgPDwgMjcpCisjZGVmaW5lIEVNSUZfUkVHX0REUl9URVJNX1NISUZUCQkJMjQKKyNkZWZpbmUgRU1JRl9SRUdfRERSX1RFUk1fTUFTSwkJCSgweDcgPDwgMjQpCisjZGVmaW5lIEVNSUZfUkVHX0REUjJfRERRU19TSElGVAkJCTIzCisjZGVmaW5lIEVNSUZfUkVHX0REUjJfRERRU19NQVNLCQkJKDEgPDwgMjMpCisjZGVmaW5lIEVNSUZfUkVHX0RZTl9PRFRfU0hJRlQJCQkyMQorI2RlZmluZSBFTUlGX1JFR19EWU5fT0RUX01BU0sJCQkoMHgzIDw8IDIxKQorI2RlZmluZSBFTUlGX1JFR19ERFJfRElTQUJMRV9ETExfU0hJRlQJCTIwCisjZGVmaW5lIEVNSUZfUkVHX0REUl9ESVNBQkxFX0RMTF9NQVNLCQkoMSA8PCAyMCkKKyNkZWZpbmUgRU1JRl9SRUdfU0RSQU1fRFJJVkVfU0hJRlQJCQkxOAorI2RlZmluZSBFTUlGX1JFR19TRFJBTV9EUklWRV9NQVNLCQkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgRU1JRl9SRUdfQ1dMX1NISUZUCQkJCTE2CisjZGVmaW5lIEVNSUZfUkVHX0NXTF9NQVNLCQkJCSgweDMgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX05BUlJPV19NT0RFX1NISUZUCQkJMTQKKyNkZWZpbmUgRU1JRl9SRUdfTkFSUk9XX01PREVfTUFTSwkJCSgweDMgPDwgMTQpCisjZGVmaW5lIEVNSUZfUkVHX0NMX1NISUZUCQkJCTEwCisjZGVmaW5lIEVNSUZfUkVHX0NMX01BU0sJCQkJKDB4ZiA8PCAxMCkKKyNkZWZpbmUgRU1JRl9SRUdfUk9XU0laRV9TSElGVAkJCTcKKyNkZWZpbmUgRU1JRl9SRUdfUk9XU0laRV9NQVNLCQkJKDB4NyA8PCA3KQorI2RlZmluZSBFTUlGX1JFR19JQkFOS19TSElGVAkJCTQKKyNkZWZpbmUgRU1JRl9SRUdfSUJBTktfTUFTSwkJCQkoMHg3IDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX0VCQU5LX1NISUZUCQkJMworI2RlZmluZSBFTUlGX1JFR19FQkFOS19NQVNLCQkJCSgxIDw8IDMpCisjZGVmaW5lIEVNSUZfUkVHX1BBR0VTSVpFX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19QQUdFU0laRV9NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBTRFJBTV9DT05GSUdfMiAqLworI2RlZmluZSBFTUlGX1JFR19DUzFOVk1FTl9TSElGVAkJCTMwCisjZGVmaW5lIEVNSUZfUkVHX0NTMU5WTUVOX01BU0sJCQkoMSA8PCAzMCkKKyNkZWZpbmUgRU1JRl9SRUdfRUJBTktfUE9TX1NISUZUCQkJMjcKKyNkZWZpbmUgRU1JRl9SRUdfRUJBTktfUE9TX01BU0sJCQkoMSA8PCAyNykKKyNkZWZpbmUgRU1JRl9SRUdfUkRCTlVNX1NISUZUCQkJNAorI2RlZmluZSBFTUlGX1JFR19SREJOVU1fTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUgRU1JRl9SRUdfUkRCU0laRV9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkRCU0laRV9NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBTRFJBTV9SRUZfQ1RSTCAqLworI2RlZmluZSBFTUlGX1JFR19JTklUUkVGX0RJU19TSElGVAkJCTMxCisjZGVmaW5lIEVNSUZfUkVHX0lOSVRSRUZfRElTX01BU0sJCQkoMSA8PCAzMSkKKyNkZWZpbmUgRU1JRl9SRUdfU1JUX1NISUZUCQkJCTI5CisjZGVmaW5lIEVNSUZfUkVHX1NSVF9NQVNLCQkJCSgxIDw8IDI5KQorI2RlZmluZSBFTUlGX1JFR19BU1JfU0hJRlQJCQkJMjgKKyNkZWZpbmUgRU1JRl9SRUdfQVNSX01BU0sJCQkJKDEgPDwgMjgpCisjZGVmaW5lIEVNSUZfUkVHX1BBU1JfU0hJRlQJCQkJMjQKKyNkZWZpbmUgRU1JRl9SRUdfUEFTUl9NQVNLCQkJCSgweDcgPDwgMjQpCisjZGVmaW5lIEVNSUZfUkVHX1JFRlJFU0hfUkFURV9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkVGUkVTSF9SQVRFX01BU0sJCQkoMHhmZmZmIDw8IDApCisKKy8qIFNEUkFNX1JFRl9DVFJMX1NIRFcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfUkVGUkVTSF9SQVRFX1NIRFdfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkVGUkVTSF9SQVRFX1NIRFdfTUFTSwkJKDB4ZmZmZiA8PCAwKQorCisvKiBTRFJBTV9USU1fMSAqLworI2RlZmluZSBFTUlGX1JFR19UX1JQX1NISUZUCQkJCTI1CisjZGVmaW5lIEVNSUZfUkVHX1RfUlBfTUFTSwkJCQkoMHhmIDw8IDI1KQorI2RlZmluZSBFTUlGX1JFR19UX1JDRF9TSElGVAkJCTIxCisjZGVmaW5lIEVNSUZfUkVHX1RfUkNEX01BU0sJCQkJKDB4ZiA8PCAyMSkKKyNkZWZpbmUgRU1JRl9SRUdfVF9XUl9TSElGVAkJCQkxNworI2RlZmluZSBFTUlGX1JFR19UX1dSX01BU0sJCQkJKDB4ZiA8PCAxNykKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQVNfU0hJRlQJCQkxMgorI2RlZmluZSBFTUlGX1JFR19UX1JBU19NQVNLCQkJCSgweDFmIDw8IDEyKQorI2RlZmluZSBFTUlGX1JFR19UX1JDX1NISUZUCQkJCTYKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQ19NQVNLCQkJCSgweDNmIDw8IDYpCisjZGVmaW5lIEVNSUZfUkVHX1RfUlJEX1NISUZUCQkJMworI2RlZmluZSBFTUlGX1JFR19UX1JSRF9NQVNLCQkJCSgweDcgPDwgMykKKyNkZWZpbmUgRU1JRl9SRUdfVF9XVFJfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX1RfV1RSX01BU0sJCQkJKDB4NyA8PCAwKQorCisvKiBTRFJBTV9USU1fMV9TSERXICovCisjZGVmaW5lIEVNSUZfUkVHX1RfUlBfU0hEV19TSElGVAkJCTI1CisjZGVmaW5lIEVNSUZfUkVHX1RfUlBfU0hEV19NQVNLCQkJKDB4ZiA8PCAyNSkKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQ0RfU0hEV19TSElGVAkJCTIxCisjZGVmaW5lIEVNSUZfUkVHX1RfUkNEX1NIRFdfTUFTSwkJCSgweGYgPDwgMjEpCisjZGVmaW5lIEVNSUZfUkVHX1RfV1JfU0hEV19TSElGVAkJCTE3CisjZGVmaW5lIEVNSUZfUkVHX1RfV1JfU0hEV19NQVNLCQkJKDB4ZiA8PCAxNykKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQVNfU0hEV19TSElGVAkJCTEyCisjZGVmaW5lIEVNSUZfUkVHX1RfUkFTX1NIRFdfTUFTSwkJCSgweDFmIDw8IDEyKQorI2RlZmluZSBFTUlGX1JFR19UX1JDX1NIRFdfU0hJRlQJCQk2CisjZGVmaW5lIEVNSUZfUkVHX1RfUkNfU0hEV19NQVNLCQkJKDB4M2YgPDwgNikKKyNkZWZpbmUgRU1JRl9SRUdfVF9SUkRfU0hEV19TSElGVAkJCTMKKyNkZWZpbmUgRU1JRl9SRUdfVF9SUkRfU0hEV19NQVNLCQkJKDB4NyA8PCAzKQorI2RlZmluZSBFTUlGX1JFR19UX1dUUl9TSERXX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19UX1dUUl9TSERXX01BU0sJCQkoMHg3IDw8IDApCisKKy8qIFNEUkFNX1RJTV8yICovCisjZGVmaW5lIEVNSUZfUkVHX1RfWFBfU0hJRlQJCQkJMjgKKyNkZWZpbmUgRU1JRl9SRUdfVF9YUF9NQVNLCQkJCSgweDcgPDwgMjgpCisjZGVmaW5lIEVNSUZfUkVHX1RfT0RUX1NISUZUCQkJMjUKKyNkZWZpbmUgRU1JRl9SRUdfVF9PRFRfTUFTSwkJCQkoMHg3IDw8IDI1KQorI2RlZmluZSBFTUlGX1JFR19UX1hTTlJfU0hJRlQJCQkxNgorI2RlZmluZSBFTUlGX1JFR19UX1hTTlJfTUFTSwkJCSgweDFmZiA8PCAxNikKKyNkZWZpbmUgRU1JRl9SRUdfVF9YU1JEX1NISUZUCQkJNgorI2RlZmluZSBFTUlGX1JFR19UX1hTUkRfTUFTSwkJCSgweDNmZiA8PCA2KQorI2RlZmluZSBFTUlGX1JFR19UX1JUUF9TSElGVAkJCTMKKyNkZWZpbmUgRU1JRl9SRUdfVF9SVFBfTUFTSwkJCQkoMHg3IDw8IDMpCisjZGVmaW5lIEVNSUZfUkVHX1RfQ0tFX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19UX0NLRV9NQVNLCQkJCSgweDcgPDwgMCkKKworLyogU0RSQU1fVElNXzJfU0hEVyAqLworI2RlZmluZSBFTUlGX1JFR19UX1hQX1NIRFdfU0hJRlQJCQkyOAorI2RlZmluZSBFTUlGX1JFR19UX1hQX1NIRFdfTUFTSwkJCSgweDcgPDwgMjgpCisjZGVmaW5lIEVNSUZfUkVHX1RfT0RUX1NIRFdfU0hJRlQJCQkyNQorI2RlZmluZSBFTUlGX1JFR19UX09EVF9TSERXX01BU0sJCQkoMHg3IDw8IDI1KQorI2RlZmluZSBFTUlGX1JFR19UX1hTTlJfU0hEV19TSElGVAkJCTE2CisjZGVmaW5lIEVNSUZfUkVHX1RfWFNOUl9TSERXX01BU0sJCQkoMHgxZmYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX1RfWFNSRF9TSERXX1NISUZUCQkJNgorI2RlZmluZSBFTUlGX1JFR19UX1hTUkRfU0hEV19NQVNLCQkJKDB4M2ZmIDw8IDYpCisjZGVmaW5lIEVNSUZfUkVHX1RfUlRQX1NIRFdfU0hJRlQJCQkzCisjZGVmaW5lIEVNSUZfUkVHX1RfUlRQX1NIRFdfTUFTSwkJCSgweDcgPDwgMykKKyNkZWZpbmUgRU1JRl9SRUdfVF9DS0VfU0hEV19TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfVF9DS0VfU0hEV19NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBTRFJBTV9USU1fMyAqLworI2RlZmluZSBFTUlGX1JFR19UX0NLRVNSX1NISUZUCQkJMjEKKyNkZWZpbmUgRU1JRl9SRUdfVF9DS0VTUl9NQVNLCQkJKDB4NyA8PCAyMSkKKyNkZWZpbmUgRU1JRl9SRUdfWlFfWlFDU19TSElGVAkJCTE1CisjZGVmaW5lIEVNSUZfUkVHX1pRX1pRQ1NfTUFTSwkJCSgweDNmIDw8IDE1KQorI2RlZmluZSBFTUlGX1JFR19UX1REUVNDS01BWF9TSElGVAkJCTEzCisjZGVmaW5lIEVNSUZfUkVHX1RfVERRU0NLTUFYX01BU0sJCQkoMHgzIDw8IDEzKQorI2RlZmluZSBFTUlGX1JFR19UX1JGQ19TSElGVAkJCTQKKyNkZWZpbmUgRU1JRl9SRUdfVF9SRkNfTUFTSwkJCQkoMHgxZmYgPDwgNCkKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQVNfTUFYX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19UX1JBU19NQVhfTUFTSwkJCSgweGYgPDwgMCkKKworLyogU0RSQU1fVElNXzNfU0hEVyAqLworI2RlZmluZSBFTUlGX1JFR19UX0NLRVNSX1NIRFdfU0hJRlQJCQkyMQorI2RlZmluZSBFTUlGX1JFR19UX0NLRVNSX1NIRFdfTUFTSwkJCSgweDcgPDwgMjEpCisjZGVmaW5lIEVNSUZfUkVHX1pRX1pRQ1NfU0hEV19TSElGVAkJCTE1CisjZGVmaW5lIEVNSUZfUkVHX1pRX1pRQ1NfU0hEV19NQVNLCQkJKDB4M2YgPDwgMTUpCisjZGVmaW5lIEVNSUZfUkVHX1RfVERRU0NLTUFYX1NIRFdfU0hJRlQJCTEzCisjZGVmaW5lIEVNSUZfUkVHX1RfVERRU0NLTUFYX1NIRFdfTUFTSwkJKDB4MyA8PCAxMykKKyNkZWZpbmUgRU1JRl9SRUdfVF9SRkNfU0hEV19TSElGVAkJCTQKKyNkZWZpbmUgRU1JRl9SRUdfVF9SRkNfU0hEV19NQVNLCQkJKDB4MWZmIDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX1RfUkFTX01BWF9TSERXX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX1RfUkFTX01BWF9TSERXX01BU0sJCSgweGYgPDwgMCkKKworLyogTFBERFIyX05WTV9USU0gKi8KKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfWFBfU0hJRlQJCQkyOAorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9YUF9NQVNLCQkJKDB4NyA8PCAyOCkKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfV1RSX1NISUZUCQkJMjQKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfV1RSX01BU0sJCQkoMHg3IDw8IDI0KQorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SUF9TSElGVAkJCTIwCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JQX01BU0sJCQkoMHhmIDw8IDIwKQorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9XUkFfU0hJRlQJCQkxNgorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9XUkFfTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JSRF9TSElGVAkJCTgKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfUlJEX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SQ0RNSU5fU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JDRE1JTl9NQVNLCQkJKDB4ZmYgPDwgMCkKKworLyogTFBERFIyX05WTV9USU1fU0hEVyAqLworI2RlZmluZSBFTUlGX1JFR19OVk1fVF9YUF9TSERXX1NISUZUCQkyOAorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9YUF9TSERXX01BU0sJCQkoMHg3IDw8IDI4KQorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9XVFJfU0hEV19TSElGVAkJMjQKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfV1RSX1NIRFdfTUFTSwkJKDB4NyA8PCAyNCkKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfUlBfU0hEV19TSElGVAkJMjAKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfUlBfU0hEV19NQVNLCQkJKDB4ZiA8PCAyMCkKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfV1JBX1NIRFdfU0hJRlQJCTE2CisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1dSQV9TSERXX01BU0sJCSgweGYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JSRF9TSERXX1NISUZUCQk4CisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JSRF9TSERXX01BU0sJCSgweGZmIDw8IDgpCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JDRE1JTl9TSERXX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JDRE1JTl9TSERXX01BU0sJCSgweGZmIDw8IDApCisKKy8qIFBXUl9NR01UX0NUUkwgKi8KKyNkZWZpbmUgRU1JRl9SRUdfSURMRU1PREVfU0hJRlQJCQkzMAorI2RlZmluZSBFTUlGX1JFR19JRExFTU9ERV9NQVNLCQkJKDB4MyA8PCAzMCkKKyNkZWZpbmUgRU1JRl9SRUdfUERfVElNX1NISUZUCQkJMTIKKyNkZWZpbmUgRU1JRl9SRUdfUERfVElNX01BU0sJCQkoMHhmIDw8IDEyKQorI2RlZmluZSBFTUlGX1JFR19EUERfRU5fU0hJRlQJCQkxMQorI2RlZmluZSBFTUlGX1JFR19EUERfRU5fTUFTSwkJCSgxIDw8IDExKQorI2RlZmluZSBFTUlGX1JFR19MUF9NT0RFX1NISUZUCQkJOAorI2RlZmluZSBFTUlGX1JFR19MUF9NT0RFX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIEVNSUZfUkVHX1NSX1RJTV9TSElGVAkJCTQKKyNkZWZpbmUgRU1JRl9SRUdfU1JfVElNX01BU0sJCQkoMHhmIDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX0NTX1RJTV9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfQ1NfVElNX01BU0sJCQkoMHhmIDw8IDApCisKKy8qIFBXUl9NR01UX0NUUkxfU0hEVyAqLworI2RlZmluZSBFTUlGX1JFR19QRF9USU1fU0hEV19TSElGVAkJCTgKKyNkZWZpbmUgRU1JRl9SRUdfUERfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUgRU1JRl9SRUdfU1JfVElNX1NIRFdfU0hJRlQJCQk0CisjZGVmaW5lIEVNSUZfUkVHX1NSX1RJTV9TSERXX01BU0sJCQkoMHhmIDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX0NTX1RJTV9TSERXX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19DU19USU1fU0hEV19NQVNLCQkJKDB4ZiA8PCAwKQorCisvKiBMUEREUjJfTU9ERV9SRUdfREFUQSAqLworI2RlZmluZSBFTUlGX1JFR19WQUxVRV8wX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19WQUxVRV8wX01BU0sJCQkoMHg3ZiA8PCAwKQorCisvKiBMUEREUjJfTU9ERV9SRUdfQ0ZHICovCisjZGVmaW5lIEVNSUZfUkVHX0NTX1NISUZUCQkJCTMxCisjZGVmaW5lIEVNSUZfUkVHX0NTX01BU0sJCQkJKDEgPDwgMzEpCisjZGVmaW5lIEVNSUZfUkVHX1JFRlJFU0hfRU5fU0hJRlQJCQkzMAorI2RlZmluZSBFTUlGX1JFR19SRUZSRVNIX0VOX01BU0sJCQkoMSA8PCAzMCkKKyNkZWZpbmUgRU1JRl9SRUdfQUREUkVTU19TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfQUREUkVTU19NQVNLCQkJKDB4ZmYgPDwgMCkKKworLyogT0NQX0NPTkZJRyAqLworI2RlZmluZSBFTUlGX1JFR19TWVNfVEhSRVNIX01BWF9TSElGVAkJMjQKKyNkZWZpbmUgRU1JRl9SRUdfU1lTX1RIUkVTSF9NQVhfTUFTSwkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgRU1JRl9SRUdfTVBVX1RIUkVTSF9NQVhfU0hJRlQJCTIwCisjZGVmaW5lIEVNSUZfUkVHX01QVV9USFJFU0hfTUFYX01BU0sJCSgweGYgPDwgMjApCisjZGVmaW5lIEVNSUZfUkVHX0xMX1RIUkVTSF9NQVhfU0hJRlQJCTE2CisjZGVmaW5lIEVNSUZfUkVHX0xMX1RIUkVTSF9NQVhfTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX1BSX09MRF9DT1VOVF9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUFJfT0xEX0NPVU5UX01BU0sJCQkoMHhmZiA8PCAwKQorCisvKiBPQ1BfQ0ZHX1ZBTF8xICovCisjZGVmaW5lIEVNSUZfUkVHX1NZU19CVVNfV0lEVEhfU0hJRlQJCTMwCisjZGVmaW5lIEVNSUZfUkVHX1NZU19CVVNfV0lEVEhfTUFTSwkJCSgweDMgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX0xMX0JVU19XSURUSF9TSElGVAkJCTI4CisjZGVmaW5lIEVNSUZfUkVHX0xMX0JVU19XSURUSF9NQVNLCQkJKDB4MyA8PCAyOCkKKyNkZWZpbmUgRU1JRl9SRUdfV1JfRklGT19ERVBUSF9TSElGVAkJOAorI2RlZmluZSBFTUlGX1JFR19XUl9GSUZPX0RFUFRIX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19DTURfRklGT19ERVBUSF9TSElGVAkJMAorI2RlZmluZSBFTUlGX1JFR19DTURfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCAwKQorCisvKiBPQ1BfQ0ZHX1ZBTF8yICovCisjZGVmaW5lIEVNSUZfUkVHX1JSRUdfRklGT19ERVBUSF9TSElGVAkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfUlJFR19GSUZPX0RFUFRIX01BU0sJCSgweGZmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19SU0RfRklGT19ERVBUSF9TSElGVAkJOAorI2RlZmluZSBFTUlGX1JFR19SU0RfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19SQ01EX0ZJRk9fREVQVEhfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkNNRF9GSUZPX0RFUFRIX01BU0sJCSgweGZmIDw8IDApCisKKy8qIElPREZUX1RMR0MgKi8KKyNkZWZpbmUgRU1JRl9SRUdfVExFQ19TSElGVAkJCQkxNgorI2RlZmluZSBFTUlGX1JFR19UTEVDX01BU0sJCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUgRU1JRl9SRUdfTVRfU0hJRlQJCQkJMTQKKyNkZWZpbmUgRU1JRl9SRUdfTVRfTUFTSwkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgRU1JRl9SRUdfQUNUX0NBUF9FTl9TSElGVAkJCTEzCisjZGVmaW5lIEVNSUZfUkVHX0FDVF9DQVBfRU5fTUFTSwkJCSgxIDw8IDEzKQorI2RlZmluZSBFTUlGX1JFR19PUEdfTERfU0hJRlQJCQkxMgorI2RlZmluZSBFTUlGX1JFR19PUEdfTERfTUFTSwkJCSgxIDw8IDEyKQorI2RlZmluZSBFTUlGX1JFR19SRVNFVF9QSFlfU0hJRlQJCQkxMAorI2RlZmluZSBFTUlGX1JFR19SRVNFVF9QSFlfTUFTSwkJCSgxIDw8IDEwKQorI2RlZmluZSBFTUlGX1JFR19NTVNfU0hJRlQJCQkJOAorI2RlZmluZSBFTUlGX1JFR19NTVNfTUFTSwkJCQkoMSA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19NQ19TSElGVAkJCQk0CisjZGVmaW5lIEVNSUZfUkVHX01DX01BU0sJCQkJKDB4MyA8PCA0KQorI2RlZmluZSBFTUlGX1JFR19QQ19TSElGVAkJCQkxCisjZGVmaW5lIEVNSUZfUkVHX1BDX01BU0sJCQkJKDB4NyA8PCAxKQorI2RlZmluZSBFTUlGX1JFR19UTV9TSElGVAkJCQkwCisjZGVmaW5lIEVNSUZfUkVHX1RNX01BU0sJCQkJKDEgPDwgMCkKKworLyogSU9ERlRfQ1RSTF9NSVNSX1JTTFQgKi8KKyNkZWZpbmUgRU1JRl9SRUdfRFFNX1RMTVJfU0hJRlQJCQkxNgorI2RlZmluZSBFTUlGX1JFR19EUU1fVExNUl9NQVNLCQkJKDB4M2ZmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19DVExfVExNUl9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfQ1RMX1RMTVJfTUFTSwkJCSgweDdmZiA8PCAwKQorCisvKiBJT0RGVF9BRERSX01JU1JfUlNMVCAqLworI2RlZmluZSBFTUlGX1JFR19BRERSX1RMTVJfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0FERFJfVExNUl9NQVNLCQkJKDB4MWZmZmZmIDw8IDApCisKKy8qIElPREZUX0RBVEFfTUlTUl9SU0xUXzEgKi8KKyNkZWZpbmUgRU1JRl9SRUdfREFUQV9UTE1SXzMxXzBfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfREFUQV9UTE1SXzMxXzBfTUFTSwkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogSU9ERlRfREFUQV9NSVNSX1JTTFRfMiAqLworI2RlZmluZSBFTUlGX1JFR19EQVRBX1RMTVJfNjNfMzJfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfREFUQV9UTE1SXzYzXzMyX01BU0sJCSgweGZmZmZmZmZmIDw8IDApCisKKy8qIElPREZUX0RBVEFfTUlTUl9SU0xUXzMgKi8KKyNkZWZpbmUgRU1JRl9SRUdfREFUQV9UTE1SXzY2XzY0X1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX0RBVEFfVExNUl82Nl82NF9NQVNLCQkoMHg3IDw8IDApCisKKy8qIFBFUkZfQ05UXzEgKi8KKyNkZWZpbmUgRU1JRl9SRUdfQ09VTlRFUjFfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0NPVU5URVIxX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBQRVJGX0NOVF8yICovCisjZGVmaW5lIEVNSUZfUkVHX0NPVU5URVIyX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19DT1VOVEVSMl9NQVNLCQkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogUEVSRl9DTlRfQ0ZHICovCisjZGVmaW5lIEVNSUZfUkVHX0NOVFIyX01DT05OSURfRU5fU0hJRlQJCTMxCisjZGVmaW5lIEVNSUZfUkVHX0NOVFIyX01DT05OSURfRU5fTUFTSwkJKDEgPDwgMzEpCisjZGVmaW5lIEVNSUZfUkVHX0NOVFIyX1JFR0lPTl9FTl9TSElGVAkJMzAKKyNkZWZpbmUgRU1JRl9SRUdfQ05UUjJfUkVHSU9OX0VOX01BU0sJCSgxIDw8IDMwKQorI2RlZmluZSBFTUlGX1JFR19DTlRSMl9DRkdfU0hJRlQJCQkxNgorI2RlZmluZSBFTUlGX1JFR19DTlRSMl9DRkdfTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX0NOVFIxX01DT05OSURfRU5fU0hJRlQJCTE1CisjZGVmaW5lIEVNSUZfUkVHX0NOVFIxX01DT05OSURfRU5fTUFTSwkJKDEgPDwgMTUpCisjZGVmaW5lIEVNSUZfUkVHX0NOVFIxX1JFR0lPTl9FTl9TSElGVAkJMTQKKyNkZWZpbmUgRU1JRl9SRUdfQ05UUjFfUkVHSU9OX0VOX01BU0sJCSgxIDw8IDE0KQorI2RlZmluZSBFTUlGX1JFR19DTlRSMV9DRkdfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0NOVFIxX0NGR19NQVNLCQkJKDB4ZiA8PCAwKQorCisvKiBQRVJGX0NOVF9TRUwgKi8KKyNkZWZpbmUgRU1JRl9SRUdfTUNPTk5JRDJfU0hJRlQJCQkyNAorI2RlZmluZSBFTUlGX1JFR19NQ09OTklEMl9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIEVNSUZfUkVHX1JFR0lPTl9TRUwyX1NISUZUCQkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfUkVHSU9OX1NFTDJfTUFTSwkJCSgweDMgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX01DT05OSUQxX1NISUZUCQkJOAorI2RlZmluZSBFTUlGX1JFR19NQ09OTklEMV9NQVNLCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRU1JRl9SRUdfUkVHSU9OX1NFTDFfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX1JFR0lPTl9TRUwxX01BU0sJCQkoMHgzIDw8IDApCisKKy8qIFBFUkZfQ05UX1RJTSAqLworI2RlZmluZSBFTUlGX1JFR19UT1RBTF9USU1FX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19UT1RBTF9USU1FX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBSRUFEX0lETEVfQ1RSTCAqLworI2RlZmluZSBFTUlGX1JFR19SRUFEX0lETEVfTEVOX1NISUZUCQkxNgorI2RlZmluZSBFTUlGX1JFR19SRUFEX0lETEVfTEVOX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX01BU0sJCSgweDFmZiA8PCAwKQorCisvKiBSRUFEX0lETEVfQ1RSTF9TSERXICovCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfSURMRV9MRU5fU0hEV19TSElGVAkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9TSERXX01BU0sJCSgweGYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfSURMRV9JTlRFUlZBTF9TSERXX1NISUZUCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX1NIRFdfTUFTSwkoMHgxZmYgPDwgMCkKKworLyogSVJRX0VPSSAqLworI2RlZmluZSBFTUlGX1JFR19FT0lfU0hJRlQJCQkJMAorI2RlZmluZSBFTUlGX1JFR19FT0lfTUFTSwkJCQkoMSA8PCAwKQorCisvKiBJUlFTVEFUVVNfUkFXX1NZUyAqLworI2RlZmluZSBFTUlGX1JFR19ETlZfU1lTX1NISUZUCQkJMgorI2RlZmluZSBFTUlGX1JFR19ETlZfU1lTX01BU0sJCQkoMSA8PCAyKQorI2RlZmluZSBFTUlGX1JFR19UQV9TWVNfU0hJRlQJCQkxCisjZGVmaW5lIEVNSUZfUkVHX1RBX1NZU19NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgRU1JRl9SRUdfRVJSX1NZU19TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfRVJSX1NZU19NQVNLCQkJKDEgPDwgMCkKKworLyogSVJRU1RBVFVTX1JBV19MTCAqLworI2RlZmluZSBFTUlGX1JFR19ETlZfTExfU0hJRlQJCQkyCisjZGVmaW5lIEVNSUZfUkVHX0ROVl9MTF9NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgRU1JRl9SRUdfVEFfTExfU0hJRlQJCQkxCisjZGVmaW5lIEVNSUZfUkVHX1RBX0xMX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgRU1JRl9SRUdfRVJSX0xMX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19FUlJfTExfTUFTSwkJCSgxIDw8IDApCisKKy8qIElSUVNUQVRVU19TWVMgKi8KKworLyogSVJRU1RBVFVTX0xMICovCisKKy8qIElSUUVOQUJMRV9TRVRfU1lTICovCisjZGVmaW5lIEVNSUZfUkVHX0VOX0ROVl9TWVNfU0hJRlQJCQkyCisjZGVmaW5lIEVNSUZfUkVHX0VOX0ROVl9TWVNfTUFTSwkJCSgxIDw8IDIpCisjZGVmaW5lIEVNSUZfUkVHX0VOX1RBX1NZU19TSElGVAkJCTEKKyNkZWZpbmUgRU1JRl9SRUdfRU5fVEFfU1lTX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBFTUlGX1JFR19FTl9FUlJfU1lTX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19FTl9FUlJfU1lTX01BU0sJCQkoMSA8PCAwKQorCisvKiBJUlFFTkFCTEVfU0VUX0xMICovCisjZGVmaW5lIEVNSUZfUkVHX0VOX0ROVl9MTF9TSElGVAkJCTIKKyNkZWZpbmUgRU1JRl9SRUdfRU5fRE5WX0xMX01BU0sJCQkoMSA8PCAyKQorI2RlZmluZSBFTUlGX1JFR19FTl9UQV9MTF9TSElGVAkJCTEKKyNkZWZpbmUgRU1JRl9SRUdfRU5fVEFfTExfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIEVNSUZfUkVHX0VOX0VSUl9MTF9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfRU5fRVJSX0xMX01BU0sJCQkoMSA8PCAwKQorCisvKiBJUlFFTkFCTEVfQ0xSX1NZUyAqLworCisvKiBJUlFFTkFCTEVfQ0xSX0xMICovCisKKy8qIFpRX0NPTkZJRyAqLworI2RlZmluZSBFTUlGX1JFR19aUV9DUzFFTl9TSElGVAkJCTMxCisjZGVmaW5lIEVNSUZfUkVHX1pRX0NTMUVOX01BU0sJCQkoMSA8PCAzMSkKKyNkZWZpbmUgRU1JRl9SRUdfWlFfQ1MwRU5fU0hJRlQJCQkzMAorI2RlZmluZSBFTUlGX1JFR19aUV9DUzBFTl9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX1pRX0RVQUxDQUxFTl9TSElGVAkJCTI5CisjZGVmaW5lIEVNSUZfUkVHX1pRX0RVQUxDQUxFTl9NQVNLCQkJKDEgPDwgMjkpCisjZGVmaW5lIEVNSUZfUkVHX1pRX1NGRVhJVEVOX1NISUZUCQkJMjgKKyNkZWZpbmUgRU1JRl9SRUdfWlFfU0ZFWElURU5fTUFTSwkJCSgxIDw8IDI4KQorI2RlZmluZSBFTUlGX1JFR19aUV9aUUlOSVRfTVVMVF9TSElGVAkJMTgKKyNkZWZpbmUgRU1JRl9SRUdfWlFfWlFJTklUX01VTFRfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgRU1JRl9SRUdfWlFfWlFDTF9NVUxUX1NISUZUCQkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfWlFfWlFDTF9NVUxUX01BU0sJCQkoMHgzIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19aUV9SRUZJTlRFUlZBTF9TSElGVAkJMAorI2RlZmluZSBFTUlGX1JFR19aUV9SRUZJTlRFUlZBTF9NQVNLCQkoMHhmZmZmIDw8IDApCisKKy8qIFRFTVBfQUxFUlRfQ09ORklHICovCisjZGVmaW5lIEVNSUZfUkVHX1RBX0NTMUVOX1NISUZUCQkJMzEKKyNkZWZpbmUgRU1JRl9SRUdfVEFfQ1MxRU5fTUFTSwkJCSgxIDw8IDMxKQorI2RlZmluZSBFTUlGX1JFR19UQV9DUzBFTl9TSElGVAkJCTMwCisjZGVmaW5lIEVNSUZfUkVHX1RBX0NTMEVOX01BU0sJCQkoMSA8PCAzMCkKKyNkZWZpbmUgRU1JRl9SRUdfVEFfU0ZFWElURU5fU0hJRlQJCQkyOAorI2RlZmluZSBFTUlGX1JFR19UQV9TRkVYSVRFTl9NQVNLCQkJKDEgPDwgMjgpCisjZGVmaW5lIEVNSUZfUkVHX1RBX0RFVldEVF9TSElGVAkJCTI2CisjZGVmaW5lIEVNSUZfUkVHX1RBX0RFVldEVF9NQVNLCQkJKDB4MyA8PCAyNikKKyNkZWZpbmUgRU1JRl9SRUdfVEFfREVWQ05UX1NISUZUCQkJMjQKKyNkZWZpbmUgRU1JRl9SRUdfVEFfREVWQ05UX01BU0sJCQkoMHgzIDw8IDI0KQorI2RlZmluZSBFTUlGX1JFR19UQV9SRUZJTlRFUlZBTF9TSElGVAkJMAorI2RlZmluZSBFTUlGX1JFR19UQV9SRUZJTlRFUlZBTF9NQVNLCQkoMHgzZmZmZmYgPDwgMCkKKworLyogT0NQX0VSUl9MT0cgKi8KKyNkZWZpbmUgRU1JRl9SRUdfTUFERFJTUEFDRV9TSElGVAkJCTE0CisjZGVmaW5lIEVNSUZfUkVHX01BRERSU1BBQ0VfTUFTSwkJCSgweDMgPDwgMTQpCisjZGVmaW5lIEVNSUZfUkVHX01CVVJTVFNFUV9TSElGVAkJCTExCisjZGVmaW5lIEVNSUZfUkVHX01CVVJTVFNFUV9NQVNLCQkJKDB4NyA8PCAxMSkKKyNkZWZpbmUgRU1JRl9SRUdfTUNNRF9TSElGVAkJCQk4CisjZGVmaW5lIEVNSUZfUkVHX01DTURfTUFTSwkJCQkoMHg3IDw8IDgpCisjZGVmaW5lIEVNSUZfUkVHX01DT05OSURfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX01DT05OSURfTUFTSwkJCSgweGZmIDw8IDApCisKKy8qIEREUl9QSFlfQ1RSTF8xICovCisjZGVmaW5lIEVNSUZfUkVHX0REUl9QSFlfQ1RSTF8xX1NISUZUCQk0CisjZGVmaW5lIEVNSUZfUkVHX0REUl9QSFlfQ1RSTF8xX01BU0sJCSgweGZmZmZmZmYgPDwgNCkKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9MQVRFTkNZX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19SRUFEX0xBVEVOQ1lfTUFTSwkJCSgweGYgPDwgMCkKKyNkZWZpbmUgRU1JRl9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX1NISUZUCQk0CisjZGVmaW5lIEVNSUZfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9NQVNLCQkoMHhGRiA8PCA0KQorI2RlZmluZSBFTUlGX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfU0hJRlQJMTIKKyNkZWZpbmUgRU1JRl9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX01BU0sJKDB4RkZGRkYgPDwgMTIpCisKKy8qIEREUl9QSFlfQ1RSTF8xX1NIRFcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfRERSX1BIWV9DVFJMXzFfU0hEV19TSElGVAkJNAorI2RlZmluZSBFTUlGX1JFR19ERFJfUEhZX0NUUkxfMV9TSERXX01BU0sJCSgweGZmZmZmZmYgPDwgNCkKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9MQVRFTkNZX1NIRFdfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9MQVRFTkNZX1NIRFdfTUFTSwkJKDB4ZiA8PCAwKQorI2RlZmluZSBFTUlGX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hEV19TSElGVAk0CisjZGVmaW5lIEVNSUZfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9TSERXX01BU0sJKDB4RkYgPDwgNCkKKyNkZWZpbmUgRU1JRl9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NIRFdfU0hJRlQgMTIKKyNkZWZpbmUgRU1JRl9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NIRFdfTUFTSwkoMHhGRkZGRiA8PCAxMikKKworLyogRERSX1BIWV9DVFJMXzIgKi8KKyNkZWZpbmUgRU1JRl9SRUdfRERSX1BIWV9DVFJMXzJfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfRERSX1BIWV9DVFJMXzJfTUFTSwkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogRE1NICovCisjZGVmaW5lIERNTV9CQVNFCQkJMHg0RTAwMDA0MAorCisvKiBNZW1vcnkgQWRhcHRlciAqLworI2RlZmluZSBNQV9CQVNFCQkJCTB4NDgyQUYwNDAKKworLyogRE1NX0xJU0FfTUFQICovCisjZGVmaW5lIEVNSUZfU1lTX0FERFJfU0hJRlQJCTI0CisjZGVmaW5lIEVNSUZfU1lTX0FERFJfTUFTSwkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIEVNSUZfU1lTX1NJWkVfU0hJRlQJCTIwCisjZGVmaW5lIEVNSUZfU1lTX1NJWkVfTUFTSwkJKDB4NyA8PCAyMCkKKyNkZWZpbmUgRU1JRl9TRFJDX0lOVExfU0hJRlQJMTgKKyNkZWZpbmUgRU1JRl9TRFJDX0lOVExfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgRU1JRl9TRFJDX0FERFJTUENfU0hJRlQJMTYKKyNkZWZpbmUgRU1JRl9TRFJDX0FERFJTUENfTUFTSwkoMHgzIDw8IDE2KQorI2RlZmluZSBFTUlGX1NEUkNfTUFQX1NISUZUCQk4CisjZGVmaW5lIEVNSUZfU0RSQ19NQVBfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBFTUlGX1NEUkNfQUREUl9TSElGVAkwCisjZGVmaW5lIEVNSUZfU0RSQ19BRERSX01BU0sJCSgweGZmIDw8IDApCisKKy8qIERNTV9MSVNBX01BUCBmaWVsZHMgKi8KKyNkZWZpbmUgRE1NX1NEUkNfTUFQX1VOTUFQUEVECQkwCisjZGVmaW5lIERNTV9TRFJDX01BUF9FTUlGMV9PTkxZCQkxCisjZGVmaW5lIERNTV9TRFJDX01BUF9FTUlGMl9PTkxZCQkyCisjZGVmaW5lIERNTV9TRFJDX01BUF9FTUlGMV9BTkRfRU1JRjIJMworCisjZGVmaW5lIERNTV9TRFJDX0lOVExfTk9ORQkJMAorI2RlZmluZSBETU1fU0RSQ19JTlRMXzEyOEIJCTEKKyNkZWZpbmUgRE1NX1NEUkNfSU5UTF8yNTZCCQkyCisjZGVmaW5lIERNTV9TRFJDX0lOVExfNTEyCQkzCisKKyNkZWZpbmUgRE1NX1NEUkNfQUREUl9TUENfU0RSQU0JCTAKKyNkZWZpbmUgRE1NX1NEUkNfQUREUl9TUENfTlZNCQkxCisjZGVmaW5lIERNTV9TRFJDX0FERFJfU1BDX0lOVkFMSUQJMgorCisjZGVmaW5lIERNTV9MSVNBX01BUF9JTlRFUkxFQVZFRF9CQVNFX1ZBTAkJKFwKKwkoRE1NX1NEUkNfTUFQX0VNSUYxX0FORF9FTUlGMiA8PCBFTUlGX1NEUkNfTUFQX1NISUZUKSB8XAorCShETU1fU0RSQ19BRERSX1NQQ19TRFJBTSA8PCBFTUlGX1NEUkNfQUREUlNQQ19TSElGVCkgfFwKKwkoRE1NX1NEUkNfSU5UTF8xMjhCIDw8IEVNSUZfU0RSQ19JTlRMX1NISUZUKSB8XAorCShDT05GSUdfU1lTX1NEUkFNX0JBU0UgPDwgRU1JRl9TWVNfQUREUl9TSElGVCkpCisKKyNkZWZpbmUgRE1NX0xJU0FfTUFQX0VNSUYxX09OTFlfQkFTRV9WQUwJKFwKKwkoRE1NX1NEUkNfTUFQX0VNSUYxX09OTFkgPDwgRU1JRl9TRFJDX01BUF9TSElGVCl8XAorCShETU1fU0RSQ19BRERSX1NQQ19TRFJBTSA8PCBFTUlGX1NEUkNfQUREUlNQQ19TSElGVCl8XAorCShETU1fU0RSQ19JTlRMX05PTkUgPDwgRU1JRl9TRFJDX0lOVExfU0hJRlQpKQorCisjZGVmaW5lIERNTV9MSVNBX01BUF9FTUlGMl9PTkxZX0JBU0VfVkFMCShcCisJKERNTV9TRFJDX01BUF9FTUlGMl9PTkxZIDw8IEVNSUZfU0RSQ19NQVBfU0hJRlQpfFwKKwkoRE1NX1NEUkNfQUREUl9TUENfU0RSQU0gPDwgRU1JRl9TRFJDX0FERFJTUENfU0hJRlQpfFwKKwkoRE1NX1NEUkNfSU5UTF9OT05FIDw8IEVNSUZfU0RSQ19JTlRMX1NISUZUKSkKKworLyogVHJhcCBmb3IgaW52YWxpZCBUSUxFUiBQQVQgZW50cmllcyAqLworI2RlZmluZSBETU1fTElTQV9NQVBfMF9JTlZBTF9BRERSX1RSQVAJCShcCisJKDAgIDw8IEVNSUZfU0RSQ19BRERSX1NISUZUKSB8XAorCShETU1fU0RSQ19NQVBfRU1JRjFfT05MWSA8PCBFTUlGX1NEUkNfTUFQX1NISUZUKXxcCisJKERNTV9TRFJDX0FERFJfU1BDX0lOVkFMSUQgPDwgRU1JRl9TRFJDX0FERFJTUENfU0hJRlQpfFwKKwkoRE1NX1NEUkNfSU5UTF9OT05FIDw8IEVNSUZfU0RSQ19JTlRMX1NISUZUKXxcCisJKDB4RkYgPDwgRU1JRl9TWVNfQUREUl9TSElGVCkpCisKKworLyogUmVnIG1hcHBpbmcgc3RydWN0dXJlICovCitzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0IHsKKwl1MzIgZW1pZl9tb2RfaWRfcmV2OworCXUzMiBlbWlmX3N0YXR1czsKKwl1MzIgZW1pZl9zZHJhbV9jb25maWc7CisJdTMyIGVtaWZfbHBkZHIyX252bV9jb25maWc7CisJdTMyIGVtaWZfc2RyYW1fcmVmX2N0cmw7CisJdTMyIGVtaWZfc2RyYW1fcmVmX2N0cmxfc2hkdzsKKwl1MzIgZW1pZl9zZHJhbV90aW1fMTsKKwl1MzIgZW1pZl9zZHJhbV90aW1fMV9zaGR3OworCXUzMiBlbWlmX3NkcmFtX3RpbV8yOworCXUzMiBlbWlmX3NkcmFtX3RpbV8yX3NoZHc7CisJdTMyIGVtaWZfc2RyYW1fdGltXzM7CisJdTMyIGVtaWZfc2RyYW1fdGltXzNfc2hkdzsKKwl1MzIgZW1pZl9scGRkcjJfbnZtX3RpbTsKKwl1MzIgZW1pZl9scGRkcjJfbnZtX3RpbV9zaGR3OworCXUzMiBlbWlmX3B3cl9tZ210X2N0cmw7CisJdTMyIGVtaWZfcHdyX21nbXRfY3RybF9zaGR3OworCXUzMiBlbWlmX2xwZGRyMl9tb2RlX3JlZ19kYXRhOworCXUzMiBwYWRkaW5nMVsxXTsKKwl1MzIgZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YV9lczI7CisJdTMyIHBhZGRpbmcxMVsxXTsKKwl1MzIgZW1pZl9scGRkcjJfbW9kZV9yZWdfY2ZnOworCXUzMiBlbWlmX2wzX2NvbmZpZzsKKwl1MzIgZW1pZl9sM19jZmdfdmFsXzE7CisJdTMyIGVtaWZfbDNfY2ZnX3ZhbF8yOworCXUzMiBlbWlmX2lvZGZ0X3RsZ2M7CisJdTMyIHBhZGRpbmcyWzddOworCXUzMiBlbWlmX3BlcmZfY250XzE7CisJdTMyIGVtaWZfcGVyZl9jbnRfMjsKKwl1MzIgZW1pZl9wZXJmX2NudF9jZmc7CisJdTMyIGVtaWZfcGVyZl9jbnRfc2VsOworCXUzMiBlbWlmX3BlcmZfY250X3RpbTsKKwl1MzIgcGFkZGluZzM7CisJdTMyIGVtaWZfcmVhZF9pZGxlY3RybDsKKwl1MzIgZW1pZl9yZWFkX2lkbGVjdHJsX3NoZHc7CisJdTMyIHBhZGRpbmc0OworCXUzMiBlbWlmX2lycXN0YXR1c19yYXdfc3lzOworCXUzMiBlbWlmX2lycXN0YXR1c19yYXdfbGw7CisJdTMyIGVtaWZfaXJxc3RhdHVzX3N5czsKKwl1MzIgZW1pZl9pcnFzdGF0dXNfbGw7CisJdTMyIGVtaWZfaXJxZW5hYmxlX3NldF9zeXM7CisJdTMyIGVtaWZfaXJxZW5hYmxlX3NldF9sbDsKKwl1MzIgZW1pZl9pcnFlbmFibGVfY2xyX3N5czsKKwl1MzIgZW1pZl9pcnFlbmFibGVfY2xyX2xsOworCXUzMiBwYWRkaW5nNTsKKwl1MzIgZW1pZl96cV9jb25maWc7CisJdTMyIGVtaWZfdGVtcF9hbGVydF9jb25maWc7CisJdTMyIGVtaWZfbDNfZXJyX2xvZzsKKwl1MzIgcGFkZGluZzZbNF07CisJdTMyIGVtaWZfZGRyX3BoeV9jdHJsXzE7CisJdTMyIGVtaWZfZGRyX3BoeV9jdHJsXzFfc2hkdzsKKwl1MzIgZW1pZl9kZHJfcGh5X2N0cmxfMjsKK307CisKK3N0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyB7CisJdTMyIGRtbV9saXNhX21hcF8wOworCXUzMiBkbW1fbGlzYV9tYXBfMTsKKwl1MzIgZG1tX2xpc2FfbWFwXzI7CisJdTMyIGRtbV9saXNhX21hcF8zOworfTsKKworI2RlZmluZSBDUzAJMAorI2RlZmluZSBDUzEJMQorLyogVGhlIG1heGltdW0gZnJlcXVlbmN5IGF0IHdoaWNoIHRoZSBMUEREUjIgaW50ZXJmYWNlIGNhbiBvcGVyYXRlIGluIEh6Ki8KKyNkZWZpbmUgTUFYX0xQRERSMl9GUkVRCTQwMDAwMDAwMAkvKiA0MDAgTUh6ICovCisKKy8qCisgKiBUaGUgcGVyaW9kIG9mIEREUiBjbGsgaXMgcmVwcmVzZW50ZWQgYXMgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBmb3IKKyAqIGJldHRlciBhY2N1cmFjeSBpbiBpbnRlZ2VyIGJhc2VkIGNhbGN1bGF0aW9ucy4gSG93ZXZlciwgaWYgdGhlIG51bWVyYXRvcgorICogYW5kIGRlbm9taW5hdG9yIGFyZSB2ZXJ5IGh1Z2UgdGhlcmUgbWF5IGJlIGNoYW5jZXMgb2Ygb3ZlcmZsb3cgaW4KKyAqIGNhbGN1bGF0aW9ucy4gU28sIGFzIGEgdHJhZGUtb2ZmIGtlZXAgZGVub21pbmF0b3IoYW5kIGNvbnNlcXVlbnRseQorICogbnVtZXJhdG9yKSB3aXRoaW4gYSBsaW1pdCBzYWNyaWZpY2luZyBzb21lIGFjY3VyYWN5IC0gYnV0IG5vdCBtdWNoCisgKiBJZiBkZW5vbWluYXRvciBhbmQgbnVtZXJhdG9yIGFyZSBhbHJlYWR5IHNtYWxsIChzdWNoIGFzIGF0IDQwMCBNSHopCisgKiBubyBhZGp1c3RtZW50IGlzIG5lZWRlZAorICovCisjZGVmaW5lIEVNSUZfUEVSSU9EX0RFTl9MSU1JVAkxMDAwCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgZGlmZmVyZW50IGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSBFTUlGIGRyaXZlcgorICogRGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHBvaW50ZXIgYXJyYXkgZm9yIHJlZ2lzdGVyCisgKiBjYWNoZQorICovCisjZGVmaW5lIEVNSUZfTUFYX05VTV9GUkVRVUVOQ0lFUwk2CisvKgorICogSW5kaWNlcyBpbnRvIHRoZSBBZGRyZXNzaW5nIFRhYmxlIGFycmF5LgorICogT25lIGVudHJ5IGVhY2ggZm9yIGFsbCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGRldmljZXMgd2l0aCBkaWZmZXJlbnQKKyAqIGFkZHJlc3Npbmcgc2NoZW1lcworICovCisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg2NE0JMAorI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMTI4TQkxCisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgyNTZNCTIKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDUxMk0JMworI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMUdTNAk0CisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgyR1M0CTUKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDRHCTYKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDhHCTcKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDFHUzIJOAorI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMkdTMgk5CisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVhNQVgJMTAKKworLyogTnVtYmVyIG9mIFJvdyBiaXRzICovCisjZGVmaW5lIFJPV185ICAwCisjZGVmaW5lIFJPV18xMCAxCisjZGVmaW5lIFJPV18xMSAyCisjZGVmaW5lIFJPV18xMiAzCisjZGVmaW5lIFJPV18xMyA0CisjZGVmaW5lIFJPV18xNCA1CisjZGVmaW5lIFJPV18xNSA2CisjZGVmaW5lIFJPV18xNiA3CisKKy8qIE51bWJlciBvZiBDb2x1bW4gYml0cyAqLworI2RlZmluZSBDT0xfOCAgIDAKKyNkZWZpbmUgQ09MXzkgICAxCisjZGVmaW5lIENPTF8xMCAgMgorI2RlZmluZSBDT0xfMTEgIDMKKyNkZWZpbmUgQ09MXzcgICA0IC8qTm90IHN1cHBvcnRlZCBieSBPTUFQIGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MgKi8KKworLyogTnVtYmVyIG9mIEJhbmtzKi8KKyNkZWZpbmUgQkFOS1MxIDAKKyNkZWZpbmUgQkFOS1MyIDEKKyNkZWZpbmUgQkFOS1M0IDIKKyNkZWZpbmUgQkFOS1M4IDMKKworLyogUmVmcmVzaCByYXRlIGluIG1pY3JvIHNlY29uZHMgeCAxMCAqLworI2RlZmluZSBUX1JFRklfMTVfNgkxNTYKKyNkZWZpbmUgVF9SRUZJXzdfOAk3OAorI2RlZmluZSBUX1JFRklfM185CTM5CisKKyNkZWZpbmUgRUJBTktfQ1MxX0RJUwkwCisjZGVmaW5lIEVCQU5LX0NTMV9FTgkxCisKKy8qIFJlYWQgTGF0ZW5jeSB1c2VkIGJ5IHRoZSBkZXZpY2UgYXQgcmVzZXQgKi8KKyNkZWZpbmUgUkxfQk9PVAkJMworLyogUmVhZCBMYXRlbmN5IGZvciB0aGUgaGlnaGVzdCBmcmVxdWVuY3kgeW91IHdhbnQgdG8gdXNlICovCisjaWZkZWYgQ09ORklHX09NQVA1NFhYCisjZGVmaW5lIFJMX0ZJTkFMCTgKKyNlbHNlCisjZGVmaW5lIFJMX0ZJTkFMCTYKKyNlbmRpZgorCisKKy8qIEludGVybGVhdmluZyBwb2xpY2llcyBhdCBFTUlGIGxldmVsLSBiZXR3ZWVuIGJhbmtzIGFuZCBDaGlwIFNlbGVjdHMgKi8KKyNkZWZpbmUgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX01BWF9JTlRFUkxFQVZJTkcJMAorI2RlZmluZSBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1lfTk9fQkFOS19JTlRFUkxFQVZJTkcJMworCisvKgorICogSW50ZXJsZWF2aW5nIHBvbGljeSB0byBiZSB1c2VkCisgKiBDdXJyZW50bHkgc2V0IHRvIE1BWCBpbnRlcmxlYXZpbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZQorICovCisjZGVmaW5lIEVNSUZfSU5URVJMRUFWSU5HX1BPTElDWSBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1lfTUFYX0lOVEVSTEVBVklORworCisvKiBTdGF0ZSBvZiB0aGUgY29yZSB2b2x0YWdlOgorICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHNvbWUgcGFyYW1ldGVycyBzdWNoIGFzIHJlYWQgaWRsZSBjb250cm9sIGFuZAorICogWlEgY2FsaWJyYXRpb24gdGltaW5ncy4gVGltaW5ncyBhcmUgbXVjaCBzdHJpY3RlciB3aGVuIHZvbHRhZ2UgcmFtcAorICogaXMgaGFwcGVuaW5nIGNvbXBhcmVkIHRvIHdoZW4gdGhlIHZvbHRhZ2UgaXMgc3RhYmxlLgorICogV2UgbmVlZCB0byBjYWxjdWxhdGUgdHdvIHNldHMgb2YgdmFsdWVzIGZvciB0aGVzZSBwYXJhbWV0ZXJzIGFuZCB1c2UKKyAqIHRoZW0gYWNjb3JkaW5nbHkKKyAqLworI2RlZmluZSBMUEREUjJfVk9MVEFHRV9TVEFCTEUJMAorI2RlZmluZSBMUEREUjJfVk9MVEFHRV9SQU1QSU5HCTEKKworLyogTGVuZ3RoIG9mIHRoZSBmb3JjZWQgcmVhZCBpZGxlIHBlcmlvZCBpbiB0ZXJtcyBvZiBjeWNsZXMgKi8KKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9WQUwJNQorCisvKiBJbnRlcnZhbCBiZXR3ZWVuIGZvcmNlZCAncmVhZCBpZGxlcycgKi8KKy8qIFRvIGJlIHVzZWQgd2hlbiB2b2x0YWdlIGlzIGNoYW5nZWQgZm9yIERQUy9EVkZTIC0gMXVzICovCisjZGVmaW5lIFJFQURfSURMRV9JTlRFUlZBTF9EVkZTCQkoMSoxMDAwKQorLyoKKyAqIFRvIGJlIHVzZWQgd2hlbiB2b2x0YWdlIGlzIG5vdCBzY2FsZWQgZXhjZXB0IGJ5IFNtYXJ0IFJlZmxleAorICogNTB1cyAtIG9yIG1heGltdW0gdmFsdWUgd2lsbCBkbworICovCisjZGVmaW5lIFJFQURfSURMRV9JTlRFUlZBTF9OT1JNQUwJKDUwKjEwMDApCisKKworLyoKKyAqIFVubGVzcyB2b2x0YWdlIGlzIGNoYW5naW5nIGR1ZSB0byBEVkZTIG9uZSBaUUNTIGNvbW1hbmQgZXZlcnkgNTBtcyBzaG91bGQKKyAqIGJlIGVub3VnaC4gVGhpcyBzaG91bGUgYmUgZW5vdWdoIGFsc28gaW4gdGhlIGNhc2Ugd2hlbiB2b2x0YWdlIGlzIGNoYW5naW5nCisgKiBkdWUgdG8gc21hcnQtcmVmbGV4LgorICovCisjZGVmaW5lIEVNSUZfWlFDU19JTlRFUlZBTF9OT1JNQUxfSU5fVVMJKDUwKjEwMDApCisvKgorICogSWYgdm9sdGFnZSBpcyBjaGFuZ2luZyBkdWUgdG8gRFZGUyBaUUNTIHNob3VsZCBiZSBwZXJmb3JtZWQgbW9yZQorICogb2Z0ZW4oZXZlcnkgNTB1cykKKyAqLworI2RlZmluZSBFTUlGX1pRQ1NfSU5URVJWQUxfRFZGU19JTl9VUwk1MAorCisvKiBUaGUgaW50ZXJ2YWwgYmV0d2VlbiBaUUNMIGNvbW1hbmRzIGFzIGEgbXVsdGlwbGUgb2YgWlFDUyBpbnRlcnZhbCAqLworI2RlZmluZSBSRUdfWlFfWlFDTF9NVUxUCQk0CisvKiBUaGUgaW50ZXJ2YWwgYmV0d2VlbiBaUUlOSVQgY29tbWFuZHMgYXMgYSBtdWx0aXBsZSBvZiBaUUNMIGludGVydmFsICovCisjZGVmaW5lIFJFR19aUV9aUUlOSVRfTVVMVAkJMworLyogRW5hYmxlIFpRIENhbGlicmF0aW9uIG9uIGV4aXRpbmcgU2VsZi1yZWZyZXNoICovCisjZGVmaW5lIFJFR19aUV9TRkVYSVRFTl9FTkFCTEUJCTEKKy8qCisgKiBaUSBDYWxpYnJhdGlvbiBzaW11bHRhbmVvdXNseSBvbiBib3RoIGNoaXAtc2VsZWN0czoKKyAqIE5lZWRzIG9uZSBjYWxpYnJhdGlvbiByZXNpc3RvciBwZXIgQ1MKKyAqIE5vbmUgb2YgdGhlIGJvYXJkcyB0aGF0IHdlIGtub3cgb2YgaGF2ZSB0aGlzIGNhcGFiaWxpdHkKKyAqIFNvIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAqLworI2RlZmluZSBSRUdfWlFfRFVBTENBTEVOX0RJU0FCTEUJMAorLyoKKyAqIEVuYWJsZSBaUSBDYWxpYnJhdGlvbiBieSBkZWZhdWx0IG9uIENTMC4gSWYgd2UgYXJlIGFza2VkIHRvIHByb2dyYW0KKyAqIHRoZSBFTUlGIHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIGNvbm5lY3RlZCB0byBDUzAgZm9yIHN1cmUKKyAqLworI2RlZmluZSBSRUdfWlFfQ1MwRU5fRU5BQkxFCQkxCisKKy8qIEVNSUZfUFdSX01HTVRfQ1RSTCByZWdpc3RlciAqLworLyogTG93IHBvd2VyIG1vZGVzICovCisjZGVmaW5lIExQX01PREVfRElTQUJMRQkJMAorI2RlZmluZSBMUF9NT0RFX0NMT0NLX1NUT1AJMQorI2RlZmluZSBMUF9NT0RFX1NFTEZfUkVGUkVTSAkyCisjZGVmaW5lIExQX01PREVfUFdSX0ROCQkzCisKKy8qIFJFR19EUERfRU4gKi8KKyNkZWZpbmUgRFBEX0RJU0FCTEUJMAorI2RlZmluZSBEUERfRU5BQkxFCTEKKworLyogTWF4aW11bSBkZWxheSBiZWZvcmUgTG93IFBvd2VyIE1vZGVzICovCisjZGVmaW5lIFJFR19DU19USU0JCTB4RgorI2RlZmluZSBSRUdfU1JfVElNCQkweEYKKyNkZWZpbmUgUkVHX1BEX1RJTQkJMHhGCisKKy8qIEVNSUZfUFdSX01HTVRfQ1RSTCByZWdpc3RlciAqLworI2RlZmluZSBFTUlGX1BXUl9NR01UX0NUUkwgKFwKKwkoKFJFR19DU19USU0gPDwgRU1JRl9SRUdfQ1NfVElNX1NISUZUKSAmIEVNSUZfUkVHX0NTX1RJTV9NQVNLKXxcCisJKChSRUdfU1JfVElNIDw8IEVNSUZfUkVHX1NSX1RJTV9TSElGVCkgJiBFTUlGX1JFR19TUl9USU1fTUFTSyl8XAorCSgoUkVHX1BEX1RJTSA8PCBFTUlGX1JFR19QRF9USU1fU0hJRlQpICYgRU1JRl9SRUdfUERfVElNX01BU0spfFwKKwkoKFJFR19QRF9USU0gPDwgRU1JRl9SRUdfUERfVElNX1NISUZUKSAmIEVNSUZfUkVHX1BEX1RJTV9NQVNLKXxcCisJKChMUF9NT0RFX0RJU0FCTEUgPDwgRU1JRl9SRUdfTFBfTU9ERV9TSElGVClcCisJCQkmIEVNSUZfUkVHX0xQX01PREVfTUFTSykgfFwKKwkoKERQRF9ESVNBQkxFIDw8IEVNSUZfUkVHX0RQRF9FTl9TSElGVClcCisJCQkmIEVNSUZfUkVHX0RQRF9FTl9NQVNLKSlcCisKKyNkZWZpbmUgRU1JRl9QV1JfTUdNVF9DVFJMX1NIRFcgKFwKKwkoKFJFR19DU19USU0gPDwgRU1JRl9SRUdfQ1NfVElNX1NIRFdfU0hJRlQpXAorCQkJJiBFTUlGX1JFR19DU19USU1fU0hEV19NQVNLKSB8XAorCSgoUkVHX1NSX1RJTSA8PCBFTUlGX1JFR19TUl9USU1fU0hEV19TSElGVClcCisJCQkmIEVNSUZfUkVHX1NSX1RJTV9TSERXX01BU0spIHxcCisJKChSRUdfUERfVElNIDw8IEVNSUZfUkVHX1BEX1RJTV9TSERXX1NISUZUKVwKKwkJCSYgRU1JRl9SRUdfUERfVElNX1NIRFdfTUFTSykgfFwKKwkoKFJFR19QRF9USU0gPDwgRU1JRl9SRUdfUERfVElNX1NIRFdfU0hJRlQpXAorCQkJJiBFTUlGX1JFR19QRF9USU1fU0hEV19NQVNLKSkKKworLyogRU1JRl9MM19DT05GSUcgcmVnaXN0ZXIgdmFsdWUgKi8KKyNkZWZpbmUgRU1JRl9MM19DT05GSUdfVkFMX1NZU18xMF9MTF8wCTB4MEEwMDAwRkYKKyNkZWZpbmUgRU1JRl9MM19DT05GSUdfVkFMX1NZU18xMF9NUFVfM19MTF8wCTB4MEEzMDAwMDAKKyNkZWZpbmUgRU1JRl9MM19DT05GSUdfVkFMX1NZU18xMF9NUFVfNV9MTF8wCTB4MEEzMDAwMDAKKworLyoKKyAqIFZhbHVlIG9mIGJpdHMgMTI6MzEgb2YgRERSX1BIWV9DVFJMXzEgcmVnaXN0ZXI6CisgKiBBbGwgdGhlc2UgZmllbGRzIGhhdmUgbWFnaWMgdmFsdWVzIGRlcGVuZGVudCBvbiBmcmVxdWVuY3kgYW5kCisgKiBkZXRlcm1pbmVkIGJ5IFBIWSBhbmQgRExMIGludGVncmF0aW9uIHdpdGggRU1JRi4gU2V0dGluZyB0aGUgbWFnaWMKKyAqIHZhbHVlcyBzdWdnZXN0ZWQgYnkgaHcgdGVhbS4KKyAqLworI2RlZmluZSBFTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMCQkJMHgwNDlGRgorI2RlZmluZSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF80MDBfTUhaCQkJMHg0MQorI2RlZmluZSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8yMDBfTUhaCQkJMHg4MAorI2RlZmluZSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8xMDBfTUhaX0FORF9MRVNTCTB4RkYKKworLyoKKyogTVIxIHZhbHVlOgorKiBCdXJzdCBsZW5ndGgJOiA4CisqIEJ1cnN0IHR5cGUJOiBzZXF1ZW50aWFsCisqIFdyYXAJCTogZW5hYmxlZAorKiBuV1IJCTogMyhkZWZhdWx0KS4gRU1JRiBkb2VzIG5vdCBkbyBwcmUtY2hhcmdlLgorKgkJOiBTbyBuV1IgaXMgZG9uJ3QgY2FyZQorKi8KKyNkZWZpbmUgTVIxX0JMXzhfQlRfU0VRX1dSQVBfRU5fTldSXzMJMHgyMworCisvKiBNUjIgKi8KKyNkZWZpbmUgTVIyX1JMM19XTDEJCQkxCisjZGVmaW5lIE1SMl9STDRfV0wyCQkJMgorI2RlZmluZSBNUjJfUkw1X1dMMgkJCTMKKyNkZWZpbmUgTVIyX1JMNl9XTDMJCQk0CisKKy8qIE1SMTA6IFpRIGNhbGlicmF0aW9uIGNvZGVzICovCisjZGVmaW5lIE1SMTBfWlFfWlFDUwkJMHg1NgorI2RlZmluZSBNUjEwX1pRX1pRQ0wJCTB4QUIKKyNkZWZpbmUgTVIxMF9aUV9aUUlOSVQJCTB4RkYKKyNkZWZpbmUgTVIxMF9aUV9aUVJFU0VUCQkweEMzCisKKy8qIFRFTVBfQUxFUlRfQ09ORklHICovCisjZGVmaW5lIFRFTVBfQUxFUlRfUE9MTF9JTlRFUlZBTF9NUwkzNjAgLyogZm9yIHRlbXAgZ3JhZGllbnQgLSA1IEMvcyAqLworI2RlZmluZSBURU1QX0FMRVJUX0NPTkZJR19ERVZDVF8xCTAKKyNkZWZpbmUgVEVNUF9BTEVSVF9DT05GSUdfREVWV0RUXzMyCTIKKworLyogTVIxNiB2YWx1ZTogcmVmcmVzaCBmdWxsIGFycmF5KG5vIHBhcnRpYWwgYXJyYXkgc2VsZiByZWZyZXNoKSAqLworI2RlZmluZSBNUjE2X1JFRl9GVUxMX0FSUkFZCTAKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgd2Uga2VlcCBpbiBvdXIgYXJyYXkgb2YgdGltaW5nIHRhYmxlcworICogV2UgbmVlZCBub3Qga2VlcCBhbGwgdGhlIHNwZWVkIGJpbnMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKKyAqIFdlIG5lZWQgdG8ga2VlcCB0aW1pbmcgdGFibGVzIGZvciBvbmx5IHRoZSBzcGVlZCBiaW5zIHRoYXQgd2UKKyAqIGFyZSBpbnRlcmVzdGVkIGluCisgKi8KKyNkZWZpbmUgTUFYX05VTV9TUEVFREJJTlMJNAorCisvKiBMUEREUjIgRGVuc2l0aWVzICovCisjZGVmaW5lIExQRERSMl9ERU5TSVRZXzY0TWIJMAorI2RlZmluZSBMUEREUjJfREVOU0lUWV8xMjhNYgkxCisjZGVmaW5lIExQRERSMl9ERU5TSVRZXzI1Nk1iCTIKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfNTEyTWIJMworI2RlZmluZSBMUEREUjJfREVOU0lUWV8xR2IJNAorI2RlZmluZSBMUEREUjJfREVOU0lUWV8yR2IJNQorI2RlZmluZSBMUEREUjJfREVOU0lUWV80R2IJNgorI2RlZmluZSBMUEREUjJfREVOU0lUWV84R2IJNworI2RlZmluZSBMUEREUjJfREVOU0lUWV8xNkdiCTgKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMzJHYgk5CisKKy8qIExQRERSMiB0eXBlICovCisjZGVmaW5lCUxQRERSMl9UWVBFX1M0CTAKKyNkZWZpbmUJTFBERFIyX1RZUEVfUzIJMQorI2RlZmluZQlMUEREUjJfVFlQRV9OVk0JMgorCisvKiBMUEREUjIgSU8gd2lkdGggKi8KKyNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzMyCTAKKyNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzE2CTEKKyNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzgJMgorCisvKiBNb2RlIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgTFBERFIyX01SMAkwCisjZGVmaW5lIExQRERSMl9NUjEJMQorI2RlZmluZSBMUEREUjJfTVIyCTIKKyNkZWZpbmUgTFBERFIyX01SMwkzCisjZGVmaW5lIExQRERSMl9NUjQJNAorI2RlZmluZSBMUEREUjJfTVI1CTUKKyNkZWZpbmUgTFBERFIyX01SNgk2CisjZGVmaW5lIExQRERSMl9NUjcJNworI2RlZmluZSBMUEREUjJfTVI4CTgKKyNkZWZpbmUgTFBERFIyX01SOQk5CisjZGVmaW5lIExQRERSMl9NUjEwCTEwCisjZGVmaW5lIExQRERSMl9NUjExCTExCisjZGVmaW5lIExQRERSMl9NUjE2CTE2CisjZGVmaW5lIExQRERSMl9NUjE3CTE3CisjZGVmaW5lIExQRERSMl9NUjE4CTE4CisKKy8qIE1SMCAqLworI2RlZmluZSBMUEREUjJfTVIwX0RBSV9TSElGVAkwCisjZGVmaW5lIExQRERSMl9NUjBfREFJX01BU0sJMQorI2RlZmluZSBMUEREUjJfTVIwX0RJX1NISUZUCTEKKyNkZWZpbmUgTFBERFIyX01SMF9ESV9NQVNLCSgxIDw8IDEpCisjZGVmaW5lIExQRERSMl9NUjBfRE5WSV9TSElGVAkyCisjZGVmaW5lIExQRERSMl9NUjBfRE5WSV9NQVNLCSgxIDw8IDIpCisKKy8qIE1SNCAqLworI2RlZmluZSBNUjRfU0RSQU1fUkVGX1JBVEVfU0hJRlQJMAorI2RlZmluZSBNUjRfU0RSQU1fUkVGX1JBVEVfTUFTSwkJNworI2RlZmluZSBNUjRfVFVGX1NISUZUCQkJNworI2RlZmluZSBNUjRfVFVGX01BU0sJCQkoMSA8PCA3KQorCisvKiBNUjQgU0RSQU0gUmVmcmVzaCBSYXRlIGZpZWxkIHZhbHVlcyAqLworI2RlZmluZSBTRFJBTV9URU1QX0xFU1NfTE9XX1NIVVRET1dOCQkJMHgwCisjZGVmaW5lIFNEUkFNX1RFTVBfTEVTU180WF9SRUZSRVNIX0FORF9USU1JTkdTCQkweDEKKyNkZWZpbmUgU0RSQU1fVEVNUF9MRVNTXzJYX1JFRlJFU0hfQU5EX1RJTUlOR1MJCTB4MgorI2RlZmluZSBTRFJBTV9URU1QX05PTUlOQUwJCQkJMHgzCisjZGVmaW5lIFNEUkFNX1RFTVBfUkVTRVJWRURfNAkJCQkweDQKKyNkZWZpbmUgU0RSQU1fVEVNUF9ISUdIX0RFUkFURV9SRUZSRVNICQkJMHg1CisjZGVmaW5lIFNEUkFNX1RFTVBfSElHSF9ERVJBVEVfUkVGUkVTSF9BTkRfVElNSU5HUwkweDYKKyNkZWZpbmUgU0RSQU1fVEVNUF9WRVJZX0hJR0hfU0hVVERPV04JCQkweDcKKworI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NBTVNVTkcJMQorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1FJTU9OREEJMgorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VMUElEQQkzCisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfRVRST04JNAorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05BTllBCTUKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9IWU5JWAk2CisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfTU9TRUwJNworI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1dJTkJPTkQJOAorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VTTVQJOQorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NQQU5TSU9OIDExCisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfU1NUCQkxMgorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1pNT1MJMTMKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9JTlRFTAkxNAorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05VTU9OWVgJMjU0CisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfTUlDUk9OCTI1NQorCisvKiBNUjggcmVnaXN0ZXIgZmllbGRzICovCisjZGVmaW5lIE1SOF9UWVBFX1NISUZUCQkweDAKKyNkZWZpbmUgTVI4X1RZUEVfTUFTSwkJMHgzCisjZGVmaW5lIE1SOF9ERU5TSVRZX1NISUZUCTB4MgorI2RlZmluZSBNUjhfREVOU0lUWV9NQVNLCSgweEYgPDwgMHgyKQorI2RlZmluZSBNUjhfSU9fV0lEVEhfU0hJRlQJMHg2CisjZGVmaW5lIE1SOF9JT19XSURUSF9NQVNLCSgweDMgPDwgMHg2KQorCitzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgeworCXU4CW51bV9iYW5rczsKKwl1OAl0X1JFRklfdXNfeDEwOworCXU4CXJvd19zelsyXTsgLyogT25lIGVudHJ5IGVhY2ggZm9yIHgzMiBhbmQgeDE2ICovCisJdTgJY29sX3N6WzJdOyAvKiBPbmUgZW50cnkgZWFjaCBmb3IgeDMyIGFuZCB4MTYgKi8KK307CisKKy8qIFN0cnVjdHVyZSBmb3IgdGltaW5ncyBmcm9tIHRoZSBERFIgZGF0YXNoZWV0ICovCitzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgeworCXUzMiBtYXhfZnJlcTsKKwl1OCBSTDsKKwl1OCB0UlBhYjsKKwl1OCB0UkNEOworCXU4IHRXUjsKKwl1OCB0UkFTbWluOworCXU4IHRSUkQ7CisJdTggdFdUUngyOworCXU4IHRYU1I7CisJdTggdFhQeDI7CisJdTggdFJGQ2FiOworCXU4IHRSVFB4MjsKKwl1OCB0Q0tFOworCXU4IHRDS0VTUjsKKwl1OCB0WlFDUzsKKwl1MzIgdFpRQ0w7CisJdTMyIHRaUUlOSVQ7CisJdTggdERRU0NLTUFYeDI7CisJdTggdFJBU21heDsKKwl1OCB0RkFXOworCit9OworCisvKgorICogTWluIHRDSyB2YWx1ZXMgZm9yIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnM6CisgKiBJZiB0aGUgY2FsY3VsYXRlZCBjbG9jayBjeWNsZXMgZm9yIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlciBpcworICogbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIG1pbiB0Q0sgdmFsdWUsIHdlIG5lZWQgdG8gc2V0IHRoZSBtaW4KKyAqIHRDSyB2YWx1ZS4gVGhpcyBtYXkgaGFwcGVuIGF0IGxvd2VyIGZyZXF1ZW5jaWVzLgorICovCitzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgeworCXUzMiB0Ukw7CisJdTMyIHRSUF9BQjsKKwl1MzIgdFJDRDsKKwl1MzIgdFdSOworCXUzMiB0UkFTX01JTjsKKwl1MzIgdFJSRDsKKwl1MzIgdFdUUjsKKwl1MzIgdFhQOworCXUzMiB0UlRQOworCXU4ICB0Q0tFOworCXUzMiB0Q0tFU1I7CisJdTMyIHRGQVc7Cit9OworCitzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIHsKKwl1OAl0eXBlOworCXU4CWRlbnNpdHk7CisJdTgJaW9fd2lkdGg7CisJdTgJbWFudWZhY3R1cmVyOworfTsKKworc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyB7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICoqYWNfdGltaW5nczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2s7Cit9OworCisvKiBEZXRhaWxzIG9mIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byBlYWNoIGNoaXAtc2VsZWN0IG9mIGFuIEVNSUYgaW5zdGFuY2UgKi8KK3N0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzIHsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlX2RldGFpbHM7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZV9kZXRhaWxzOworCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKmNzMF9kZXZpY2VfdGltaW5nczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICpjczFfZGV2aWNlX3RpbWluZ3M7Cit9OworCisvKgorICogU3RydWN0dXJlIGNvbnRhaW5pbmcgc2hhZG93IG9mIGltcG9ydGFudCByZWdpc3RlcnMgaW4gRU1JRgorICogVGhlIGNhbGN1bGF0aW9uIGZ1bmN0aW9uIGZpbGxzIGluIHRoaXMgc3RydWN0dXJlIHRvIGJlIGxhdGVyIHVzZWQgZm9yCisgKiBpbml0aWFsaXphdGlvbiBhbmQgRFZGUworICovCitzdHJ1Y3QgZW1pZl9yZWdzIHsKKwl1MzIgZnJlcTsKKwl1MzIgc2RyYW1fY29uZmlnX2luaXQ7CisJdTMyIHNkcmFtX2NvbmZpZzsKKwl1MzIgcmVmX2N0cmw7CisJdTMyIHNkcmFtX3RpbTE7CisJdTMyIHNkcmFtX3RpbTI7CisJdTMyIHNkcmFtX3RpbTM7CisJdTMyIHJlYWRfaWRsZV9jdHJsOworCXUzMiB6cV9jb25maWc7CisJdTMyIHRlbXBfYWxlcnRfY29uZmlnOworCXUzMiBlbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQ7CisJdTMyIGVtaWZfZGRyX3BoeV9jdGxyXzE7Cit9OworCisvKiBhc3NlcnQgbWFjcm9zICovCisjaWYgZGVmaW5lZChERUJVRykKKyNkZWZpbmUgZW1pZl9hc3NlcnQoYykJKHsgaWYgKCEoYykpIGZvciAoOzspOyB9KQorI2Vsc2UKKyNkZWZpbmUgZW1pZl9hc3NlcnQoYykJKHsgaWYgKDApIGhhbmcoKTsgfSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKK3ZvaWQgZW1pZl9nZXRfcmVnX2R1bXAodTMyIGVtaWZfbnIsIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKipyZWdzKTsKK3ZvaWQgZW1pZl9nZXRfZG1tX3JlZ3MoY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICoqZG1tX2xpc2FfcmVncyk7CisjZWxzZQorc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqZW1pZl9nZXRfZGV2aWNlX2RldGFpbHModTMyIGVtaWZfbnIsIHU4IGNzLAorCQkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqbHBkZHIyX2Rldl9kZXRhaWxzKTsKK3ZvaWQgZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3ModTMyIGVtaWZfbnIsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczBfZGV2aWNlX3RpbWluZ3MsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczFfZGV2aWNlX3RpbWluZ3MpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKK2V4dGVybiB1MzIgKmNvbnN0IFRfbnVtOworZXh0ZXJuIHUzMiAqY29uc3QgVF9kZW47CitleHRlcm4gdTMyICpjb25zdCBlbWlmX3NpemVzOworI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoLXR5cGVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoLXR5cGVzLmgKaW5kZXggMjU0OTA1MS4uMmQ1YzNiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC10eXBlcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaApAQCAtMTEwNCw2ICsxMTA0LDcgQEAKICNkZWZpbmUgTUFDSF9UWVBFX1RIQUxFU19BREMgICAgICAgICAgIDM0OTIKICNkZWZpbmUgTUFDSF9UWVBFX1VCSVNZU19QOURfRVZQICAgICAgIDM0OTMKICNkZWZpbmUgTUFDSF9UWVBFX0FUREdQMzE4ICAgICAgICAgICAgIDM0OTQKKyNkZWZpbmUgTUFDSF9UWVBFX09NQVA1X1NFVk0gICAgICAgICAgIDM3NzcKIAogI2lmZGVmIENPTkZJR19BUkNIX0VCU0ExMTAKICMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKQEAgLTE0MjA5LDYgKzE0MjEwLDE4IEBACiAjIGRlZmluZSBtYWNoaW5lX2lzX2F0ZGdwMzE4KCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NQUNIX09NQVA1X1NFVk0KKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUgICAgIF9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlICAgICBNQUNIX1RZUEVfT01BUDVfU0VWTQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19vbWFwNV9zZXZtKCkgICAgICAobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX09NQVA1X1NFVk0pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19vbWFwNV9zZXZtKCkgICAgICAoMCkKKyNlbmRpZgorCiAvKgogICogVGhlc2UgaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZAogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9vbWFwX2NvbW1vbi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vb21hcF9jb21tb24uaAppbmRleCAzZjJmMDA0Li5mMTU2MmVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9vbWFwX2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL29tYXBfY29tbW9uLmgKQEAgLTM3LDcgKzM3LDE2IEBACiB2b2lkIHByZWxvYWRlcl9jb25zb2xlX2luaXQodm9pZCk7CiAKIC8qIEJvb3QgZGV2aWNlICovCi0jaWZkZWYgQ09ORklHX09NQVA0NFhYIC8qIE9NQVA0ICovCisjaWZkZWYgQ09ORklHX09NQVA1NFhYCisjZGVmaW5lIEJPT1RfREVWSUNFX05PTkUgICAgICAgIDAKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfWElQICAgICAgICAgMQorI2RlZmluZSBCT09UX0RFVklDRV9YSVBXQUlUICAgICAyCisjZGVmaW5lIEJPT1RfREVWSUNFX05BTkQgICAgICAgIDMKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfT05FX05BTkQgICAgNAorI2RlZmluZSBCT09UX0RFVklDRV9NTUMxICAgICAgICA1CisjZGVmaW5lIEJPT1RfREVWSUNFX01NQzIgICAgICAgIDYKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfTU1DMwk3CisjZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQNDRYWCkgLyogT01BUDQgKi8KICNkZWZpbmUgQk9PVF9ERVZJQ0VfTk9ORQkwCiAjZGVmaW5lIEJPT1RfREVWSUNFX1hJUAkJMQogI2RlZmluZSBCT09UX0RFVklDRV9YSVBXQUlUCTIKQEAgLTcxLDEwICs4MCwxMCBAQAogCiBleHRlcm4gc3RydWN0IHNwbF9pbWFnZV9pbmZvIHNwbF9pbWFnZTsKIAorZXh0ZXJuIHUzMiogYm9vdF9wYXJhbXNfcHRyOwogdTMyIG9tYXBfYm9vdF9kZXZpY2Uodm9pZCk7CiB1MzIgb21hcF9ib290X21vZGUodm9pZCk7CiAKLQogLyogU1BMIGNvbW1vbiBmdW5jdGlvbiBzKi8KIHZvaWQgc3BsX3BhcnNlX2ltYWdlX2hlYWRlcihjb25zdCBzdHJ1Y3QgaW1hZ2VfaGVhZGVyICpoZWFkZXIpOwogdm9pZCBvbWFwX3Jldl9zdHJpbmcoY2hhciAqb21hcF9yZXZfc3RyaW5nKTsKQEAgLTg1LDQgKzk0LDIyIEBACiAvKiBNTUMgU1BMIGZ1bmN0aW9ucyAqLwogdm9pZCBzcGxfbW1jX2xvYWRfaW1hZ2Uodm9pZCk7CiAKKy8qCisgKiBzaWxpY29uIHJldmlzaW9ucy4KKyAqIE1vdmluZyB0aGlzIHRvIGNvbW1vbiwgc28gdGhhdCBtb3N0IG9mIGNvZGUgY2FuIGJlIG1vdmVkIHRvIGNvbW1vbiwKKyAqIGRpcmVjdG9yaWVzLgorICovCisKKy8qIG9tYXA0ICovCisjZGVmaW5lIE9NQVA0NDMwX1NJTElDT05fSURfSU5WQUxJRAkweEZGRkZGRkZGCisjZGVmaW5lIE9NQVA0NDMwX0VTMV8wCTB4NDQzMDAxMDAKKyNkZWZpbmUgT01BUDQ0MzBfRVMyXzAJMHg0NDMwMDIwMAorI2RlZmluZSBPTUFQNDQzMF9FUzJfMQkweDQ0MzAwMjEwCisjZGVmaW5lIE9NQVA0NDMwX0VTMl8yCTB4NDQzMDAyMjAKKyNkZWZpbmUgT01BUDQ0MzBfRVMyXzMJMHg0NDMwMDIzMAorI2RlZmluZSBPTUFQNDQ2MF9FUzFfMAkweDQ0NjAwMTAwCisKKy8qIG9tYXA1ICovCisjZGVmaW5lIE9NQVA1NDMwX1NJTElDT05fSURfSU5WQUxJRAkwCisjZGVmaW5lIE9NQVA1NDMwX0VTMV8wCTB4NTQzMDAxMDAKICNlbmRpZiAvKiBfT01BUF9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9ib2FyZC5jIGIvYXJjaC9hcm0vbGliL2JvYXJkLmMKaW5kZXggYTQ4MjcwNi4uM2Q3ODI3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JvYXJkLmMKKysrIGIvYXJjaC9hcm0vbGliL2JvYXJkLmMKQEAgLTczLDEwICs3Myw2IEBACiBleHRlcm4gdm9pZCBkYXRhZmxhc2hfcHJpbnRfaW5mbyh2b2lkKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0RSSVZFUl9SVEw4MDE5Ci1leHRlcm4gdm9pZCBydGw4MDE5X2dldF9lbmV0YWRkciAodWNoYXIgKiBhZGRyKTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfSEFSRF9JMkMpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TT0ZUX0kyQykKICNpbmNsdWRlIDxpMmMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlnLm1rIGIvYXJjaC9ibGFja2Zpbi9jb25maWcubWsKaW5kZXggZjlkNDZkZS4uMzU5NWFhMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWcubWsKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWcubWsKQEAgLTQ4LDkgKzQ4LDEwIEBACiBlbmRpZgogaWZlcSAoJChDT05GSUdfRU5WX0lTX0VNQkVEREVEX0lOX0xEUikseSkKIENSRUFURV9MRFJfRU5WID0gJChvYmopdG9vbHMvZW52Y3JjIC0tYmluYXJ5ID4gJChvYmopZW52LWxkci5vCi1IT1NUQ0ZMQUdTX05PUEVEICs9IFwKK0hPU1RDRkxBR1NfTk9QRURfQURTUCA6PSBcCiAJJChzaGVsbCAkKENQUCkgLWREIC0gLW1jcHU9JChDT05GSUdfQkZJTl9DUFUpIDwvZGV2L251bGwgXAogCQl8IGF3ayAnJCQyIH4gL0FEU1AvIHsgcHJpbnQgIi1EIiAkJDIgfScpCitIT1NUQ0ZMQUdTX05PUEVEICs9ICQoSE9TVENGTEFHU19OT1BFRF9BRFNQKQogZWxzZQogQ1JFQVRFX0xEUl9FTlYgPQogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY3B1L3RyYXBzLmMgYi9hcmNoL2JsYWNrZmluL2NwdS90cmFwcy5jCmluZGV4IDBjYjgzM2EuLjIwYWVhYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY3B1L3RyYXBzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9jcHUvdHJhcHMuYwpAQCAtMTUwLDcgKzE1MCwxMCBAQAogCQkJCShkYXRhID8gJ0QnIDogJ0knKSwgKHZvaWQgKiluZXdfY3BsYl9hZGRyKTsKIAkJCWJmaW5fcGFuaWMocmVncyk7CiAJCX0gZWxzZQotCQkJZGVidWcoIkNQTEIgYWRkciAlcCBtYXRjaGVzIG1hcCAweCVwIC0gMHglcFxuIiwgbmV3X2NwbGJfYWRkciwgYmZpbl9tZW1vcnlfbWFwW2ldLnN0YXJ0LCBiZmluX21lbW9yeV9tYXBbaV0uZW5kKTsKKwkJCWRlYnVnKCJDUExCIGFkZHIgJXAgbWF0Y2hlcyBtYXAgMHglcCAtIDB4JXBcbiIsCisJCQkJKHZvaWQgKiluZXdfY3BsYl9hZGRyLAorCQkJCSh2b2lkICopYmZpbl9tZW1vcnlfbWFwW2ldLnN0YXJ0LAorCQkJCSh2b2lkICopYmZpbl9tZW1vcnlfbWFwW2ldLmVuZCk7CiAJCW5ld19jcGxiX2RhdGEgPSAoZGF0YSA/IGJmaW5fbWVtb3J5X21hcFtpXS5kYXRhX2ZsYWdzIDogYmZpbl9tZW1vcnlfbWFwW2ldLmluc3RfZmxhZ3MpOwogCiAJCWlmIChkYXRhKSB7CkBAIC0xNjMsMTYgKzE2NiwxNyBAQAogCiAJCS8qIGZpbmQgdGhlIG5leHQgdW5sb2NrZWQgZW50cnkgYW5kIGV2aWN0IGl0ICovCiAJCWkgPSBsYXN0X2V2aWN0ZWQgJiAweEY7Ci0JCWRlYnVnKCJsYXN0IGV2aWN0ZWQgPSAlaVxuIiwgaSk7CisJCWRlYnVnKCJsYXN0IGV2aWN0ZWQgPSAlenVcbiIsIGkpOwogCQlDUExCX0RBVEEgPSBDUExCX0RBVEFfQkFTRSArIGk7CiAJCXdoaWxlICgqQ1BMQl9EQVRBICYgQ1BMQl9MT0NLKSB7Ci0JCQlkZWJ1Zygic2tpcHBpbmcgJWkgJXAgLSAlMDhYXG4iLCBpLCBDUExCX0RBVEEsICpDUExCX0RBVEEpOworCQkJZGVidWcoInNraXBwaW5nICV6dSAlcCAtICUwOFhcbiIsIGksIENQTEJfREFUQSwgKkNQTEJfREFUQSk7CiAJCQlpID0gKGkgKyAxKSAmIDB4RjsJLyogd3JhcCBhcm91bmQgKi8KIAkJCUNQTEJfREFUQSA9IENQTEJfREFUQV9CQVNFICsgaTsKIAkJfQogCQlDUExCX0FERFIgPSBDUExCX0FERFJfQkFTRSArIGk7CiAKLQkJZGVidWcoImV2aWN0aW5nIGVudHJ5ICVpOiAweCVwIDB4JTA4WFxuIiwgaSwgKkNQTEJfQUREUiwgKkNQTEJfREFUQSk7CisJCWRlYnVnKCJldmljdGluZyBlbnRyeSAlenU6IDB4JXAgMHglMDhYXG4iLCBpLAorCQkJKHZvaWQgKikqQ1BMQl9BRERSLCAqQ1BMQl9EQVRBKTsKIAkJbGFzdF9ldmljdGVkID0gaSArIDE7CiAKIAkJLyogbmVlZCB0byB0dXJuIG9mZiBjcGxicyB3aGVuZXZlciB3ZSBtdWNrIHdpdGggdGhlIGNwbGIgdGFibGUgKi8KQEAgLTE5MCw3ICsxOTQsOCBAQAogCQlDUExCX0FERFIgPSBDUExCX0FERFJfQkFTRTsKIAkJQ1BMQl9EQVRBID0gQ1BMQl9EQVRBX0JBU0U7CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQotCQkJZGVidWcoIiUyaSAweCVwIDB4JTA4WFxuIiwgaSwgKkNQTEJfQUREUisrLCAqQ1BMQl9EQVRBKyspOworCQkJZGVidWcoIiUyenUgMHglcCAweCUwOFhcbiIsIGksCisJCQkJKHZvaWQgKikqQ1BMQl9BRERSKyssICpDUExCX0RBVEErKyk7CiAKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvYm9hcmQuYyBiL2FyY2gvYmxhY2tmaW4vbGliL2JvYXJkLmMKaW5kZXggYTcwNDczYy4uZTNlZTRjZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvYm9hcmQuYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9ib2FyZC5jCkBAIC0zMDgsNyArMzA4LDYgQEAKIAogdm9pZCBib2FyZF9pbml0X3IoZ2RfdCAqIGlkLCB1bG9uZyBkZXN0X2FkZHIpCiB7Ci0JY2hhciAqczsKIAliZF90ICpiZDsKIAlnZCA9IGlkOwogCWdkLT5mbGFncyB8PSBHRF9GTEdfUkVMT0M7CS8qIHRlbGwgb3RoZXJzOiByZWxvY2F0aW9uIGRvbmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmRzMzIvY3B1L24xMjEzL2FnMTAxL2NwdS5jIGIvYXJjaC9uZHMzMi9jcHUvbjEyMTMvYWcxMDEvY3B1LmMKaW5kZXggMGFiNjY2ZS4uYzI2MzZiMSAxMDA2NDQKLS0tIGEvYXJjaC9uZHMzMi9jcHUvbjEyMTMvYWcxMDEvY3B1LmMKKysrIGIvYXJjaC9uZHMzMi9jcHUvbjEyMTMvYWcxMDEvY3B1LmMKQEAgLTQ1LDEwICs0NSw2IEBACiAgKi8KIGludCBjbGVhbnVwX2JlZm9yZV9saW51eCh2b2lkKQogewotI2lmZGVmIENPTkZJR19NTVUKLQl1bnNpZ25lZCBsb25nIGk7Ci0jZW5kaWYKLQogCWRpc2FibGVfaW50ZXJydXB0cygpOwogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMTIzLDggKzExOSw4IEBACiAKIHZvaWQgZmx1c2hfY2FjaGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JZGNhY2hlX2ZsdXNoX3JhbmdlKGFkZHIgLCBhZGRyICsgc2l6ZSk7Ci0JaWNhY2hlX2ludmFsX3JhbmdlKGFkZHIgLCBhZGRyICsgc2l6ZSk7CisJZGNhY2hlX2ZsdXNoX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplKTsKKwlpY2FjaGVfaW52YWxfcmFuZ2UoYWRkciwgYWRkciArIHNpemUpOwogfQogCiB2b2lkIGljYWNoZV9lbmFibGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbmRzMzIvY3B1L24xMjEzL2FnMTAxL3RpbWVyLmMgYi9hcmNoL25kczMyL2NwdS9uMTIxMy9hZzEwMS90aW1lci5jCmluZGV4IGMwOTljMzMuLmNhYTM2YjggMTAwNjQ0Ci0tLSBhL2FyY2gvbmRzMzIvY3B1L24xMjEzL2FnMTAxL3RpbWVyLmMKKysrIGIvYXJjaC9uZHMzMi9jcHUvbjEyMTMvYWcxMDEvdGltZXIuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBpbnQgdGltZXJfaW5pdCh2b2lkKQogewotCXN0YXRpYyBzdHJ1Y3QgZnR0bXIwMTAgKnRtciA9IChzdHJ1Y3QgZnR0bXIwMTAgKilDT05GSUdfRlRUTVIwMTBfQkFTRTsKKwlzdHJ1Y3QgZnR0bXIwMTAgKnRtciA9IChzdHJ1Y3QgZnR0bXIwMTAgKilDT05GSUdfRlRUTVIwMTBfQkFTRTsKIAl1bnNpZ25lZCBpbnQgY3I7CiAKIAlkZWJ1ZygiJXMoKVxuIiwgX19mdW5jX18pOwpAQCAtODAsNyArODAsNyBAQAogICovCiB2b2lkIHJlc2V0X3RpbWVyX21hc2tlZCh2b2lkKQogewotCXN0YXRpYyBzdHJ1Y3QgZnR0bXIwMTAgKnRtciA9IChzdHJ1Y3QgZnR0bXIwMTAgKilDT05GSUdfRlRUTVIwMTBfQkFTRTsKKwlzdHJ1Y3QgZnR0bXIwMTAgKnRtciA9IChzdHJ1Y3QgZnR0bXIwMTAgKilDT05GSUdfRlRUTVIwMTBfQkFTRTsKIAogCS8qIGNhcHVyZSBjdXJyZW50IGRlY3JlbWVudGVyIHZhbHVlIHRpbWUgKi8KICNpZmRlZiBDT05GSUdfRlRUTVIwMTBfRVhUX0NMSwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgKi8KIHVsb25nIGdldF90aW1lcl9tYXNrZWQodm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IGZ0dG1yMDEwICp0bXIgPSAoc3RydWN0IGZ0dG1yMDEwICopQ09ORklHX0ZUVE1SMDEwX0JBU0U7CisJc3RydWN0IGZ0dG1yMDEwICp0bXIgPSAoc3RydWN0IGZ0dG1yMDEwICopQ09ORklHX0ZUVE1SMDEwX0JBU0U7CiAKIAkvKiBjdXJyZW50IHRpY2sgdmFsdWUgKi8KICNpZmRlZiBDT05GSUdfRlRUTVIwMTBfRVhUX0NMSwpAQCAtMTYwLDcgKzE2MCw3IEBACiAvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwcmVzZXJ2ZSBhZHZhbmNlIHRpbWVzdGFtcCB2YWx1ZSAqLwogdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCiB7Ci0Jc3RhdGljIHN0cnVjdCBmdHRtcjAxMCAqdG1yID0gKHN0cnVjdCBmdHRtcjAxMCAqKUNPTkZJR19GVFRNUjAxMF9CQVNFOworCXN0cnVjdCBmdHRtcjAxMCAqdG1yID0gKHN0cnVjdCBmdHRtcjAxMCAqKUNPTkZJR19GVFRNUjAxMF9CQVNFOwogCiAjaWZkZWYgQ09ORklHX0ZUVE1SMDEwX0VYVF9DTEsKIAlsb25nIHRtbyA9IHVzZWMgKiAoVElNRVJfQ0xPQ0sgLyAxMDAwKSAvIDEwMDA7CmRpZmYgLS1naXQgYS9hcmNoL25kczMyL2NwdS9uMTIxMy91LWJvb3QubGRzIGIvYXJjaC9uZHMzMi9jcHUvbjEyMTMvdS1ib290LmxkcwppbmRleCA0NTIyMWVlLi4xOTAzNDIwIDEwMDY0NAotLS0gYS9hcmNoL25kczMyL2NwdS9uMTIxMy91LWJvb3QubGRzCisrKyBiL2FyY2gvbmRzMzIvY3B1L24xMjEzL3UtYm9vdC5sZHMKQEAgLTQxLDcgKzQxLDcgQEAKIAkucm9kYXRhIDogeyAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKSB9CiAKIAkuID0gQUxJR04oNCk7Ci0JLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuZGF0YSA6IHsgKiguZGF0YSopIH0KIAogCS4gPSBBTElHTig0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9uZHMzMi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9uZHMzMi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDJjMTA1ZjcuLjM5YzNkYzggMTAwNjQ0Ci0tLSBhL2FyY2gvbmRzMzIvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL25kczMyL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTE2NSw2ICsxNjUsMjQgQEAKICNkZWZpbmUgX19yYXdfYmFzZV9yZWFkdyhiYXNlLCBvZmYpCV9fYXJjaF9iYXNlX2dldHcoYmFzZSwgb2ZmKQogI2RlZmluZSBfX3Jhd19iYXNlX3JlYWRsKGJhc2UsIG9mZikJX19hcmNoX2Jhc2VfZ2V0bChiYXNlLCBvZmYpCiAKKyNkZWZpbmUgb3V0X2FyY2godHlwZSwgZW5kaWFuLCBhLCB2KQlfX3Jhd193cml0ZSMjdHlwZShjcHVfdG9fIyNlbmRpYW4odiksIGEpCisjZGVmaW5lIGluX2FyY2godHlwZSwgZW5kaWFuLCBhKQllbmRpYW4jI190b19jcHUoX19yYXdfcmVhZCMjdHlwZShhKSkKKworI2RlZmluZSBvdXRfbGUzMihhLCB2KQkJCW91dF9hcmNoKGwsIGxlMzIsIGEsIHYpCisjZGVmaW5lIG91dF9sZTE2KGEsIHYpCQkJb3V0X2FyY2godywgbGUxNiwgYSwgdikKKworI2RlZmluZSBpbl9sZTMyKGEpCQkJaW5fYXJjaChsLCBsZTMyLCBhKQorI2RlZmluZSBpbl9sZTE2KGEpCQkJaW5fYXJjaCh3LCBsZTE2LCBhKQorCisjZGVmaW5lIG91dF9iZTMyKGEsIHYpCQkJb3V0X2FyY2gobCwgYmUzMiwgYSwgdikKKyNkZWZpbmUgb3V0X2JlMTYoYSwgdikJCQlvdXRfYXJjaCh3LCBiZTE2LCBhLCB2KQorCisjZGVmaW5lIGluX2JlMzIoYSkJCQlpbl9hcmNoKGwsIGJlMzIsIGEpCisjZGVmaW5lIGluX2JlMTYoYSkJCQlpbl9hcmNoKHcsIGJlMTYsIGEpCisKKyNkZWZpbmUgb3V0XzgoYSwgdikJCQlfX3Jhd193cml0ZWIodiwgYSkKKyNkZWZpbmUgaW5fOChhKQkJCQlfX3Jhd19yZWFkYihhKQorCiAvKgogICogTm93LCBwaWNrIHVwIHRoZSBtYWNoaW5lLWRlZmluZWQgSU8gZGVmaW5pdGlvbnMKICAqICNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9uZHMzMi9pbmNsdWRlL2FzbS9tYWNoLXR5cGVzLmggYi9hcmNoL25kczMyL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaAppbmRleCBhNmYxYzkzLi43YjUyYjk4IDEwMDY0NAotLS0gYS9hcmNoL25kczMyL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaAorKysgYi9hcmNoL25kczMyL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaApAQCAtMjYsNCArMjYsMTggQEAKICMgZGVmaW5lIG1hY2hpbmVfaXNfYWRwYWcxMDEoKQkoMCkKICNlbmRpZgogCisjZGVmaW5lIE1BQ0hfVFlQRV9BRFBBRzEwMVAgICAgICAgICAgICAxCisKKyNpZmRlZiBDT05GSUdfQVJDSF9BRFBBRzEwMVAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FEUEFHMTAxUAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hZHBhZzEwMXAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FEUEFHMTAxUCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2FkcGFnMTAxcCgpCSgxKQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0FTTV9ORFMzMl9NQUNIX1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uZHMzMi9saWIvYm9hcmQuYyBiL2FyY2gvbmRzMzIvbGliL2JvYXJkLmMKaW5kZXggMmZkMGU5My4uNjZlNDUzNyAxMDA2NDQKLS0tIGEvYXJjaC9uZHMzMi9saWIvYm9hcmQuYworKysgYi9hcmNoL25kczMyL2xpYi9ib2FyZC5jCkBAIC0zNTEsNiArMzUxLDExIEBACiAJbmFuZF9pbml0KCk7CQkvKiBnbyBpbml0IHRoZSBOQU5EICovCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NNRF9JREUpCisJcHV0cygiSURFOiAgICIpOworCWlkZV9pbml0KCk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19HRU5FUklDX01NQwogCXB1dHMoIk1NQzogICAiKTsKIAltbWNfaW5pdGlhbGl6ZShnZC0+YmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9jcHUvTWFrZWZpbGUgYi9hcmNoL25pb3MyL2NwdS9NYWtlZmlsZQppbmRleCBhYTQxMTYwLi40MDJmZDc0IDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL25pb3MyL2NwdS9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogU1RBUlQJPSBzdGFydC5vCiBTT0JKUwk9IGV4Y2VwdGlvbnMubwogQ09CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8gc3lzaWQubyB0cmFwcy5vIGVwY3MubworQ09CSlMJKz0gZmR0Lm8KIAogU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2NwdS9jcHUuYyBiL2FyY2gvbmlvczIvY3B1L2NwdS5jCmluZGV4IGVmMzYwZWUuLmVkZjI1NjAxIDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2NwdS9jcHUuYworKysgYi9hcmNoL25pb3MyL2NwdS9jcHUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPG5pb3MyLmg+CiAjaW5jbHVkZSA8bmlvczItaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAogI2lmIGRlZmluZWQgKENPTkZJR19TWVNfTklPU19TWVNJRF9CQVNFKQogZXh0ZXJuIHZvaWQgZGlzcGxheV9zeXNpZCAodm9pZCk7CkBAIC00NywzICs0OCwxOCBAQAogCW5pb3MyX2NhbGxyKENPTkZJR19TWVNfUkVTRVRfQUREUik7CiAJcmV0dXJuIDA7CiB9CisKK2ludCBkY2FjaGVfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZGNhY2hlX2VuYWJsZSh2b2lkKQoreworCWZsdXNoX2RjYWNoZShDT05GSUdfU1lTX0RDQUNIRV9TSVpFLCBDT05GSUdfU1lTX0RDQUNIRUxJTkVfU0laRSk7Cit9CisKK3ZvaWQgZGNhY2hlX2Rpc2FibGUodm9pZCkKK3sKKwlmbHVzaF9kY2FjaGUoQ09ORklHX1NZU19EQ0FDSEVfU0laRSwgQ09ORklHX1NZU19EQ0FDSEVMSU5FX1NJWkUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9jcHUvZmR0LmMgYi9hcmNoL25pb3MyL2NwdS9mZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWVkOWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9jcHUvZmR0LmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMSwgTWlzc2luZyBMaW5rIEVsZWN0cm9uaWNzCisgKiAgICAgICAgICAgICAgICAgICAgIEpvYWNoaW0gRm9lcnN0ZXIgPGpvYWNoaW1AbWlzc2luZ2xpbmtlbGVjdHJvbmljcy5jb20+CisgKgorICogVGFrZW4gZnJvbSBhcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9mZHQuYzoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDctMjAwOAorICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8bGliZmR0X2Vudi5oPgorI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCit2b2lkIF9fZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisJZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKK30KK3ZvaWQgZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpIFwKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19mdF9ib2FyZF9zZXR1cCIpKSk7CisKK3ZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCS8qCisJICogRml4dXAgYWxsIGV0aGVybmV0IG5vZGVzCisJICogTm90ZTogYWxpYXNlcyBpbiB0aGUgZHRzIGFyZSByZXF1aXJlZCBmb3IgdGhpcworCSAqLworCWZkdF9maXh1cF9ldGhlcm5ldChibG9iKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfT0ZfTElCRkRUICYmIENPTkZJR19PRl9CT0FSRF9TRVRVUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCA0YjIxYzhmLi45MDgzODFmIDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtNSw4ICs1LDggQEAKICAqIGJpdFswXSBkYXRhCiAgKiBiaXRbMV0gb3V0cHV0IGVuYWJsZQogICoKLSAqIHdoZW4gQ09ORklHX1NZU19HUElPX0JBU0UgaXMgbm90IGRlZmluZWQsIGJvYXJkIG1heSBwcm92aWRlCi0gKiBpdHMgb3duIGRyaXZlci4KKyAqIFdoZW4gQ09ORklHX1NZU19HUElPX0JBU0UgaXMgbm90IGRlZmluZWQsIHRoZSBib2FyZCBtYXkgZWl0aGVyCisgKiBwcm92aWRlIGl0cyBvd24gZHJpdmVyIG9yIHRoZSBhbHRlcmFfcGlvIGRyaXZlciBtYXkgYmUgdXNlZC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgogICoKQEAgLTU4LDYgKzU4LDE1IEBACiAJcmV0dXJuICgodW5zaWduZWQpbnVtYmVyKSA8IENPTkZJR19TWVNfR1BJT19XSURUSDsKIH0KICNlbHNlCisjaWZkZWYgQ09ORklHX0FMVEVSQV9QSU8KK2V4dGVybiBpbnQgYWx0ZXJhX3Bpb19pbml0KHUzMiBiYXNlLCB1OCB3aWR0aCwgY2hhciBpb3QsCisJCQkgICB1MzIgcnN0dmFsLCB1MzIgbmVnbWFzaywKKwkJCSAgIGNvbnN0IGNoYXIgKmxhYmVsKTsKKworZXh0ZXJuIHZvaWQgYWx0ZXJhX3Bpb19pbmZvKHZvaWQpOworI2RlZmluZSBncGlvX3N0YXR1cygpIGFsdGVyYV9waW9faW5mbygpCisjZW5kaWYKKwogZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwogZXh0ZXJuIGludCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7CiBleHRlcm4gaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L2kyYy5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L2kyYy5jCmluZGV4IGUyZDkwOTcuLjBlYTEyODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC9pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvaTJjLmMKQEAgLTc4LDkgKzc4LDggQEAKIAlzdGF0dXMgPSBtcGNfcmVnX2luICgmcmVncy0+bXNyKTsKIAogCXdoaWxlICh0aW1lb3V0LS0gJiYgKHN0YXR1cyAmIEkyQ19CQikpIHsKLQkJdm9sYXRpbGUgaW50IHRlbXA7CiAJCW1wY19yZWdfb3V0ICgmcmVncy0+bWNyLCBJMkNfU1RBLCBJMkNfU1RBKTsKLQkJdGVtcCA9IG1wY19yZWdfaW4gKCZyZWdzLT5tZHIpOworCQkodm9pZCltcGNfcmVnX2luKCZyZWdzLT5tZHIpOwogCQltcGNfcmVnX291dCAoJnJlZ3MtPm1jciwgMCwgSTJDX1NUQSk7CiAJCW1wY19yZWdfb3V0ICgmcmVncy0+bWNyLCAwLCAwKTsKIAkJbXBjX3JlZ19vdXQgKCZyZWdzLT5tY3IsIEkyQ19FTiwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvcGNpLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvcGNpLmMKaW5kZXggMTQxZGI4Yi4uMTZmMDM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC9wY2kuYwpAQCAtNTIsNyArNTIsNiBAQAogCXZvbGF0aWxlIGxhdzUxMnhfdCAqcGNpX2xhdzsKIAl2b2xhdGlsZSBwb3Q1MTJ4X3QgKnBjaV9wb3Q7CiAJdm9sYXRpbGUgcGNpY3RybDUxMnhfdCAqcGNpX2N0cmw7Ci0Jdm9sYXRpbGUgcGNpY29uZjUxMnhfdCAqcGNpX2NvbmY7CiAJdTE2IHJlZzE2OwogCXUzMiByZWczMjsKIAl1MzIgZGV2OwpAQCAtNzMsNyArNzIsNiBAQAogCXBjaV9sYXcgPSBpbS0+c3lzY29uZi5wY2lsYXc7CiAJcGNpX3BvdCA9IGltLT5pb3MucG90OwogCXBjaV9jdHJsID0gJmltLT5wY2lfY3RybDsKLQlwY2lfY29uZiA9ICZpbS0+cGNpX2NvbmY7CiAKIAlob3NlID0gJnBjaV9ob3NlOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvc3BkX3NkcmFtLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvc3BkX3NkcmFtLmMKaW5kZXggMzg1NWJmZC4uMDRkNTE5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3NwZF9zZHJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC9zcGRfc2RyYW0uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJdW5zaWduZWQgaW50IG1lbXNpemU7CiAJdW5zaWduZWQgaW50IGxhd19zaXplOwogCXVuc2lnbmVkIGNoYXIgY2FzbGF0LCBjYXNsYXRfY3RybDsKLQl1bnNpZ25lZCBpbnQgdHJmYywgdHJmY19jbGssIHRyZmNfbG93LCB0cmZjX2hpZ2g7CisJdW5zaWduZWQgaW50IHRyZmMsIHRyZmNfY2xrLCB0cmZjX2xvdzsKIAl1bnNpZ25lZCBpbnQgdHJjZF9jbGssIHRydHBfY2xrOwogCXVuc2lnbmVkIGNoYXIgY2tlX21pbl9jbGs7CiAJdW5zaWduZWQgY2hhciBhZGRfbGF0LCB3cl9sYXQ7CkBAIC01NDIsNyArNTQyLDYgQEAKIAkgKiBzbyBwcmVhZGp1c3QgaXQgZG93biA4IGZpcnN0IGJlZm9yZSBzcGxpdHRpbmcgaXQgdXAuCiAJICovCiAJdHJmY19sb3cgPSAodHJmY19jbGsgLSA4KSAmIDB4ZjsKLQl0cmZjX2hpZ2ggPSAoKHRyZmNfY2xrIC0gOCkgPj4gNCkgJiAweDM7CiAKIAlkZHItPnRpbWluZ19jZmdfMSA9CiAJICAgICgoKHBpY29zX3RvX2NsayhzcGQudHJwICogMjUwKSAmIDB4MDcpIDw8IDI4ICkgfAkvKiBQUkVUT0FDVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NtZF9lcnJhdGEuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jbWRfZXJyYXRhLmMKaW5kZXggYTA5ZWI5MS4uMjUzYmYwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NtZF9lcnJhdGEuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY21kX2VycmF0YS5jCkBAIC0xMDMsNiArMTAzLDEwIEBACiAjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9OTUdfTEJDMTAzCiAJcHV0cygiV29yay1hcm91bmQgZm9yIEVycmF0dW0gTk1HX0xCQzEwMyBlbmFibGVkXG4iKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CisJaWYgKChTVlJfTUFKKHN2cikgPT0gMSkgfHwgSVNfU1ZSX1JFVihzdnIsIDIsIDApKQorCQlwdXRzKCJXb3JrLWFyb3VuZCBmb3IgRXJyYXR1bSBOTUcgRVRTRUMxMjkgZW5hYmxlZFxuIik7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY3B1X2luaXQuYwppbmRleCAwYTRjZTUzLi5iOWE4MTkzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY3B1X2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY3B1X2luaXQuYwpAQCAtMzE3LDcgKzMxNyw2IEBACiAJdm9sYXRpbGUgY2Nzcl9sMmNhY2hlX3QgKmwyY2FjaGUgPSAodm9pZCAqKUNPTkZJR19TWVNfTVBDODV4eF9MMl9BRERSOwogCXZvbGF0aWxlIHVpbnQgY2FjaGVfY3RsOwogCXVpbnQgc3ZyLCB2ZXI7Ci0JdWludCBsMnNyYmFyOwogCXUzMiBsMnNpel9maWVsZDsKIAogCXN2ciA9IGdldF9zdnIoKTsKQEAgLTM4NSw4ICszODQsOCBAQAogCiAJaWYgKGwyY2FjaGUtPmwyY3RsICYgTVBDODV4eF9MMkNUTF9MMkUpIHsKIAkJcHV0cygiYWxyZWFkeSBlbmFibGVkIik7Ci0JCWwyc3JiYXIgPSBsMmNhY2hlLT5sMnNyYmFyMDsKICNpZiBkZWZpbmVkKENPTkZJR19TWVNfSU5JVF9MMl9BRERSKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfRkxBU0hfQkFTRSkKKwkJdTMyIGwyc3JiYXIgPSBsMmNhY2hlLT5sMnNyYmFyMDsKIAkJaWYgKGwyY2FjaGUtPmwyY3RsICYgTVBDODV4eF9MMkNUTF9MMlNSQU1fRU5USVJFCiAJCQkJJiYgbDJzcmJhciA+PSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UpIHsKIAkJCWwyc3JiYXIgPSBDT05GSUdfU1lTX0lOSVRfTDJfQUREUjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jcHVfaW5pdF9lYXJseS5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKaW5kZXggNGVmM2M5YS4uMDkxYWY3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKQEAgLTcxLDcgKzcxLDcgQEAKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRVJSQVRVTV9JRkNfQTAwMzM5OSkgJiYgIWRlZmluZWQoQ09ORklHX1NZU19SQU1CT09UKQogCWNjc3JfbDJjYWNoZV90ICpsMmNhY2hlID0gKHZvaWQgKilDT05GSUdfU1lTX01QQzg1eHhfTDJfQUREUjsKLQl1MzIgICpsMnNyYmFyLCAqZHN0LCAqc3JjOworCXUzMiAgKmRzdCwgKnNyYzsKIAl2b2lkICgqc2V0dXBfaWZjX3NyYW0pKHZvaWQpOwogI2VuZGlmCiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogCWRzdCA9ICh1MzIgKikgU1JBTV9CQVNFX0FERFI7CiAJc3JjID0gKHUzMiAqKSBzZXR1cF9pZmM7CiAJZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLQkJKmwyc3JiYXIrKyA9ICpzcmMrKzsKKwkJKmRzdCsrID0gKnNyYysrOwogCiAJc2V0dXBfaWZjX3NyYW0oKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZzbF9jb3JlbmV0X3NlcmRlcy5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZzbF9jb3JlbmV0X3NlcmRlcy5jCmluZGV4IDg5ZWQ1YjQuLjRiNTJkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9mc2xfY29yZW5ldF9zZXJkZXMuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvZnNsX2NvcmVuZXRfc2VyZGVzLmMKQEAgLTQ5NSw3ICs0OTUsNiBAQAogCWludCBjZmc7CiAJc2VyZGVzX2NvcmVuZXRfdCAqc3Jkc19yZWdzOwogCWludCBsYW5lLCBiYW5rLCBpZHg7Ci0JZW51bSBzcmRzX3BydGNsIGxhbmVfcHJ0Y2w7CiAJaW50IGhhdmVfYmFua1tTUkRTX01BWF9CQU5LXSA9IHt9OwogI2lmZGVmIENPTkZJR19TWVNfUDQwODBfRVJSQVRVTV9TRVJERVM4CiAJdTMyIHNlcmRlczhfZGV2ZGlzciA9IDA7CkBAIC01MDcsNiArNTA2LDcgQEAKICNpZmRlZiBDT05GSUdfU1lTX1A0MDgwX0VSUkFUVU1fU0VSREVTX0EwMDEKIAlpbnQgbmVlZF9zZXJkZXNfYTAwMTsJLyogVFJVRSA9PSBuZWVkIHdvcmstYXJvdW5kIGZvciBTRVJERVMgQTAwMSAqLwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU19QNDA4MF9FUlJBVFVNX1NFUkRFUzgKIAljaGFyIGJ1ZmZlcltIV0NPTkZJR19CVUZGRVJfU0laRV07CiAJY2hhciAqYnVmID0gTlVMTDsKIApAQCAtNTE2LDYgKzUxNiw3IEBACiAJICovCiAJaWYgKGdldGVudl9mKCJod2NvbmZpZyIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpID4gMCkKIAkJYnVmID0gYnVmZmVyOworI2VuZGlmCiAKIAkvKiBJcyBzZXJkZXMgZW5hYmxlZCBhdCBhbGw/ICovCiAJaWYgKCEoaW5fYmUzMigmZ3VyLT5yY3dzcls1XSkgJiBGU0xfQ09SRU5FVF9SQ1dTUjVfU1JEU19FTikpCkBAIC02MTcsNyArNjE4LDEwIEBACiAJCX0KIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfUDQwODBfRVJSQVRVTV9TRVJERVM4KSB8fCBkZWZpbmVkIChDT05GSUdfU1lTX1A0MDgwX0VSUkFUVU1fU0VSREVTOSkKIAlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgU1JEU19NQVhfTEFORVM7IGxhbmUrKykgeworCQllbnVtIHNyZHNfcHJ0Y2wgbGFuZV9wcnRjbDsKKwogCQlpZHggPSBzZXJkZXNfZ2V0X2xhbmVfaWR4KGxhbmUpOwogCQlsYW5lX3BydGNsID0gc2VyZGVzX2dldF9wcnRjbChjZmcsIGxhbmUpOwogCkBAIC03MjksNiArNzMzLDcgQEAKIAogI2VuZGlmCiAJfQorI2VuZGlmCiAKICNpZmRlZiBERUJVRwogCXB1dHMoIlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQuUyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zdGFydC5TCmluZGV4IDVlMGQ3OGQuLjdiZDVjYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zdGFydC5TCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zdGFydC5TCkBAIC0zMTksNiArMzE5LDU1IEBACiAjZW5kaWYgLyogQ09ORklHX01QQzg1NjkgKi8KIAogLyoKKyAqIFNlYXJjaCBmb3IgdGhlIFRMQiB0aGF0IGNvdmVycyB0aGUgY29kZSB3ZSdyZSBleGVjdXRpbmcsIGFuZCBzaHJpbmsgaXQKKyAqIHNvIHRoYXQgaXQgY292ZXJzIG9ubHkgdGhpcyA0SyBwYWdlLiAgVGhhdCB3aWxsIGVuc3VyZSB0aGF0IGFueSBvdGhlcgorICogVExCIHdlIGNyZWF0ZSB3b24ndCBpbnRlcmZlcmUgd2l0aCBpdC4gIFdlIGFzc3VtZSB0aGF0IHRoZSBUTEIgZXhpc3RzLAorICogd2hpY2ggaXMgd2h5IHdlIGRvbid0IGNoZWNrIHRoZSBWYWxpZCBiaXQgb2YgTUFTMS4KKyAqCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsIHdoZW4gYm9vdGluZyBmcm9tIHRoZSBvbi1jaGlwIFJPTSwKKyAqIHdoaWNoIChvZGRseSkgY3JlYXRlcyBhIHNpbmdsZSA0R0IgVExCIHRoYXQgY292ZXJzIENDU1IgYW5kIEREUi4KKyAqIElmIHdlIGRvbid0IHNocmluayB0aGlzIFRMQiBub3csIHRoZW4gd2UnbGwgYWNjaWRlbnRhbGx5IGRlbGV0ZSBpdAorICogaW4gInB1cmdlX29sZF9jY3NyX3RsYiIgYmVsb3cuCisgKi8KKwlibAluZXh0aQkJLyogRmluZCBvdXIgYWRkcmVzcyAqLworbmV4dGk6CW1mbHIJcjEJCS8qIFIxID0gb3VyIFBDICovCisJbGkJcjIsIDAKKwltdHNwcglNQVM2LCByMgkvKiBBc3N1bWUgdGhlIGN1cnJlbnQgUElEIGFuZCBBUyBhcmUgMCAqLworCWlzeW5jCisJbXN5bmMKKwl0bGJzeAkwLCByMQkJLyogVGhpcyBtdXN0IHN1Y2NlZWQgKi8KKworCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgVExCIHRvIDRLQiAqLworCW1mc3ByCXIzLCBNQVMxCisJbGkJcjIsIDB4RjAwCisJYW5kYwlyMywgcjMsIHIyCS8qIENsZWFyIHRoZSBUU0laRSBiaXRzICovCisJb3JpCXIzLCByMywgTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspQGwKKwltdHNwcglNQVMxLCByMworCisJLyoKKwkgKiBTZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVExCIHRvIG91ciBQQy4gIFdlIGFzc3VtZSB0aGF0CisJICogdmlydHVhbCA9PSBwaHlzaWNhbC4gIFdlIGFsc28gYXNzdW1lIHRoYXQgTUFTMl9FUE4gPT0gTUFTM19SUE4uCisJICovCisJbGlzCXIzLCBNQVMyX0VQTkBoCisJb3JpCXIzLCByMywgTUFTMl9FUE5AbAkvKiBSMyA9IE1BUzJfRVBOICovCisKKwlhbmQJcjEsIHIxLCByMwkvKiBPdXIgUEMsIHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBwYWdlICovCisKKwltZnNwcglyMiwgTUFTMgorCWFuZGMJcjIsIHIyLCByMworCW9yCXIyLCByMiwgcjEKKwltdHNwcglNQVMyLCByMgkvKiBTZXQgdGhlIEVQTiB0byBvdXIgUEMgYmFzZSBhZGRyZXNzICovCisKKwltZnNwcglyMiwgTUFTMworCWFuZGMJcjIsIHIyLCByMworCW9yCXIyLCByMiwgcjEKKwltdHNwcglNQVMzLCByMgkvKiBTZXQgdGhlIFJQTiB0byBvdXIgUEMgYmFzZSBhZGRyZXNzICovCisKKwlpc3luYworCW1zeW5jCisJdGxid2UKKworLyoKICAqIFJlbG9jYXRlIENDU1IsIGlmIG5lY2Vzc2FyeS4gIFdlIHJlbG9jYXRlIENDU1IgaWYgKG9idmlvdXNseSkgdGhlIGRlZmF1bHQKICAqIGxvY2F0aW9uIGlzIG5vdCB3aGVyZSB3ZSB3YW50IGl0LiAgVGhpcyB0eXBpY2FsbHkgaGFwcGVucyBvbiBhIDM2LWJpdAogICogc3lzdGVtLCB3aGVyZSB3ZSB3YW50IHRvIG1vdmUgQ0NTUiB0byBuZWFyIHRoZSB0b3Agb2YgMzYtYml0IGFkZHJlc3Mgc3BhY2UuCkBAIC0zNTIsNiArNDAxLDggQEAKIAogCWxpCXIxLCAwCiAJbXRzcHIJTUFTNiwgcjEJLyogU2VhcmNoIHRoZSBjdXJyZW50IGFkZHJlc3Mgc3BhY2UgYW5kIFBJRCAqLworCWlzeW5jCisJbXN5bmMKIAl0bGJzeAkwLCByOAogCW1mc3ByCXIxLCBNQVMxCiAJYW5kaXMuICByMiwgcjEsIE1BUzFfVkFMSURAaAkvKiBDaGVjayBmb3IgdGhlIFZhbGlkIGJpdCAqLwpAQCAtMzU5LDYgKzQxMCw4IEBACiAKIAlybHdpbm0JcjEsIHIxLCAwLCAxLCAzMQkvKiBDbGVhciBWYWxpZCBiaXQgKi8KIAltdHNwcglNQVMxLCByMQorCWlzeW5jCisJbXN5bmMKIAl0bGJ3ZQogMToKIApAQCAtMzg3LDcgKzQ0MCw3IEBACiAJdGxid2UKIAogCS8qCi0JICogQ3JlYXRlIGEgVExCIGZvciB0aGUgb2xkIGxvY2F0aW9uIG9mIENDU1IuICBSZWdpc3RlciBSOSBpcyByZXNlcnZlZAorCSAqIENyZWF0ZSBhIFRMQiBmb3IgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgQ0NTUi4gIFJlZ2lzdGVyIFI5IGlzIHJlc2VydmVkCiAJICogZm9yIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhpcyBUTEIgKENPTkZJR19TWVNfQ0NTUkJBUiArIDB4MTAwMCkuCiAJICovCiBjcmVhdGVfY2Nzcl9vbGRfdGxiOgpAQCAtNDA3LDYgKzQ2MCwzMyBAQAogCW1zeW5jCiAJdGxid2UKIAorCS8qCisJICogV2UgaGF2ZSBhIFRMQiBmb3Igd2hhdCB3ZSB0aGluayBpcyB0aGUgY3VycmVudCAob2xkKSBDQ1NSLiAgTGV0J3MKKwkgKiB2ZXJpZnkgdGhhdCwgb3RoZXJ3aXNlIHdlIHdvbid0IGJlIGFibGUgdG8gbW92ZSBpdC4KKwkgKiBDT05GSUdfU1lTX0NDU1JCQVJfREVGQVVMVCBpcyBhbHdheXMgYSAzMi1iaXQgbnVtYmVyLCBzbyB3ZSBvbmx5CisJICogbmVlZCB0byBjb21wYXJlIHRoZSBsb3dlciAzMiBiaXRzIG9mIENDU1JCQVIgb24gQ29yZU5ldCBzeXN0ZW1zLgorCSAqLwordmVyaWZ5X29sZF9jY3NyOgorCWxpcyAgICAgcjAsIENPTkZJR19TWVNfQ0NTUkJBUl9ERUZBVUxUQGgKKwlvcmkgICAgIHIwLCByMCwgQ09ORklHX1NZU19DQ1NSQkFSX0RFRkFVTFRAbAorI2lmZGVmIENPTkZJR19GU0xfQ09SRU5FVAorCWx3eglyMSwgNChyOSkJCS8qIENDU1JCQVJMICovCisjZWxzZQorCWx3eglyMSwgMChyOSkJCS8qIENDU1JCQVIsIHNoaWZ0ZWQgcmlnaHQgYnkgMTIgKi8KKwlzbHdpCXIxLCByMSwgMTIKKyNlbmRpZgorCisJY21wbAkwLCByMCwgcjEKKworCS8qCisJICogSWYgdGhlIHZhbHVlIHdlIHJlYWQgZnJvbSBDQ1NSQkFSTCBpcyBub3Qgd2hhdCB3ZSBleHBlY3QsIHRoZW4KKwkgKiBlbnRlciBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyB3aWxsIGF0IGxlYXN0IGFsbG93IGEgZGVidWdnZXIgdG8KKwkgKiBoYWx0IGV4ZWN1dGlvbiBhbmQgZXhhbWluZSBUTEJzLCBldGMuICBUaGVyZSdzIG5vIHBvaW50IGluIGdvaW5nCisJICogb24uCisJICovCitpbmZpbml0ZV9kZWJ1Z19sb29wOgorCWJuZQlpbmZpbml0ZV9kZWJ1Z19sb29wCisKICNpZmRlZiBDT05GSUdfRlNMX0NPUkVORVQKIAogI2RlZmluZSBDQ1NSX0xBV0JBUkgwCShDT05GSUdfU1lTX0NDU1JCQVIgKyAweDEwMDApCkBAIC00NDYsNyArNTI2LDcgQEAKIAkgKi8KIHJlYWRfb2xkX2Njc3JiYXI6CiAJbHd6CXIwLCAwKHI5KQkvKiBDQ1NSQkFSSCAqLwotCWx3eglyMCwgNChyOSkJLyogQ0NTUkJBUkggKi8KKwlsd3oJcjAsIDQocjkpCS8qIENDU1JCQVJMICovCiAJaXN5bmMKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdGxiLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdGxiLmMKaW5kZXggMDFhMzU2MS4uOTI5ZjZhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC90bGIuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIHZvaWQgZGlzYWJsZV90bGIodTggZXNlbCkKIHsKLQl1MzIgX21hczAsIF9tYXMxLCBfbWFzMiwgX21hczMsIF9tYXM3OworCXUzMiBfbWFzMCwgX21hczEsIF9tYXMyLCBfbWFzMzsKIAogCWZyZWVfdGxiX2NhbShlc2VsKTsKIApAQCAtMTgwLDE0ICsxODAsMTMgQEAKIAlfbWFzMSA9IDA7CiAJX21hczIgPSAwOwogCV9tYXMzID0gMDsKLQlfbWFzNyA9IDA7CiAKIAltdHNwcihNQVMwLCBfbWFzMCk7CiAJbXRzcHIoTUFTMSwgX21hczEpOwogCW10c3ByKE1BUzIsIF9tYXMyKTsKIAltdHNwcihNQVMzLCBfbWFzMyk7CiAjaWZkZWYgQ09ORklHX0VOQUJMRV8zNkJJVF9QSFlTCi0JbXRzcHIoTUFTNywgX21hczcpOworCW10c3ByKE1BUzcsIDApOwogI2VuZGlmCiAJYXNtIHZvbGF0aWxlKCJpc3luYzttc3luYzt0bGJ3ZTtpc3luYyIpOwogCkBAIC0yNTIsMTYgKzI1MSwyMCBAQAogCXVuc2lnbmVkIGludCB0bGJfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgd2ltZ2UgPSAwOwogCXVuc2lnbmVkIGludCByYW1fdGxiX2FkZHJlc3MgPSAodW5zaWduZWQgaW50KUNPTkZJR19TWVNfRERSX1NEUkFNX0JBU0U7Ci0JdW5zaWduZWQgaW50IG1heF9jYW0gPSAobWZzcHIoU1BSTl9UTEIxQ0ZHKSA+PiAxNikgJiAweGY7CisJdW5zaWduZWQgaW50IG1heF9jYW07CiAJdTY0IHNpemUsIG1lbXNpemUgPSAodTY0KW1lbXNpemVfaW5fbWVnIDw8IDIwOwogCiAjaWZkZWYgQ09ORklHX1NZU19QUENfRERSX1dJTUdFCiAJd2ltZ2UgPSBDT05GSUdfU1lTX1BQQ19ERFJfV0lNR0U7CiAjZW5kaWYKIAlzaXplID0gbWluKG1lbXNpemUsIENPTkZJR19NQVhfTUVNX01BUFBFRCk7Ci0KLQkvKiBDb252ZXJ0ICg0Xm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLwotCW1heF9jYW0gPSBtYXhfY2FtICogMiArIDEwOworCWlmICgobWZzcHIoU1BSTl9NTVVDRkcpICYgTU1VQ0ZHX01BVk4pID09IE1NVUNGR19NQVZOX1YxKSB7CisJCS8qIENvbnZlcnQgKDRebWF4KSBrQiB0byAoMl5tYXgpIGJ5dGVzICovCisJCW1heF9jYW0gPSAoKG1mc3ByKFNQUk5fVExCMUNGRykgPj4gMTYpICYgMHhmKSAqIDIgKyAxMDsKKwl9IGVsc2UgeworCQkvKiBDb252ZXJ0ICgyXm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLworCQltYXhfY2FtID0gX19pbG9nMihtZnNwcihTUFJOX1RMQjFQUykpICsgMTA7CisJfQogCiAJZm9yIChpID0gMDsgc2l6ZSAmJiBpIDwgODsgaSsrKSB7CiAJCWludCByYW1fdGxiX2luZGV4ID0gZmluZF9mcmVlX3RsYmNhbSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvdmlkZW8uYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3ZpZGVvLmMKaW5kZXggNzcyNWM2Ny4uMWJiZjRjYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvdmlkZW8uYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eC92aWRlby5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDx2aWRlb19mb250Lmg+CQkJLyogR2V0IGZvbnQgZGF0YSwgd2lkdGggYW5kIGhlaWdodCAqLworI2luY2x1ZGUgPHZpZGVvX2ZvbnRfZGF0YS5oPgogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0xPR08KICNpbmNsdWRlIDx2aWRlb19sb2dvLmg+CQkJLyogR2V0IGxvZ28gZGF0YSwgd2lkdGggYW5kIGhlaWdodCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2Rkci9jdHJsX3JlZ3MuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvY3RybF9yZWdzLmMKaW5kZXggMTVjZDM3NS4uMjA2N2Q1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2Rkci9jdHJsX3JlZ3MuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZGRyL2N0cmxfcmVncy5jCkBAIC02NzIsNyArNjcyLDYgQEAKIAkJcmN3X2VuID0gMTsKIAkJYXBfZW4gPSBwb3B0cy0+YXBfZW47CiAJfSBlbHNlIHsKLQkJcmN3X2VuID0gMDsKIAkJYXBfZW4gPSAwOwogCX0KIApAQCAtNzAyLDkgKzcwMSw3IEBACiAJCXwgKChvYmNfY2ZnICYgMHgxKSA8PCA2KQogCQl8ICgoYXBfZW4gJiAweDEpIDw8IDUpCiAJCXwgKChkX2luaXQgJiAweDEpIDw8IDQpCi0jaWZkZWYgQ09ORklHX0ZTTF9ERFIzCiAJCXwgKChyY3dfZW4gJiAweDEpIDw8IDIpCi0jZW5kaWYKIAkJfCAoKG1kX2VuICYgMHgxKSA8PCAwKQogCQkpOwogCWRlYnVnKCJGU0xERFI6IGRkcl9zZHJhbV9jZmdfMiA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fY2ZnXzIpOwpAQCAtNzQ1LDcgKzc0Miw3IEBACiAKICNpZmRlZiBDT05GSUdfRlNMX0REUjMKIAlpZiAodW5xX21yc19lbikgewkvKiB1bmlxdWUgbW9kZSByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZCAqLwotCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7CisJCWZvciAoaSA9IDE7IGkgPCBDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMOyBpKyspIHsKIAkJCWlmIChwb3B0cy0+cnR0X292ZXJyaWRlKQogCQkJCXJ0dF93ciA9IHBvcHRzLT5ydHRfd3Jfb3ZlcnJpZGVfdmFsdWU7CiAJCQllbHNlCkBAIC05NDQsNyArOTQxLDcgQEAKIAlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZSA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fbW9kZSk7CiAKIAlpZiAodW5xX21yc19lbikgewkvKiB1bmlxdWUgbW9kZSByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZCAqLwotCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7CisJCWZvciAoaSA9IDE7IGkgPCBDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMOyBpKyspIHsKIAkJCWlmIChwb3B0cy0+cnR0X292ZXJyaWRlKQogCQkJCXJ0dCA9IHBvcHRzLT5ydHRfb3ZlcnJpZGVfdmFsdWU7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZGRyL29wdGlvbnMuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvb3B0aW9ucy5jCmluZGV4IDRkYzc0OGIuLjAwZWM1N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvb3B0aW9ucy5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvb3B0aW9ucy5jCkBAIC00ODMsNyArNDgzLDkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAljaGFyIGJ1ZmZlcltIV0NPTkZJR19CVUZGRVJfU0laRV07CiAJY2hhciAqYnVmID0gTlVMTDsKKyNpZiBkZWZpbmVkKENPTkZJR19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfRlNMX0REUjIpCiAJY29uc3Qgc3RydWN0IGR5bmFtaWNfb2R0ICpwZG9kdCA9IG9kdF91bmtub3duOworI2VuZGlmCiAJdWxvbmcgZGRyX2ZyZXE7CiAKIAkvKgpAQCAtNDkzLDYgKzQ5NSw3IEBACiAJaWYgKGdldGVudl9mKCJod2NvbmZpZyIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpID4gMCkKIAkJYnVmID0gYnVmZmVyOwogCisjaWYgZGVmaW5lZChDT05GSUdfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX0ZTTF9ERFIyKQogCS8qIENoaXAgc2VsZWN0IG9wdGlvbnMuICovCiAJaWYgKENPTkZJR19ESU1NX1NMT1RTX1BFUl9DVExSID09IDEpIHsKIAkJc3dpdGNoIChwZGltbVswXS5uX3JhbmtzKSB7CkBAIC01NDYsNiArNTQ5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorI2VuZGlmCiAKIAkvKiBQaWNrIGNoaXAtc2VsZWN0IGxvY2FsIG9wdGlvbnMuICovCiAJZm9yIChpID0gMDsgaSA8IENPTkZJR19DSElQX1NFTEVDVFNfUEVSX0NUUkw7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZkdC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZkdC5jCmluZGV4IDExMmM2MDMuLmQwN2FlMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9mZHQuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZmR0LmMKQEAgLTg3LDEzICs4NywxMiBAQAogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01QQzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg2eHgpICovCiAKICNpZmRlZiBDT05GSUdfSEFTX0ZTTF9EUl9VU0IKLXN0YXRpYyB2b2lkIGZkdF9maXh1cF91c2JfbW9kZV9waHlfdHlwZSh2b2lkICpibG9iLCBjb25zdCBjaGFyICptb2RlLAotCQkJCWNvbnN0IGNoYXIgKnBoeV90eXBlKQorc3RhdGljIGludCBmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUodm9pZCAqYmxvYiwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQljb25zdCBjaGFyICpwaHlfdHlwZSwgaW50IHN0YXJ0X29mZnNldCkKIHsKIAljb25zdCBjaGFyICpjb21wYXQgPSAiZnNsLXVzYjItZHIiOwogCWNvbnN0IGNoYXIgKnByb3BfbW9kZSA9ICJkcl9tb2RlIjsKIAljb25zdCBjaGFyICpwcm9wX3R5cGUgPSAicGh5X3R5cGUiOwotCXN0YXRpYyBpbnQgc3RhcnRfb2Zmc2V0ID0gLTE7CiAJaW50IG5vZGVfb2Zmc2V0OwogCWludCBlcnI7CiAKQEAgLTEwMiw3ICsxMDEsNyBAQAogCWlmIChub2RlX29mZnNldCA8IDApIHsKIAkJcHJpbnRmKCJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCBjb21wYXRpYmxlIG5vZGUgJXM6ICVzLlxuIiwKIAkJCWNvbXBhdCwgZmR0X3N0cmVycm9yKG5vZGVfb2Zmc2V0KSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC0xOwogCX0KIAogCWlmIChtb2RlKSB7CkBAIC0xMjEsMTYgKzEyMCwxOCBAQAogCQkJICAgICAgIHByb3BfdHlwZSwgY29tcGF0LCBmZHRfc3RyZXJyb3IoZXJyKSk7CiAJfQogCi0Jc3RhcnRfb2Zmc2V0ID0gbm9kZV9vZmZzZXQ7CisJcmV0dXJuIG5vZGVfb2Zmc2V0OwogfQogCiB2b2lkIGZkdF9maXh1cF9kcl91c2Iodm9pZCAqYmxvYiwgYmRfdCAqYmQpCiB7CiAJY29uc3QgY2hhciAqbW9kZXNbXSA9IHsgImhvc3QiLCAicGVyaXBoZXJhbCIsICJvdGciIH07Ci0JY29uc3QgY2hhciAqcGh5c1tdID0geyAidWxwaSIsICJ1bXRpIiB9OworCWNvbnN0IGNoYXIgKnBoeXNbXSA9IHsgInVscGkiLCAidXRtaSIgfTsKIAljb25zdCBjaGFyICptb2RlID0gTlVMTDsKIAljb25zdCBjaGFyICpwaHlfdHlwZSA9IE5VTEw7CiAJY2hhciB1c2IxX2RlZmluZWQgPSAwOworCWludCB1c2JfbW9kZV9vZmYgPSAtMTsKKwlpbnQgdXNiX3BoeV9vZmYgPSAtMTsKIAljaGFyIHN0cls1XTsKIAlpbnQgaSwgajsKIApAQCAtMTUzLDExICsxNTQsMTEgQEAKIAkJCQl9CiAJCQl9CiAJCQlpZiAobW9kZV9pZHggPj0gMCkKLQkJCQlmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKLQkJCQkJbW9kZXNbbW9kZV9pZHhdLCBOVUxMKTsKKwkJCQl1c2JfbW9kZV9vZmYgPSBmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKKwkJCQkJbW9kZXNbbW9kZV9pZHhdLCBOVUxMLCB1c2JfbW9kZV9vZmYpOwogCQkJaWYgKHBoeV9pZHggPj0gMCkKLQkJCQlmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKLQkJCQkJTlVMTCwgcGh5c1twaHlfaWR4XSk7CisJCQkJdXNiX3BoeV9vZmYgPSBmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKKwkJCQkJTlVMTCwgcGh5c1twaHlfaWR4XSwgdXNiX3BoeV9vZmYpOwogCQkJaWYgKCFzdHJjbXAoc3RyLCAidXNiMSIpKQogCQkJCXVzYjFfZGVmaW5lZCA9IDE7CiAJCQlpZiAobW9kZV9pZHggPCAwICYmIHBoeV9pZHggPCAwKQpAQCAtMTY1LDExICsxNjYsMTIgQEAKIAkJfQogCX0KIAlpZiAoIXVzYjFfZGVmaW5lZCkgeworCQlpbnQgdXNiX29mZiA9IC0xOwogCQltb2RlID0gZ2V0ZW52KCJ1c2JfZHJfbW9kZSIpOwogCQlwaHlfdHlwZSA9IGdldGVudigidXNiX3BoeV90eXBlIik7CiAJCWlmICghbW9kZSAmJiAhcGh5X3R5cGUpCiAJCQlyZXR1cm47Ci0JCWZkdF9maXh1cF91c2JfbW9kZV9waHlfdHlwZShibG9iLCBtb2RlLCBwaHlfdHlwZSk7CisJCWZkdF9maXh1cF91c2JfbW9kZV9waHlfdHlwZShibG9iLCBtb2RlLCBwaHlfdHlwZSwgdXNiX29mZik7CiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19IQVNfRlNMX0RSX1VTQiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZzbF9sYmMuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9mc2xfbGJjLmMKaW5kZXggZDc4OTYyZi4uNTg3NTc2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZzbF9sYmMuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZnNsX2xiYy5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHZvaWQgdXBtY29uZmlnKHVpbnQgdXBtLCB1aW50ICp0YWJsZSwgdWludCBzaXplKQogewogCWZzbF9sYmNfdCAqbGJjID0gTEJDX0JBU0VfQUREUjsKLQlpbnQgaSwgbWRyLCBtYWQsIG9sZF9tYWQgPSAwOworCWludCBpLCBtYWQsIG9sZF9tYWQgPSAwOwogCXUzMiBtYXNrID0gKH5NeE1SX09QX01TSyAmIH5NeE1SX01BRF9NU0spOwogCXUzMiBtc2VsID0gQlJfVVBNeF9UT19NU0VMKHVwbSk7CiAJdTMyICpteG1yID0gJmxiYy0+bWFtciArIHVwbTsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJb3V0X2JlMzIobXhtciwgKGluX2JlMzIobXhtcikgJiBtYXNrKSB8IE14TVJfT1BfV0FSUiB8IGkpOwogCQlvdXRfYmUzMigmbGJjLT5tZHIsIHRhYmxlW2ldKTsKLQkJbWRyID0gaW5fYmUzMigmbGJjLT5tZHIpOworCQkodm9pZClpbl9iZTMyKCZsYmMtPm1kcik7CiAJCSpkdW1teSA9IDA7CiAJCWRvIHsKIAkJCW1hZCA9IGluX2JlMzIobXhtcikgJiBNeE1SX01BRF9NU0s7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80MHhfc3BkX3NkcmFtLmMgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80MHhfc3BkX3NkcmFtLmMKaW5kZXggYTMxYjE3ZS4uNDhhYTc1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDB4X3NwZF9zZHJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzQweF9zcGRfc2RyYW0uYwpAQCAtMTE2LDI2ICsxMTYsMjUgQEAKIHsKIAlpbnQgdG1wLHJvdyxjb2w7CiAJaW50IHRvdGFsX3NpemUsYmFua19zaXplLGJhbmtfY29kZTsKLQlpbnQgZWNjX29uOwogCWludCBtb2RlOwogCWludCBiYW5rX2NudDsKIAogCWludCBzZHJhbTBfcG1pdD0weDA3YzAwMDAwOworCWludCBzZHJhbTBfYjBjcjsKKwlpbnQgc2RyYW0wX2IxY3IgPSAwOwogI2lmbmRlZiBDT05GSUdfNDA1RVAgLyogbm90IG9uIFBQQzQwNUVQICovCisJaW50IHNkcmFtMF9iMmNyID0gMDsKKwlpbnQgc2RyYW0wX2IzY3IgPSAwOwogCWludCBzZHJhbTBfYmVzcjAgPSAtMTsKIAlpbnQgc2RyYW0wX2Jlc3IxID0gLTE7CiAJaW50IHNkcmFtMF9lY2Nlc3IgPSAtMTsKLSNlbmRpZgogCWludCBzZHJhbTBfZWNjY2ZnOworCWludCBlY2Nfb247CisjZW5kaWYKIAogCWludCBzZHJhbTBfcnRyPTA7CiAJaW50IHNkcmFtMF90cj0wOwogCi0JaW50IHNkcmFtMF9iMGNyOwotCWludCBzZHJhbTBfYjFjcjsKLQlpbnQgc2RyYW0wX2IyY3I7Ci0JaW50IHNkcmFtMF9iM2NyOwotCiAJaW50IHNkcmFtMF9jZmc9MDsKIAogCWludCB0X3JwOwpAQCAtMjk1LDYgKzI5NCw3IEBACiAJaWYgKGJhbmtfY250ID4gNCkJLyogd2Ugb25seSBoYXZlIDQgYmFua3MgdG8gd29yayB3aXRoICovCiAJCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kdWxlIHJvd3MgZm9yIHRoaXMgd2lkdGhcbiIpOwogCisjaWZuZGVmIENPTkZJR180MDVFUCAvKiBub3Qgb24gUFBDNDA1RVAgKi8KIAkvKiBub3cgY2hlY2sgZm9yIEVDQyBhYmlsaXR5IG9mIG1vZHVsZS4gV2Ugb25seSBzdXBwb3J0IEVDQwogCSAqICAgb24gMzIgYml0IHdpZGUgZGV2aWNlcyB3aXRoIDggYml0IEVDQy4KIAkgKi8KQEAgLTMwNSw2ICszMDUsNyBAQAogCQlzZHJhbTBfZWNjY2ZnID0gMDsKIAkJZWNjX29uID0gMDsKIAl9CisjZW5kaWYKIAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogY2FsY3VsYXRlIHRvdGFsIHNpemUKQEAgLTM3OCw5ICszNzksNiBAQAogCSAqIHVzaW5nIHRoZSBjYWxjdWxhdGVkIHZhbHVlcywgY29tcHV0ZSB0aGUgYmFuawogCSAqIGNvbmZpZyByZWdpc3RlciB2YWx1ZXMuCiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jc2RyYW0wX2IxY3IgPSAwOwotCXNkcmFtMF9iMmNyID0gMDsKLQlzZHJhbTBfYjNjciA9IDA7CiAKIAkvKiBjb21wdXRlIHRoZSBzaXplIG9mIGVhY2ggYmFuayAqLwogCWJhbmtfc2l6ZSA9IHRvdGFsX3NpemUgLyBiYW5rX2NudDsKQEAgLTQ0NCw4ICs0NDIsMTAgQEAKIAkvKiBTRFJBTSBoYXZlIGEgcG93ZXIgb24gZGVsYXksCSA1MDAgbWljcm8gc2hvdWxkIGRvICovCiAJdWRlbGF5KDUwMCk7CiAJc2RyYW0wX2NmZyA9IFNEUkFNMF9DRkdfRENFIHwgU0RSQU0wX0NGR19CUlBGKDEpIHwgU0RSQU0wX0NGR19FQ0NERCB8IFNEUkFNMF9DRkdfRU1EVUxSOworI2lmbmRlZiBDT05GSUdfNDA1RVAgLyogbm90IG9uIFBQQzQwNUVQICovCiAJaWYgKGVjY19vbikKIAkJc2RyYW0wX2NmZyB8PSBTRFJBTTBfQ0ZHX01FTUNISzsKKyNlbmRpZgogCW10c2RyYW0oU0RSQU0wX0NGRywgc2RyYW0wX2NmZyk7CiAKIAlyZXR1cm4gKHRvdGFsX3NpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIuYyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyLmMKaW5kZXggZTA1ZGFmMi4uOGEyMGEyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80NHhfc3BkX2Rkci5jCkBAIC0zODAsOCArMzgwLDYgQEAKIAl1bnNpZ25lZCBjaGFyIGVjYzsKIAl1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXM7CiAJdW5zaWduZWQgbG9uZyBkYXRhX3dpZHRoOwotCXVuc2lnbmVkIGxvbmcgZGltbV8zMmJpdDsKLQl1bnNpZ25lZCBsb25nIGRpbW1fNjRiaXQ7CiAKIAkvKgogCSAqIGdldCBNZW1vcnkgQ29udHJvbGxlciBPcHRpb25zIDAgZGF0YQpAQCAtNDIzLDEwICs0MjEsOCBAQAogCQkJCSh1bnNpZ25lZCBsb25nKXNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSw2KSArCiAJCQkJKCgodW5zaWduZWQgbG9uZylzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sNykpIDw8IDgpOwogCQkJaWYgKGRhdGFfd2lkdGggPT0gNjQgfHwgZGF0YV93aWR0aCA9PSA3MikgewotCQkJCWRpbW1fNjRiaXQgPSBUUlVFOwogCQkJCWNmZzAgfD0gU0RSQU1fQ0ZHMF9ETVdEXzY0OwogCQkJfSBlbHNlIGlmIChkYXRhX3dpZHRoID09IDMyIHx8IGRhdGFfd2lkdGggPT0gNDApIHsKLQkJCQlkaW1tXzMyYml0ID0gVFJVRTsKIAkJCQljZmcwIHw9IFNEUkFNX0NGRzBfRE1XRF8zMjsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRmKCJXQVJOSU5HOiBESU1NIHdpdGggZGF0YXdpZHRoIG9mICVsdSBiaXRzLlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKaW5kZXggNGEyZjMzNy4uODUyMTdlYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKQEAgLTQ0NSw5ICs0NDUsNiBAQAogcGh5c19zaXplX3QgaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7CiAJdW5zaWduZWQgY2hhciBpaWMwX2RpbW1fYWRkcltdID0gU1BEX0VFUFJPTV9BRERSRVNTOwotCXVuc2lnbmVkIGNoYXIgc3BkMFtNQVhfU1BEX0JZVEVTXTsKLQl1bnNpZ25lZCBjaGFyIHNwZDFbTUFYX1NQRF9CWVRFU107Ci0JdW5zaWduZWQgY2hhciAqZGltbV9zcGRbTUFYRElNTVNdOwogCXVuc2lnbmVkIGxvbmcgZGltbV9wb3B1bGF0ZWRbTUFYRElNTVNdID0ge1NEUkFNX05PTkUsIFNEUkFNX05PTkV9OwogCXVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3M7CQkvKiBvbiBib2FyZCBkaW1tIGJhbmtzICovCiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC00NTgsMTIgKzQ1NSw2IEBACiAJbnVtX2RpbW1fYmFua3MgPSBzaXplb2YoaWljMF9kaW1tX2FkZHIpOwogCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBTZXQgdXAgYW4gYXJyYXkgb2YgU1BEIG1hdHJpeGVzLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCWRpbW1fc3BkWzBdID0gc3BkMDsKLQlkaW1tX3NwZFsxXSA9IHNwZDE7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIFJlc2V0IHRoZSBERFItU0RSQU0gY29udHJvbGxlci4KIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAltdHNkcihTRFIwX1NSU1QsIFNEUjBfU1JTVDBfRE1DKTsKQEAgLTEwMDAsNyArOTkxLDYgQEAKIAl1bnNpZ25lZCBsb25nIGF0dHJpYnV0ZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBidWYwLCBidWYxOyAvKiBUT0RPOiBjb2RlIHRvIGJlIGNoYW5nZWQgZm9yIElPUDEuNiB0byBzdXBwb3J0IDQgRElNTXMgKi8KIAl1bnNpZ25lZCBsb25nIGJhbmtjb3VudDsKLQl1bnNpZ25lZCBsb25nIGRkcnR5cGU7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKICNpZmRlZiBDT05GSUdfRERSX0VDQwpAQCAtMTA0NSw4ICsxMDM1LDYgQEAKIAkJCWVsc2UgLyogYmFuayBjb3VudCA9IDggKi8KIAkJCQltY29wdDEgfD0gU0RSQU1fTUNPUFQxXzhfQkFOS1M7CiAKLQkJCS8qIHRlc3QgRERSIHR5cGUgKi8KLQkJCWRkcnR5cGUgPSAodW5zaWduZWQgbG9uZylzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDIpOwogCQkJLyogdGVzdCBmb3IgYnVmZmVyZWQvdW5idWZmZXJlZCwgcmVnaXN0ZXJlZCwgZGlmZmVyZW50aWFsIGNsb2NrcyAqLwogCQkJcmVnaXN0ZXJlZCA9ICh1bnNpZ25lZCBsb25nKXNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjApOwogCQkJYXR0cmlidXRlID0gKHVuc2lnbmVkIGxvbmcpc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyMSk7CkBAIC0xNTAwLDcgKzE0ODgsNiBAQAogCQkJZWxzZQogCQkJCXNkcmFtX2RkcjEgPSBGQUxTRTsKIAotCQkJLyogdF93cl9ucyA9IG1heCh0X3dyX25zLCAodW5zaWduZWQgbG9uZylkaW1tX3NwZFtkaW1tX251bV1bMzZdID4+IDIpOyAqLyAvKiAgbm90IHVzZWQgaW4gdGhpcyBsb29wLiAqLwogCQkJY2FzX2JpdCA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTgpOwogCQkJZGVidWcoImNhc19iaXRbU1BEIGJ5dGUgMThdPSUwMmx4XG4iLCBjYXNfYml0KTsKIApAQCAtMjQ5MCwxMiArMjQ3Nyw2IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJbG9uZyByZmZkX2F2ZXJhZ2U7CiAJbG9uZyBtYXhfc3RhcnQ7Ci0JbG9uZyBtaW5fZW5kOwotCXVuc2lnbmVkIGxvbmcgYmVnaW5fcnFmZFtNQVhSQU5LU107Ci0JdW5zaWduZWQgbG9uZyBiZWdpbl9yZmZkW01BWFJBTktTXTsKLQl1bnNpZ25lZCBsb25nIGVuZF9ycWZkW01BWFJBTktTXTsKLQl1bnNpZ25lZCBsb25nIGVuZF9yZmZkW01BWFJBTktTXTsKLQljaGFyIHdpbmRvd19mb3VuZDsKIAl1bnNpZ25lZCBsb25nIGRseWNhbDsKIAl1bnNpZ25lZCBsb25nIGRseV92YWw7CiAJdW5zaWduZWQgbG9uZyBtYXhfcGFzc19sZW5ndGg7CkBAIC0yNTA2LDYgKzI0ODcsNyBAQAogCXVuc2lnbmVkIGNoYXIgZmFpbF9mb3VuZDsKIAl1bnNpZ25lZCBjaGFyIHBhc3NfZm91bmQ7CiAjaWYgIWRlZmluZWQoQ09ORklHX0REUl9SUURDX0ZJWEVEKQorCWludCB3aW5kb3dfZm91bmQ7CiAJdTMyIHJxZGNfcmVnOwogCXUzMiBycWZkOwogCXUzMiBycWZkX3N0YXJ0OwpAQCAtMjU1OSwxNiArMjU0MSw2IEBACiAjZW5kaWYgLyogQ09ORklHX0REUl9SUURDX0ZJWEVEICovCiAKIAltYXhfc3RhcnQgPSAwOwotCW1pbl9lbmQgPSAwOwotCWJlZ2luX3JxZmRbMF0gPSAwOwotCWJlZ2luX3JmZmRbMF0gPSAwOwotCWJlZ2luX3JxZmRbMV0gPSAwOwotCWJlZ2luX3JmZmRbMV0gPSAwOwotCWVuZF9ycWZkWzBdID0gMDsKLQllbmRfcmZmZFswXSA9IDA7Ci0JZW5kX3JxZmRbMV0gPSAwOwotCWVuZF9yZmZkWzFdID0gMDsKLQl3aW5kb3dfZm91bmQgPSBGQUxTRTsKIAogCW1heF9wYXNzX2xlbmd0aCA9IDA7CiAJbWF4X3N0YXJ0ID0gMDsKQEAgLTI1NzYsNyArMjU0OCw2IEBACiAJY3VycmVudF9wYXNzX2xlbmd0aCA9IDA7CiAJY3VycmVudF9mYWlsX2xlbmd0aCA9IDA7CiAJY3VycmVudF9zdGFydCA9IDA7Ci0Jd2luZG93X2ZvdW5kID0gRkFMU0U7CiAJZmFpbF9mb3VuZCA9IEZBTFNFOwogCXBhc3NfZm91bmQgPSBGQUxTRTsKIApAQCAtMjYyMSw3ICsyNTkyLDYgQEAKIAkJCQlpZiAoZmFpbF9mb3VuZCA9PSBGQUxTRSkgewogCQkJCQlmYWlsX2ZvdW5kID0gVFJVRTsKIAkJCQl9IGVsc2UgaWYgKHBhc3NfZm91bmQgPT0gVFJVRSkgewotCQkJCQl3aW5kb3dfZm91bmQgPSBUUlVFOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80eHhfaWJtX2RkcjJfYXV0b2NhbGliLmMgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80eHhfaWJtX2RkcjJfYXV0b2NhbGliLmMKaW5kZXggNGI4ZTY1YS4uM2M4N2JmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNHh4X2libV9kZHIyX2F1dG9jYWxpYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzR4eF9pYm1fZGRyMl9hdXRvY2FsaWIuYwpAQCAtMTU0LDE4ICsxNTQsMjAgQEAKIAogc3RhdGljIHUzMiAqZ2V0X21lbWJhc2UoaW50IGJ4Y3JfbnVtKQogewotCXVsb25nIGJ4Y2Y7CiAJdTMyICptZW1iYXNlOwogCiAjaWYgZGVmaW5lZChTRFJBTV9SMEJBUykKIAkvKiBCQVMgZnJvbSBNZW1vcnkgUXVldWUgcmFuayByZWcuICovCiAJbWVtYmFzZSA9CiAJICAgICh1MzIgKikoU0RSQU1fUlhCQVNfU0RCQV9ERUNPREUobWZkY3JfYW55KFNEUkFNX1IwQkFTK2J4Y3JfbnVtKSkpOwotCWJ4Y2YgPSAwOwkvKiBqdXN0IHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyICovCiAjZWxzZQotCS8qIEJBUyBmcm9tIFNEUkFNX01CeENGIG1lbSByYW5rIHJlZy4gKi8KLQltZnNkcmFtKFNEUkFNX01CMENGICsgKGJ4Y3JfbnVtPDwyKSwgYnhjZik7Ci0JbWVtYmFzZSA9ICh1MzIgKikoKGJ4Y2YgJiAweGZmZjgwMDAwKSA8PCAzKTsKKwl7CisJCXVsb25nIGJ4Y2Y7CisKKwkJLyogQkFTIGZyb20gU0RSQU1fTUJ4Q0YgbWVtIHJhbmsgcmVnLiAqLworCQltZnNkcmFtKFNEUkFNX01CMENGICsgKGJ4Y3JfbnVtPDwyKSwgYnhjZik7CisJCW1lbWJhc2UgPSAodTMyICopKChieGNmICYgMHhmZmY4MDAwMCkgPDwgMyk7CisJfQogI2VuZGlmCiAKIAlyZXR1cm4gbWVtYmFzZTsKQEAgLTcxOSw3ICs3MjEsOSBAQAogc3RhdGljIHUzMiBEUVNfY2FsaWJyYXRpb25fbWV0aG9kQihzdHJ1Y3QgZGRyYXV0b2NhbCAqY2FsKQogewogCXVsb25nIHJmZGNfcmVnOworI2lmbmRlZiBDT05GSUdfRERSX1JGRENfRklYRUQKIAl1bG9uZyByZmZkOworI2VuZGlmCiAKIAl1bG9uZyBycWRjX3JlZzsKIAl1bG9uZyBycWZkOwpAQCAtODM3LDcgKzg0MSw2IEBACiAJbXRzZHJhbShTRFJBTV9SRkRDLCByZmRjX3JlZyB8IFNEUkFNX1JGRENfUkZGRF9FTkNPREUocmZmZF9hdmVyYWdlKSk7CiAjZW5kaWYgLyogQ09ORklHX0REUl9SRkRDX0ZJWEVEICovCiAKLQlyZmZkID0gcmZmZF9hdmVyYWdlOwogCWluX3dpbmRvdyA9IDA7CiAKIAljdXJyX3dpbl9taW4gPSBjdXJyX3dpbl9tYXggPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNHh4X3BjaWUuYyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzR4eF9wY2llLmMKaW5kZXggYTg3ZTkzYi4uNDNiOTcyZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNHh4X3BjaWUuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80eHhfcGNpZS5jCkBAIC0yMjcsNyArMjI3LDYgQEAKIHN0YXRpYyBpbnQgcGNpZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHVuc2lnbmVkIGludCBkZXZmbiwKIAlpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgKnZhbCkgewogCi0JdTggKmFkZHJlc3M7CiAJKnZhbCA9IDA7CiAKIAlpZiAodmFsaWRhdGVfZW5kcG9pbnQoaG9zZSkpCkBAIC0yNTUsNyArMjU0LDcgQEAKIAkJKChQQ0lfQlVTKGRldmZuKSA9PSAwKSB8fCAoUENJX0JVUyhkZXZmbikgPT0gMSkpKQogCQlyZXR1cm4gMDsKIAotCWFkZHJlc3MgPSBwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKKwlwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKIAlvZmZzZXQgKz0gZGV2Zm4gPDwgNDsKIAogCS8qCkBAIC0yODcsOCArMjg2LDYgQEAKIHN0YXRpYyBpbnQgcGNpZV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCiAJaW50IG9mZnNldCwgaW50IGxlbiwgdTMyIHZhbCkgewogCi0JdTggKmFkZHJlc3M7Ci0KIAlpZiAodmFsaWRhdGVfZW5kcG9pbnQoaG9zZSkpCiAJCXJldHVybiAwOwkJLyogTm8gdXBzdHJlYW0gY29uZmlnIGFjY2VzcyAqLwogCkBAIC0zMDcsNyArMzA0LDcgQEAKIAkJKChQQ0lfQlVTKGRldmZuKSA9PSAwKSB8fCAoUENJX0JVUyhkZXZmbikgPT0gMSkpKQogCQlyZXR1cm4gMDsKIAotCWFkZHJlc3MgPSBwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKKwlwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKIAlvZmZzZXQgKz0gZGV2Zm4gPDwgNDsKIAogCS8qCkBAIC0xMDYzLDcgKzEwNjAsNiBAQAogdm9pZCBwcGM0eHhfc2V0dXBfcGNpZV9yb290cG9pbnQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgcG9ydCkKIHsKIAl2b2xhdGlsZSB2b2lkICptYmFzZSA9IE5VTEw7Ci0Jdm9sYXRpbGUgdm9pZCAqcm1iYXNlID0gTlVMTDsKIAogCXBjaV9zZXRfb3BzKGhvc2UsCiAJCSAgICBwY2llX3JlYWRfY29uZmlnX2J5dGUsCkBAIC0xMDc2LDE4ICsxMDcyLDE1IEBACiAJc3dpdGNoIChwb3J0KSB7CiAJY2FzZSAwOgogCQltYmFzZSA9ICh1MzIgKilDT05GSUdfU1lTX1BDSUUwX1hDRkdCQVNFOwotCQlybWJhc2UgPSAodTMyICopQ09ORklHX1NZU19QQ0lFMF9DRkdCQVNFOwogCQlob3NlLT5jZmdfZGF0YSA9ICh1OCAqKUNPTkZJR19TWVNfUENJRTBfQ0ZHQkFTRTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQltYmFzZSA9ICh1MzIgKilDT05GSUdfU1lTX1BDSUUxX1hDRkdCQVNFOwotCQlybWJhc2UgPSAodTMyICopQ09ORklHX1NZU19QQ0lFMV9DRkdCQVNFOwogCQlob3NlLT5jZmdfZGF0YSA9ICh1OCAqKUNPTkZJR19TWVNfUENJRTFfQ0ZHQkFTRTsKIAkJYnJlYWs7CiAjaWYgQ09ORklHX1NZU19QQ0lFX05SX1BPUlRTID4gMgogCWNhc2UgMjoKIAkJbWJhc2UgPSAodTMyICopQ09ORklHX1NZU19QQ0lFMl9YQ0ZHQkFTRTsKLQkJcm1iYXNlID0gKHUzMiAqKUNPTkZJR19TWVNfUENJRTJfQ0ZHQkFTRTsKIAkJaG9zZS0+Y2ZnX2RhdGEgPSAodTggKilDT05GSUdfU1lTX1BDSUUyX0NGR0JBU0U7CiAJCWJyZWFrOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9jbWRfZWNjdGVzdC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvY21kX2VjY3Rlc3QuYwppbmRleCA1NDJhYjY5Li4yMzFmNjllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9jbWRfZWNjdGVzdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L2NtZF9lY2N0ZXN0LmMKQEAgLTExMyw4ICsxMTMsNiBAQAogICovCiBzdGF0aWMgdm9pZCBpbmplY3RfZWNjX2Vycm9yKHZvaWQgKnB0ciwgaW50IHBhcikKIHsKLQl1MzIgdmFsOwotCiAJLyoKIAkgKiBUYWtlbiBmcm9tIFBQQzQ2MEVYL0VYci9HVCB1c2VycyBtYW51YWwgKFJldiAxLjIxKQogCSAqIDIyLjIuMTcuMTMgRUNDIERpYWdub3N0aWNzCkBAIC0xMjQsNyArMTIyLDcgQEAKIAkgKi8KIAogCW91dF9iZTMyKHB0ciwgMHgwMDAwMDAwMCk7Ci0JdmFsID0gaW5fYmUzMihwdHIpOworCWluX2JlMzIocHRyKTsKIAogCS8qIDYuIFNldCBtZW1vcnkgY29udHJvbGxlciB0byBubyBlcnJvciBjaGVja2luZyAqLwogCXNldF9tY29wdDFfbWNoayhTRFJBTV9NQ09QVDFfTUNIS19OT04pOwpAQCAtMTM2LDcgKzEzNCw3IEBACiAJCW91dF9iZTMyKHB0ciwgaW5fYmUzMihwdHIpIF4gMHgwMDAwMDAwMyk7CiAKIAkvKiA4LiBXYWl0IGZvciBTRFJBTSBpZGxlICovCi0JdmFsID0gaW5fYmUzMihwdHIpOworCWluX2JlMzIocHRyKTsKIAlzZXRfbWNvcHQxX21jaGsoU0RSQU1fTUNPUFQxX01DSEtfQ0hLX1JFUCk7CiAKIAkvKiBXYWl0IGZvciBTRFJBTSBpZGxlICovCkBAIC0xNTEsNyArMTQ5LDYgQEAKIAl1MzIgZW5kX2FkZHJlc3M7CiAJdTMyIGFkZHJlc3NfaW5jcmVtZW50OwogCXUzMiBtY29wdDE7Ci0JdTMyIHZhbDsKIAogCS8qCiAJICogRmlsbCBFQ0MgcGFyaXR5IGJ5dGUgYWdhaW4uIE90aGVyd2lzZSBmdXJ0aGVyIGFjY2Vzc2VzIHRvCkBAIC0xNTksNyArMTU2LDcgQEAKIAkgKi8KIAogCS8qIFdhaXQgZm9yIFNEUkFNIGlkbGUgKi8KLQl2YWwgPSBpbl9iZTMyKDB4MDAwMDAwMDApOworCWluX2JlMzIoMHgwMDAwMDAwMCk7CiAJc2V0X21jb3B0MV9tY2hrKFNEUkFNX01DT1BUMV9NQ0hLX0dFTik7CiAKIAkvKiBFQ0MgYml0IHNldCBtZXRob2QgZm9yIG5vbi1jYWNoZWQgbWVtb3J5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9pb3A0ODBfdWFydC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvaW9wNDgwX3VhcnQuYwppbmRleCAwZTM0MjNmLi4wMjdjYTMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9pb3A0ODBfdWFydC5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L2lvcDQ4MF91YXJ0LmMKQEAgLTEzNCw3ICsxMzQsNiBAQAogCiBpbnQgc2VyaWFsX2luaXQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgY2hhciB2YWw7CiAJdW5zaWduZWQgc2hvcnQgYnJfcmVnOwogCiAJYnJfcmVnID0gKCgoKENPTkZJR19DUFVDTE9DSyAqIDEwMDAwMDApIC8gMTYpIC8gZ2QtPmJhdWRyYXRlKSAtIDEpOwpAQCAtMTQ5LDcgKzE0OCw3IEBACiAJb3V0XzgoKHU4ICopU1BVX0JBU0UgKyBzcHVfUnhDbWQsIDB4YjApOwkvKiBFbmFibGUgUnggKi8KIAlvdXRfOCgodTggKilTUFVfQkFTRSArIHNwdV9UeENtZCwgMHg5Yyk7CS8qIEVuYWJsZSBUeCAqLwogCW91dF84KCh1OCAqKVNQVV9CQVNFICsgc3B1X0hhbmRzaGtfcmMsIDB4ZmYpOwkvKiBDbGVhciBIYW5kc2hha2UgKi8KLQl2YWwgPSBpbl84KCh1OCAqKVNQVV9CQVNFICsgc3B1X1J4QnVmZik7CS8qIER1bW15IHJlYWQsIHRvIGNsZWFyIHJlY2VpdmVyICovCisJaW5fOCgodTggKilTUFVfQkFTRSArIHNwdV9SeEJ1ZmYpOwkvKiBEdW1teSByZWFkLCB0byBjbGVhciByZWNlaXZlciAqLwogCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3VzYl9vaGNpLmMgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91c2Jfb2hjaS5jCmluZGV4IGZlMDkxZTMuLjA2NTczMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3VzYl9vaGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdXNiX29oY2kuYwpAQCAtNzUzLDEwICs3NTMsOSBAQAogCiBzdGF0aWMgdm9pZCBkbF90cmFuc2Zlcl9sZW5ndGgodGRfdCAqIHRkKQogewotCV9fdTMyIHRkSU5GTywgdGRCRSwgdGRDQlA7CisJX191MzIgdGRCRSwgdGRDQlA7CiAJdXJiX3ByaXZfdCAqbHVyYl9wcml2ID0gJnVyYl9wcml2OwogCi0JdGRJTkZPID0gb2hjaV9jcHVfdG9fbGUzMiAodGQtPmh3SU5GTyk7CiAJdGRCRSAgID0gb2hjaV9jcHVfdG9fbGUzMiAodGQtPmh3QkUpOwogCXRkQ0JQICA9IG9oY2lfY3B1X3RvX2xlMzIgKHRkLT5od0NCUCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb25maWdfbXBjODV4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbmZpZ19tcGM4NXh4LmgKaW5kZXggYzNkNmJhOS4uOTgxZDYzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbmZpZ19tcGM4NXh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbmZpZ19tcGM4NXh4LmgKQEAgLTY0LDYgKzY0LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX0RFRkFVTFQJMHhmZjcwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX05NR19ERFIxMjAKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9OTUdfTEJDMTAzCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CiAKICNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1NTUpCiAjZGVmaW5lIENPTkZJR19NQVhfQ1BVUwkJCTEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBlZjUwNzZiLi4yMDkxMDNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0zOTIsMTcgKzM5MiwxNyBAQAogICovCiAKICNkZWZpbmUgTUFTMF9UTEJTRUxfTVNLCTB4MzAwMDAwMDAKLSNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJKCh4IDw8IDI4KSAmIE1BUzBfVExCU0VMX01TSykKKyNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJKCgoeCkgPDwgMjgpICYgTUFTMF9UTEJTRUxfTVNLKQogI2RlZmluZSBNQVMwX0VTRUxfTVNLCTB4MEZGRjAwMDAKLSNkZWZpbmUgTUFTMF9FU0VMKHgpCSgoeCA8PCAxNikgJiBNQVMwX0VTRUxfTVNLKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJKCgoeCkgPDwgMTYpICYgTUFTMF9FU0VMX01TSykKICNkZWZpbmUgTUFTMF9OVih4KQkoKHgpICYgMHgwMDAwMEZGRikKIAogI2RlZmluZSBNQVMxX1ZBTElECTB4ODAwMDAwMDAKICNkZWZpbmUgTUFTMV9JUFJPVAkweDQwMDAwMDAwCi0jZGVmaW5lIE1BUzFfVElEKHgpCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQorI2RlZmluZSBNQVMxX1RJRCh4KQkoKCh4KSA8PCAxNikgJiAweDNGRkYwMDAwKQogI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCi0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDgpICYgMHgwMDAwMEYwMCkKLSNkZWZpbmUgVFNJWkVfVE9fQllURVMoeCkgKChwaHlzX2FkZHJfdCkoMVVMIDw8ICgodHNpemUgKiAyKSArIDEwKSkpCisjZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCgoeCkgPDwgOCkgJiAweDAwMDAwRjAwKQorI2RlZmluZSBUU0laRV9UT19CWVRFUyh4KSAoMVVMTCA8PCAoKCh4KSAqIDIpICsgMTApKQogCiAjZGVmaW5lIE1BUzJfRVBOCTB4RkZGRkYwMDAKICNkZWZpbmUgTUFTMl9YMAkJMHgwMDAwMDA0MApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDFiOTZiODQuLjRlMzI2MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTUxMyw3ICs1MTMsMTMgQEAKIAogI2RlZmluZSBTUFJOX1RMQjBDRkcJMHgyQjAJLyogVExCIDAgQ29uZmlnIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fVExCMUNGRwkweDJCMQkvKiBUTEIgMSBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEIwUFMJMHgxNTgJLyogVExCIDAgUGFnZSBTaXplIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVExCMVBTCTB4MTU5CS8qIFRMQiAxIFBhZ2UgU2l6ZSBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX01NVUNTUjAJMHgzZjQJLyogTU1VIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTU1VQ0ZHCTB4M0Y3CS8qIE1NVSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1NVUNGR19NQVZOCTB4MDAwMDAwMDMJLyogTU1VIEFyY2hpdGVjdHVyZSBWZXJzaW9uIE51bWJlciAqLworI2RlZmluZSBNTVVDRkdfTUFWTl9WMQkweDAwMDAwMDAwCS8qIHYxLjAgKi8KKyNkZWZpbmUgTU1VQ0ZHX01BVk5fVjIJMHgwMDAwMDAwMQkvKiB2Mi4wICovCiAjZGVmaW5lIFNQUk5fTUFTMAkweDI3MAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9NQVMxCTB4MjcxCS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMSAqLwogI2RlZmluZSBTUFJOX01BUzIJMHgyNzIJLyogTU1VIEFzc2lzdCBSZWdpc3RlciAyICovCmRpZmYgLS1naXQgYS9ib2FyZC9jc2IyMjYvTWFrZWZpbGUgYi9ib2FyZC9BbmRlc1RlY2gvYWRwLWFnMTAxcC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDc4JQpjb3B5IGZyb20gYm9hcmQvY3NiMjI2L01ha2VmaWxlCmNvcHkgdG8gYm9hcmQvQW5kZXNUZWNoL2FkcC1hZzEwMXAvTWFrZWZpbGUKaW5kZXggNmZlOWJlYy4uMDNjM2ZmNCAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlCisrKyBiL2JvYXJkL0FuZGVzVGVjaC9hZHAtYWcxMDFwL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgotIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgQW5kZXMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorIyBTaGF3biBMaW4sIEFuZGVzIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gPG5vYnVoaXJvQGFuZGVzdGVjaC5jb20+CisjIE1hY3BhdWwgTGluLCBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uIDxtYWNwYXVsQGFuZGVzdGVjaC5jb20+CiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAjIHByb2plY3QuCkBAIC0yNSwxMiArMjYsMTIgQEAKIAogTElCCT0gJChvYmopbGliJChCT0FSRCkubwogCi1DT0JKUwk6PSBjc2IyMjYubyBmbGFzaC5vCitDT0JKUwk6PSBhZHAtYWcxMDFwLm8KIAotU1JDUwk6PSAkKENPQkpTOi5vPS5jKQotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSAkKFNPQkpTKSkKIAotJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChPQkpTKQogCSQoY2FsbCBjbWRfbGlua19vX3RhcmdldCwgJChPQkpTKSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvQW5kZXNUZWNoL2FkcC1hZzEwMXAvYWRwLWFnMTAxcC5jIGIvYm9hcmQvQW5kZXNUZWNoL2FkcC1hZzEwMXAvYWRwLWFnMTAxcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDIwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9BbmRlc1RlY2gvYWRwLWFnMTAxcC9hZHAtYWcxMDFwLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBTaGF3biBMaW4sIEFuZGVzIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gPG5vYnVoaXJvQGFuZGVzdGVjaC5jb20+CisgKiBNYWNwYXVsIExpbiwgQW5kZXMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiA8bWFjcGF1bEBhbmRlc3RlY2guY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxuZXRkZXYuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGZhcmFkYXkvZnRzZGMwMTAuaD4KKyNpbmNsdWRlIDxmYXJhZGF5L2Z0c21jMDIwLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisvKgorICogTWlzY2VsbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGl6YXRpb25zCisgKi8KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIHJlZmVyIHRvIEJPT1RfUEFSQU1FVEVSX1BBX0JBU0Ugd2l0aGluCisJICogImxpbnV4L2FyY2gvbmRzMzIvaW5jbHVkZS9hc20vbWlzY19zcGVjLmgiCisJICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9BRFBBRzEwMVA7CisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IFBIWVNfU0RSQU1fMCArIDB4NDAwOworCisJZnRzbWMwMjBfaW5pdCgpOwkvKiBpbml0aWFsaXplIEZsYXNoICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNkcmFtX2Jhc2UgPSBQSFlTX1NEUkFNXzA7CisJdW5zaWduZWQgbG9uZyBleHBlY3RlZF9zaXplID0gUEhZU19TRFJBTV8wX1NJWkU7CisJdW5zaWduZWQgbG9uZyBhY3R1YWxfc2l6ZTsKKworCWFjdHVhbF9zaXplID0gZ2V0X3JhbV9zaXplKCh2b2lkICopc2RyYW1fYmFzZSwgZXhwZWN0ZWRfc2l6ZSk7CisKKwlnZC0+cmFtX3NpemUgPSBhY3R1YWxfc2l6ZTsKKworCWlmIChleHBlY3RlZF9zaXplICE9IGFjdHVhbF9zaXplKSB7CisJCXByaW50ZigiV2FybmluZzogT25seSAlbHUgb2YgJWx1IE1pQiBTRFJBTSBpcyB3b3JraW5nXG4iLAorCQkJCWFjdHVhbF9zaXplID4+IDIwLCBleHBlY3RlZF9zaXplID4+IDIwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJkKQoreworCXJldHVybiBmdG1hYzEwMF9pbml0aWFsaXplKGJkKTsKK30KKwordWxvbmcgYm9hcmRfZmxhc2hfZ2V0X2xlZ2FjeSh1bG9uZyBiYXNlLCBpbnQgYmFua251bSwgZmxhc2hfaW5mb190ICppbmZvKQoreworCWlmIChiYW5rbnVtID09IDApIHsJLyogbm9uLUNGSSBib290IGZsYXNoICovCisJCWluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV84QklUOworCQlpbmZvLT5jaGlwd2lkdGggPSBGTEFTSF9DRklfQlk4OworCQlpbmZvLT5pbnRlcmZhY2UgPSBGTEFTSF9DRklfWDg7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworaW50IGJvYXJkX21tY19pbml0KGJkX3QgKmJpcykKK3sKKwlmdHNkYzAxMF9tbWNfaW5pdCgwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL01ha2VmaWxlIGIvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvTWFrZWZpbGUKaW5kZXggMzU5ZjU5MC4uNTlmZDQ2NSAxMDA2NDQKLS0tIGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvTWFrZWZpbGUKKysrIGIvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvTWFrZWZpbGUKQEAgLTMyLDcgKzMyLDYgQEAKIENPQkpTLXkJOj0gJChCT0FSRCkubwogQ09CSlMtJChDT05GSUdfQ01EX0lERSkgKz0gLi4vY29tbW9uL2NmaWRlLm8KIENPQkpTLSQoQ09ORklHX0VQTEVEKSArPSAuLi9jb21tb24vZXBsZWQubwotQ09CSlMtJChDT05GSUdfR1BJTykgKz0gZ3Bpby5vCiBDT0JKUy0kKENPTkZJR19TRVZFTlNFRykgKz0gLi4vY29tbW9uL3NldmVuc2VnLm8KIAogU09CSlMteQk6PSB0ZXh0X2Jhc2UubwpkaWZmIC0tZ2l0IGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvY3VzdG9tX2ZwZ2EuaCBiL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL2N1c3RvbV9mcGdhLmgKaW5kZXggZjdmMzg1My4uZmQzZWM5YSAxMDA2NDQKLS0tIGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvY3VzdG9tX2ZwZ2EuaAorKysgYi9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9jdXN0b21fZnBnYS5oCkBAIC01MSw2ICs1MSw3IEBACiAvKiBsZWRfcGlvLnMxIGlzIGEgYWx0ZXJhX2F2YWxvbl9waW8gKi8KICNkZWZpbmUgTEVEX1BJT19CQVNFIDB4ODIxMjA4NzAKICNkZWZpbmUgTEVEX1BJT19XSURUSCA4CisjZGVmaW5lIExFRF9QSU9fUlNUVkFMIDB4MAogCiAvKiBoaWdoX3Jlc190aW1lci5zMSBpcyBhIGFsdGVyYV9hdmFsb25fdGltZXIgKi8KICNkZWZpbmUgQ09ORklHX1NZU19USU1FUl9CQVNFIDB4ODIxMjA4MjAKZGlmZiAtLWdpdCBhL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL2dwaW8uYyBiL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzMDU2NC4uMDAwMDAwMAotLS0gYS9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9ncGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogYm9hcmQgZ3BpbyBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgotICovCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZm5kZWYgQ09ORklHX1NZU19HUElPX0JBU0UKLQotI2RlZmluZSBBTFRFUkFfUElPX0JBU0UgTEVEX1BJT19CQVNFCi0jZGVmaW5lIEFMVEVSQV9QSU9fV0lEVEggTEVEX1BJT19XSURUSAotI2RlZmluZSBBTFRFUkFfUElPX0RBVEEgKEFMVEVSQV9QSU9fQkFTRSArIDApCi0jZGVmaW5lIEFMVEVSQV9QSU9fRElSIChBTFRFUkFfUElPX0JBU0UgKyA0KQotc3RhdGljIHUzMiBwaW9fZGF0YV9yZWc7Ci1zdGF0aWMgdTMyIHBpb19kaXJfcmVnOwotCi1pbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXJldHVybiAwOwotfQotCi1pbnQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCXUzMiBtYXNrID0gMSA8PCBncGlvOwotCXdyaXRlbChwaW9fZGlyX3JlZyAmPSB+bWFzaywgQUxURVJBX1BJT19ESVIpOwotCXJldHVybiAwOwotfQotCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl1MzIgbWFzayA9IDEgPDwgZ3BpbzsKLQlpZiAodmFsdWUpCi0JCXBpb19kYXRhX3JlZyB8PSBtYXNrOwotCWVsc2UKLQkJcGlvX2RhdGFfcmVnICY9IH5tYXNrOwotCXdyaXRlbChwaW9fZGF0YV9yZWcsIEFMVEVSQV9QSU9fREFUQSk7Ci0Jd3JpdGVsKHBpb19kaXJfcmVnIHw9IG1hc2ssIEFMVEVSQV9QSU9fRElSKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JdTMyIG1hc2sgPSAxIDw8IGdwaW87Ci0JaWYgKHBpb19kaXJfcmVnICYgbWFzaykKLQkJcmV0dXJuIChwaW9fZGF0YV9yZWcgJiBtYXNrKSA/IDEgOiAwOwotCWVsc2UKLQkJcmV0dXJuIChyZWFkbChBTFRFUkFfUElPX0RBVEEpICYgbWFzaykgPyAxIDogMDsKLX0KLQotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JdTMyIG1hc2sgPSAxIDw8IGdwaW87Ci0JaWYgKHZhbHVlKQotCQlwaW9fZGF0YV9yZWcgfD0gbWFzazsKLQllbHNlCi0JCXBpb19kYXRhX3JlZyAmPSB+bWFzazsKLQl3cml0ZWwocGlvX2RhdGFfcmVnLCBBTFRFUkFfUElPX0RBVEEpOwotfQotCi1pbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKQotewotCXJldHVybiAoKHVuc2lnbmVkKW51bWJlcikgPCBBTFRFUkFfUElPX1dJRFRIOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9uaW9zMi1nZW5lcmljLmMgYi9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9uaW9zMi1nZW5lcmljLmMKaW5kZXggNDllZjgwZC4uMGY4ODI3NSAxMDA2NDQKLS0tIGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvbmlvczItZ2VuZXJpYy5jCisrKyBiL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL25pb3MyLWdlbmVyaWMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPG5ldGRldi5oPgogI2luY2x1ZGUgPG10ZC9jZmlfZmxhc2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCiB2b2lkIHRleHRfYmFzZV9ob29rKHZvaWQpOyAvKiBub3AgaG9vayBmb3IgdGV4dF9iYXNlLlMgKi8KIApAQCAtNDMsNiArNDQsMTMgQEAKIGludCBib2FyZF9lYXJseV9pbml0X2Yodm9pZCkKIHsKIAl0ZXh0X2Jhc2VfaG9vaygpOworI2lmZGVmIENPTkZJR19BTFRFUkFfUElPCisjaWZkZWYgTEVEX1BJT19CQVNFCisJYWx0ZXJhX3Bpb19pbml0KExFRF9QSU9fQkFTRSwgTEVEX1BJT19XSURUSCwgJ28nLAorCQkJTEVEX1BJT19SU1RWQUwsICgxIDw8IExFRF9QSU9fV0lEVEgpIC0gMSwKKwkJCSJsZWQiKTsKKyNlbmRpZgorI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX0ZMQVNIKSAmJiBkZWZpbmVkKENPTkZJR19FTlZfQUREUikKIAllYXJseV9mbGFzaF9jbWRfcmVzZXQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95dWNjYS9jbWRfeXVjY2EuYyBiL2JvYXJkL2FtY2MveXVjY2EvY21kX3l1Y2NhLmMKaW5kZXggZTljZDMzMy4uZjQ1MzI1ZSAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy95dWNjYS9jbWRfeXVjY2EuYworKysgYi9ib2FyZC9hbWNjL3l1Y2NhL2NtZF95dWNjYS5jCkBAIC01MSw3ICs1MSw2IEBACiAJdWNoYXIJY2hpcDsKIAl1bG9uZwlkYXRhOwogCWludAluYnl0ZXM7Ci0JZXh0ZXJuIGNoYXIgY29uc29sZV9idWZmZXJbXTsKIAogCWNoYXIgc3lzQ2xvY2tbNF07CiAJY2hhciBjcHVDbG9ja1s0XTsKZGlmZiAtLWdpdCBhL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2FybS1lYmkuaCBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2FybS1lYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg1ZTNmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvYXJtLWViaS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTEKKyAqIExpbmFybworICogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIChFQkkpCisgKiBmb3VuZCBpbiB0aGUgQVJNIEludGVncmF0b3IgQVAgYW5kIENQIHJlZmVyZW5jZSBkZXNpZ25zCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FSTV9FQklfSAorI2RlZmluZSBfX0FSTV9FQklfSAorCisjZGVmaW5lIEVCSV9CQVNFCQkweDEyMDAwMDAwCisKKyNkZWZpbmUgRUJJX0NTUjBfUkVHCQkweDAwIC8qIENTMCA9IEJvb3QgUk9NICovCisjZGVmaW5lIEVCSV9DU1IxX1JFRwkJMHgwNCAvKiBDUzEgPSBGbGFzaCAqLworI2RlZmluZSBFQklfQ1NSMl9SRUcJCTB4MDggLyogQ1MyID0gU1NSQU0gKi8KKyNkZWZpbmUgRUJJX0NTUjNfUkVHCQkweDBDIC8qIENTMyA9IEV4cGFuc2lvbiBtZW1vcnkgKi8KKy8qCisgKiBUaGUgZm91ciB1cHBlciBiaXRzIGFyZSB0aGUgd2FpdHN0YXRlcyBmb3IgZWFjaCBjaGlwIHNlbGVjdAorICogMHgwMCA9IDIgY3ljbGVzLCAweDEwID0gMyBjeWNsZXMsIC4uLiAweGUwID0gMTYgY3ljbGVzLCAweGYwID0gMTYgY3ljbGVzCisgKi8KKyNkZWZpbmUgRUJJX0NTUl9XQUlUX01BU0sJMHhGMAorLyogV2hldGhlciBtZW1vcnkgaXMgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzICovCisjZGVmaW5lIEVCSV9DU1JfU1lOQ19NQVNLCTB4RjcKKyNkZWZpbmUgRUJJX0NTUl9BU1lOQwkJMHgwMAorI2RlZmluZSBFQklfQ1NSX1NZTkMJCTB4MDgKKy8qIFdoZXRoZXIgbWVtb3J5IGlzIHdyaXRlIGVuYWJsZWQgb3Igbm90ICovCisjZGVmaW5lIEVCSV9DU1JfV1JFTl9NQVNLCTB4RkIKKyNkZWZpbmUgRUJJX0NTUl9XUkVOX0RJU0FCTEUJMHgwMAorI2RlZmluZSBFQklfQ1NSX1dSRU5fRU5BQkxFCTB4MDQKKy8qIE1lbW9yeSBiaXQgd2lkdGggZm9yIGVhY2ggY2hpcCBzZWxlY3QgKi8KKyNkZWZpbmUgRUJJX0NTUl9NRU1TSVpFX01BU0sJMHhGQworI2RlZmluZSBFQklfQ1NSX01FTVNJWkVfOEJJVAkweDAwCisjZGVmaW5lIEVCSV9DU1JfTUVNU0laRV8xNkJJVAkweDAxCisjZGVmaW5lIEVCSV9DU1JfTUVNU0laRV8zMkJJVAkweDAyCisKKy8qCisgKiBUaGUgbG9jayByZWdpc3RlciBuZWVkIHRvIGJlIHdyaXR0ZW4gd2l0aCAweGEwNWYgYmVmb3JlIGFueXRoaW5nIGluIHRoZQorICogRUJJIGNhbiBiZSBjaGFuZ2VkLgorICovCisjZGVmaW5lIEVCSV9MT0NLX1JFRwkJMHgyMAorI2RlZmluZSBFQklfVU5MT0NLX01BR0lDCTB4QTA1RgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2NvbmZpZy5tayBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2NvbmZpZy5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI1N2FmMS4uMDAwMDAwMAotLS0gYS9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9jb25maWcubWsKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMKLSMgaW1hZ2Ugc2hvdWxkIGJlIGxvYWRlZCBhdCAweDAxMDAwMDAwCi0jCi0KLUNPTkZJR19TWVNfVEVYVF9CQVNFID0gMHgwMTAwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvaW50ZWdyYXRvci1zYy5oIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvaW50ZWdyYXRvci1zYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OWRjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9pbnRlZ3JhdG9yLXNjLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMQorICogTGluYXJvCisgKiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sbGVyIChTQykgYW5kCisgKiB0aGUgc2ltaWxhciAiQ1AgQ29udHJvbGxlciIgZm91bmQgaW4gdGhlIEFSTSBJbnRlZ3JhdG9yL0FQIGFuZAorICogSW50ZWdyYXRvci9DUCByZWZlcmVuY2UgZGVzaWducworICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19BUk1fU0NfSAorI2RlZmluZSBfX0FSTV9TQ19ICisKKyNkZWZpbmUgU0NfQkFTRQkJCTB4MTEwMDAwMDAKKworLyoKKyAqIFRoZSBzeXN0ZW0gY29udHJvbGxlciByZWdpc3RlcnMKKyAqLworI2RlZmluZSBTQ19JRF9PRkZTRVQJCTB4MDAKKyNkZWZpbmUgU0NfT1NDX09GRlNFVAkJMHgwNAorLyogU2V0dGluZyB0aGlzIGJpdCBzd2l0Y2hlcyB0byAyNSBNSHogbW9kZSwgY2xlYXIgbWVhbnMgMzMgTUh6ICovCisjZGVmaW5lIFNDX09TQ19ESVZYWQkJKDEgPDwgOCkKKyNkZWZpbmUgU0NfQ1RSTFNfT0ZGU0VUCQkweDA4CisjZGVmaW5lIFNDX0NUUkxDX09GRlNFVAkJMHgwQworLyogU2V0IGJpdHMgYnkgd3JpdGluZyBDVFJMUywgY2xlYXIgYml0cyBieSB3cml0aW5nIENUUkxDICovCisjZGVmaW5lIFNDX0NUUkxfU09GVFJFU0VUCSgxIDw8IDApCisjZGVmaW5lIFNDX0NUUkxfRkxBU0hWUFAJKDEgPDwgMSkKKyNkZWZpbmUgU0NfQ1RSTF9GTEFTSFdQCQkoMSA8PCAyKQorI2RlZmluZSBTQ19DVFJMX1VBUlQxRFRSCSgxIDw8IDQpCisjZGVmaW5lIFNDX0NUUkxfVUFSVDFSVFMJKDEgPDwgNSkKKyNkZWZpbmUgU0NfQ1RSTF9VQVJUMERUUgkoMSA8PCA2KQorI2RlZmluZSBTQ19DVFJMX1VBUlQwUlRTCSgxIDw8IDcpCisjZGVmaW5lIFNDX0RFQ19PRkZTRVQJCTB4MTAKKyNkZWZpbmUgU0NfQVJCX09GRlNFVAkJMHgxNAorI2RlZmluZSBTQ19QQ0lfT0ZGU0VUCQkweDE4CisjZGVmaW5lIFNDX1BDSV9QQ0lFTgkJKDEgPDwgMCkKKyNkZWZpbmUgU0NfUENJX1BDSUJJTlRfQ0xSCSgxIDw8IDEpCisjZGVmaW5lIFNDX0xPQ0tfT0ZGU0VUCQkweDFDCisjZGVmaW5lIFNDX0xCRkFERFJfT0ZGU0VUCTB4MjAKKyNkZWZpbmUgU0NfTEJGQ09ERV9PRkZTRVQJMHgyNAorCisjZGVmaW5lIFNDX0lEIChTQ19CQVNFICsgU0NfSURfT0ZGU0VUKQorI2RlZmluZSBTQ19PU0MgKFNDX0JBU0UgKyBTQ19PU0NfT0ZGU0VUKQorI2RlZmluZSBTQ19DVFJMUyAoU0NfQkFTRSArIFNDX0NUUkxTX09GRlNFVCkKKyNkZWZpbmUgU0NfQ1RSTEMgKFNDX0JBU0UgKyBTQ19DVFJMQ19PRkZTRVQpCisjZGVmaW5lIFNDX0RFQyAoU0NfQkFTRSArIFNDX0RFQ19PRkZTRVQpCisjZGVmaW5lIFNDX0FSQiAoU0NfQkFTRSArIFNDX0FSQl9PRkZTRVQpCisjZGVmaW5lIFNDX1BDSSAoU0NfQkFTRSArIFNDX1BDSV9PRkZTRVQpCisjZGVmaW5lIFNDX0xPQ0sgKFNDX0JBU0UgKyBTQ19MT0NLX09GRlNFVCkKKyNkZWZpbmUgU0NfTEJGQUREUiAoU0NfQkFTRSArIFNDX0xCRkFERFJfT0ZGU0VUKQorI2RlZmluZSBTQ19MQkZDT0RFIChTQ19CQVNFICsgU0NfTEJGQ09ERV9PRkZTRVQpCisKKy8qCisgKiBUaGUgSW50ZWdyYXRvci9DUCBhcyBhIHNtYWxsZXIgc2V0IG9mIHJlZ2lzdGVycywgYXQgYSBkaWZmZXJlbnQKKyAqIG9mZnNldCAtIHByb2JhYmx5IG5vdCB0byBkaXN0dXJiIG9sZCBzb2Z0d2FyZS4KKyAqLworCisjZGVmaW5lIENQX0JBU0UJCQkweENCMDAwMDAwCisKKyNkZWZpbmUgQ1BfSURGSUVMRF9PRkZTRVQJMHgwMAorI2RlZmluZSBDUF9GTEFTSFBST0dfT0ZGU0VUCTB4MDQKKyNkZWZpbmUgQ1BfRkxBU0hQUk9HX0ZMVlBQRU4JKDEgPDwgMCkKKyNkZWZpbmUgQ1BfRkxBU0hQUk9HX0ZMV1JFTgkoMSA8PCAxKQorI2RlZmluZSBDUF9GTEFTSFBST0dfRkxBU0hTSVpFCSgxIDw8IDIpCisjZGVmaW5lIENQX0ZMQVNIUFJPR19FWFRSQUJBTksJKDEgPDwgMykKKyNkZWZpbmUgQ1BfSU5UUkVHX09GRlNFVAkweDA4CisjZGVmaW5lIENQX0RFQ09ERV9PRkZTRVQJMHgwQworCisjZGVmaW5lIENQX0lERklFTEQgKENQX0JBU0UgKyBDUF9JRF9PRkZTRVQpCisjZGVmaW5lIENQX0ZMQVNIUFJPRyAoQ1BfQkFTRSArIENQX0ZMQVNIUFJPR19PRkZTRVQpCisjZGVmaW5lIENQX0lOVFJFRyAoQ1BfQkFTRSArIENQX0lOVFJFR19PRkZTRVQpCisjZGVmaW5lIENQX0RFQ09ERSAoQ1BfQkFTRSArIENQX0RFQ09ERV9PRkZTRVQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvaW50ZWdyYXRvci5jIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvaW50ZWdyYXRvci5jCmluZGV4IGM4ZDJiYzcuLmE1MDdjMDkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2ludGVncmF0b3IuYworKysgYi9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9pbnRlZ3JhdG9yLmMKQEAgLTM1LDYgKzM1LDkgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPG5ldGRldi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgImFybS1lYmkuaCIKKyNpbmNsdWRlICJpbnRlZ3JhdG9yLXNjLmgiCiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCkBAIC01NSw2ICs1OCw4IEBACiAKIGludCBib2FyZF9pbml0ICh2b2lkKQogeworCXUzMiB2YWw7CisKIAkvKiBhcmNoIG51bWJlciBvZiBJbnRlZ3JhdG9yIEJvYXJkICovCiAjaWZkZWYgQ09ORklHX0FSQ0hfQ0lOVEVHUkFUT1IKIAlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0NJTlRFR1JBVE9SOwpAQCAtNzIsNiArNzcsMzcgQEAKIAljbV9yZW1hcCgpOwkvKiByZW1hcHMgd3JpdGVhYmxlIG1lbW9yeSB0byAweDAwMDAwMDAwICovCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX0NJTlRFR1JBVE9SCisJLyoKKwkgKiBGbGFzaCBwcm90ZWN0aW9uIG9uIHRoZSBJbnRlZ3JhdG9yL0NQIGlzIGluIGEgc2ltcGxlIHJlZ2lzdGVyCisJICovCisJdmFsID0gcmVhZGwoQ1BfRkxBU0hQUk9HKTsKKwl2YWwgfD0gKENQX0ZMQVNIUFJPR19GTFZQUEVOIHwgQ1BfRkxBU0hQUk9HX0ZMV1JFTik7CisJd3JpdGVsKHZhbCwgQ1BfRkxBU0hQUk9HKTsKKyNlbHNlCisJLyoKKwkgKiBUaGUgSW50ZWdyYXRvci9BUCBoYXMgc29tZSBzcGVjaWFsIHByb3RlY3Rpb24gbWVjaGFuaXNtcworCSAqIGZvciB0aGUgZXh0ZXJuYWwgbWVtb3JpZXMsIGZpcnN0IHRoZSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIChFQkkpCisJICogdGhlbiB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgKFNDKS4KKwkgKgorCSAqIFRoZSBzeXN0ZW0gY29tZXMgdXAgd2l0aCB0aGUgZmxhc2ggbWVtb3J5IG5vbi13cml0YWJsZSBhbmQKKwkgKiBjb25maWd1cmF0aW9uIGxvY2tlZC4gSWYgd2Ugd2FudCBVLUJvb3QgdG8gYmUgdXNlZCBmb3IgZmxhc2gKKwkgKiBhY2Nlc3Mgd2UgY2Fubm90IGhhdmUgdGhlIGZsYXNoIG1lbW9yeSBsb2NrZWQuCisJICovCisJd3JpdGVsKEVCSV9VTkxPQ0tfTUFHSUMsIEVCSV9CQVNFICsgRUJJX0xPQ0tfUkVHKTsKKwl2YWwgPSByZWFkbChFQklfQkFTRSArIEVCSV9DU1IxX1JFRyk7CisJdmFsICY9IEVCSV9DU1JfV1JFTl9NQVNLOworCXZhbCB8PSBFQklfQ1NSX1dSRU5fRU5BQkxFOworCXdyaXRlbCh2YWwsIEVCSV9CQVNFICsgRUJJX0NTUjFfUkVHKTsKKwl3cml0ZWwoMCwgRUJJX0JBU0UgKyBFQklfTE9DS19SRUcpOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIHN5c3RlbSBjb250cm9sbGVyIHRvIHJlbW92ZSB3cml0ZSBwcm90ZWN0aW9uIGZyb20KKwkgKiB0aGUgZmxhc2ggbWVtb3J5IGFuZCBlbmFibGUgVnBwCisJICovCisJd3JpdGVsKFNDX0NUUkxfRkxBU0hWUFAgfCBTQ19DVFJMX0ZMQVNIV1AsIFNDX0NUUkxTKTsKKyNlbmRpZgorCiAJaWNhY2hlX2VuYWJsZSAoKTsKIAogCXJldHVybiAwOwpAQCAtODYsMjEgKzEyMiwzMCBAQAogCXJldHVybiAoMCk7CiB9CiAKKy8qCisgKiBUaGUgSW50ZWdyYXRvciByZW1hcHMgdGhlIEZsYXNoIG1lbW9yeSB0byAweDAwMDAwMDAwIGFuZCBleGVjdXRlcyBVLUJvb3QKKyAqIGZyb20gdGhlcmUsIHdoaWNoIG1lYW5zIHdlIGNhbm5vdCB0ZXN0IHRoZSBSQU0gdW5kZXJuZWF0aCB0aGUgUk9NIGF0IHRoaXMKKyAqIHBvaW50LiBJdCB3aWxsIGJlIHVubWFwcGVkIGxhdGVyIG9uLCB3aGVuIHdlIGFyZSBleGVjdXRpbmcgZnJvbSB0aGUKKyAqIHJlbG9jYXRlZCBpbiBSQU0gVS1Cb290LiBXZSBzaW1wbHkgYXNzdW1lIHRoYXQgdGhpcyBSQU0gaXMgdXNhYmxlIGlmIHRoZQorICogUkFNIG9uIGhpZ2hlciBhZGRyZXNzZXMgd29ya3MgZmluZS4KKyAqLworI2RlZmluZSBSRU1BUFBFRF9GTEFTSF9TWiAweDQwMDAwCisKIGludCBkcmFtX2luaXQgKHZvaWQpCiB7CiAJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gQ09ORklHX1NZU19TRFJBTV9CQVNFOwogI2lmZGVmIENPTkZJR19DTV9TUERfREVURUNUCiAJewogZXh0ZXJuIHZvaWQgZHJhbV9xdWVyeSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nIGNtX3JlZ19zZHJhbTsKLQl1bnNpZ25lZCBsb25nIHNkcmFtX3NoaWZ0OworCXUzMiBjbV9yZWdfc2RyYW07CisJdTMyIHNkcmFtX3NoaWZ0OwogCiAJZHJhbV9xdWVyeSgpOwkvKiBBc3NlbWJsZXIgYWNjZXNzZXMgdG8gQ00gcmVnaXN0ZXJzICovCiAJCQkvKiBRdWVyaWVzIHRoZSBTUEQgdmFsdWVzCSAgICAgICovCiAKIAkvKiBPYnRhaW4gdGhlIFNEUkFNIHNpemUgZnJvbSB0aGUgQ00gU0RSQU0gcmVnaXN0ZXIgKi8KIAotCWNtX3JlZ19zZHJhbSA9ICoodm9sYXRpbGUgdWxvbmcgKikoQ01fQkFTRSArIE9TX1NEUkFNKTsKKwljbV9yZWdfc2RyYW0gPSByZWFkbChDTV9CQVNFICsgT1NfU0RSQU0pOwogCS8qICAgUmVnaXN0ZXIJICAgICAgU0RSQU0gc2l6ZQogCSAqCiAJICogICAweFhYWFhYWGJiYjAwMGJiCSAxNiBNQgpAQCAtMTEwLDE2ICsxNTUsMTggQEAKIAkgKiAgIDB4WFhYWFhYYmJiMTAwYmIJMjU2IE1CCiAJICoKIAkgKi8KLQlzZHJhbV9zaGlmdAkJID0gKChjbV9yZWdfc2RyYW0gJiAweDAwMDAwMDFDKS80KSU0OwotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplCSA9IDB4MDEwMDAwMDAgPDwgc2RyYW1fc2hpZnQ7Ci0JZ2QtPnJhbV9zaXplID0gZ2V0X3JhbV9zaXplKChsb25nICopQ09ORklHX1NZU19TRFJBTV9CQVNFLAorCXNkcmFtX3NoaWZ0ID0gKChjbV9yZWdfc2RyYW0gJiAweDAwMDAwMDFDKS80KSU0OworCWdkLT5yYW1fc2l6ZSA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKSBDT05GSUdfU1lTX1NEUkFNX0JBU0UgKworCQkJCSAgICBSRU1BUFBFRF9GTEFTSF9TWiwKIAkJCQkgICAgMHgwMTAwMDAwMCA8PCBzZHJhbV9zaGlmdCk7CiAJfQogI2Vsc2UKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOwotCWdkLT5yYW1fc2l6ZSA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKUNPTkZJR19TWVNfU0RSQU1fQkFTRSwKKwlnZC0+cmFtX3NpemUgPSBnZXRfcmFtX3NpemUoKGxvbmcgKikgQ09ORklHX1NZU19TRFJBTV9CQVNFICsKKwkJCQkgICAgUkVNQVBQRURfRkxBU0hfU1osCiAJCQkJICAgIFBIWVNfU0RSQU1fMV9TSVpFKTsKICNlbmRpZiAvKiBDTV9TUERfREVURUNUICovCisJLyogV2Ugb25seSBoYXZlIG9uZSBiYW5rIG9mIFJBTSwgc2V0IGl0IHRvIHdoYXRldmVyIHdhcyBkZXRlY3RlZCAqLworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplCSA9IGdkLT5yYW1fc2l6ZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvY200MDA4L2ZsYXNoLmMgYi9ib2FyZC9jbTQwMDgvZmxhc2guYwppbmRleCAyZTEzNTZmLi41NTIyYmYwIDEwMDY0NAotLS0gYS9ib2FyZC9jbTQwMDgvZmxhc2guYworKysgYi9ib2FyZC9jbTQwMDgvZmxhc2guYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIGludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCiB7Ci0JaW50IGZsYWcsIHByb3QsIHNlY3Q7CisJaW50IHByb3QsIHNlY3Q7CiAJdWxvbmcgdHlwZTsKIAlpbnQgcmNvZGUgPSAwOwogCXVsb25nIHN0YXJ0OwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJCXByaW50ZiAoIlxuIik7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOworCWRpc2FibGVfaW50ZXJydXB0cygpOwogCiAJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwogCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKQEAgLTM3MCw3ICszNzAsNiBAQAogewogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBkZXN0OwogCXVsb25nIHN0YXR1czsKLQlpbnQgZmxhZzsKIAl1bG9uZyBzdGFydDsKIAogCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwpAQCAtMzgwLDcgKzM3OSw3IEBACiAJCXJldHVybiAoMik7CiAJfQogCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKIAkqYWRkciA9IDB4NDA7CS8qIHdyaXRlIHNldHVwICovCiAJKmFkZHIgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvYm9hcmQvY200MXh4L2ZsYXNoLmMgYi9ib2FyZC9jbTQxeHgvZmxhc2guYwppbmRleCAyZTEzNTZmLi41NTIyYmYwIDEwMDY0NAotLS0gYS9ib2FyZC9jbTQxeHgvZmxhc2guYworKysgYi9ib2FyZC9jbTQxeHgvZmxhc2guYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIGludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCiB7Ci0JaW50IGZsYWcsIHByb3QsIHNlY3Q7CisJaW50IHByb3QsIHNlY3Q7CiAJdWxvbmcgdHlwZTsKIAlpbnQgcmNvZGUgPSAwOwogCXVsb25nIHN0YXJ0OwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJCXByaW50ZiAoIlxuIik7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOworCWRpc2FibGVfaW50ZXJydXB0cygpOwogCiAJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwogCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKQEAgLTM3MCw3ICszNzAsNiBAQAogewogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBkZXN0OwogCXVsb25nIHN0YXR1czsKLQlpbnQgZmxhZzsKIAl1bG9uZyBzdGFydDsKIAogCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwpAQCAtMzgwLDcgKzM3OSw3IEBACiAJCXJldHVybiAoMik7CiAJfQogCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKIAkqYWRkciA9IDB4NDA7CS8qIHdyaXRlIHNldHVwICovCiAJKmFkZHIgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjI2L2NzYjIyNi5jIGIvYm9hcmQvY3NiMjI2L2NzYjIyNi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDI5ZTYyLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2NzYjIyNi9jc2IyMjYuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4LCByLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlCi0gKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuLCBraGFycmlzQG5leHVzLXRlY2gubmV0Ci0gKiBNYXJpdXMgR3JvZWdlciwgU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucyBHbWJILCBtZ3JvZWdlckBzeXNnby5kZQotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxuZXRkZXYuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1ERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotI2lmZGVmIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKLSMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpICAgICAgICBzaG93X2Jvb3RfcHJvZ3Jlc3MoYXJnKQotI2Vsc2UKLSMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpCi0jZW5kaWYKLQotLyoqCi0gKiBtaXNjX2luaXRfcjogLSBtaXNjIGluaXRpYWxpc2F0aW9uIHJvdXRpbmVzCi0gKi8KLQotaW50IG1pc2NfaW5pdF9yKHZvaWQpCi17Ci0jaWYgMAotCXVjaGFyICpzdHI7Ci0KLQkvKiBkZXRlcm1pbmUgaWYgdGhlIHNvZnR3YXJlIHVwZGF0ZSBrZXkgaXMgcHJlc3NlZCBkdXJpbmcgc3RhcnR1cCAqLwotCS8qIG5vdCBwb3J0ZWQgeWV0Li4uICovCi0JaWYgKEdQTFIwICYgMHgwMDAwMDgwMCkgewotCQlwcmludGYoInVzaW5nIGJvb3RjbWRfbm9ybWFsIChzdy11cGRhdGUgYnV0dG9uIG5vdCBwcmVzc2VkKVxuIik7Ci0JCXN0ciA9IGdldGVudigiYm9vdGNtZF9ub3JtYWwiKTsKLQl9IGVsc2UgewotCQlwcmludGYoInVzaW5nIGJvb3RjbWRfdXBkYXRlIChzdy11cGRhdGUgYnV0dG9uIHByZXNzZWQpXG4iKTsKLQkJc3RyID0gZ2V0ZW52KCJib290Y21kX3VwZGF0ZSIpOwotCX0KLQotCXNldGVudigiYm9vdGNtZCIsc3RyKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0KLS8qKgotICogYm9hcmRfaW5pdDogLSBzZXR1cCBzb21lIGRhdGEgc3RydWN0dXJlcwotICoKLSAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzCi0gKi8KLQotaW50IGJvYXJkX2luaXQgKHZvaWQpCi17Ci0JLyogV2UgaGF2ZSBSQU0sIGRpc2FibGUgY2FjaGUgKi8KLQlkY2FjaGVfZGlzYWJsZSgpOwotCWljYWNoZV9kaXNhYmxlKCk7Ci0KLQkvKiBhcmNoIG51bWJlciBvZiBDU0IyMjYgYm9hcmQgKi8KLQlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0NTQjIyNjsKLQotCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KLQlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gMHhhMDAwMDEwMDsKLQotCXJldHVybiAwOwotfQotCi0KLWV4dGVybiB2b2lkIHB4YV9kcmFtX2luaXQodm9pZCk7Ci1pbnQgZHJhbV9pbml0KHZvaWQpCi17Ci0JcHhhX2RyYW1faW5pdCgpOwotCWdkLT5yYW1fc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOwotCXJldHVybiAwOwotfQotCi12b2lkIGRyYW1faW5pdF9iYW5rc2l6ZSh2b2lkKQotewotCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOwotfQotCi0vKioKLSAqIGNzYjIyNl9zZXRfbGVkOiAtIHN3aXRjaCBMRURzIG9uIG9yIG9mZgotICoKLSAqIEBwYXJhbSBsZWQ6ICAgTEVEIHRvIHN3aXRjaCAoMCwxLDIpCi0gKiBAcGFyYW0gc3RhdGU6IHN3aXRjaCBvbiAoMSkgb3Igb2ZmICgwKQotICovCi0KLXZvaWQgY3NiMjI2X3NldF9sZWQoaW50IGxlZCwgaW50IHN0YXRlKQotewotCXN3aXRjaChsZWQpIHsKLQotCQljYXNlIDA6IGlmIChzdGF0ZT09MSkgewotCQkJCXdyaXRlbChyZWFkbChHUENSMCkgfCBDU0IyMjZfVVNFUl9MRUQwLCBHUENSMCk7Ci0JCQl9IGVsc2UgaWYgKHN0YXRlPT0wKSB7Ci0JCQkJd3JpdGVsKHJlYWRsKEdQU1IwKSB8IENTQjIyNl9VU0VSX0xFRDAsIEdQU1IwKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgMTogaWYgKHN0YXRlPT0xKSB7Ci0JCQkJd3JpdGVsKHJlYWRsKEdQQ1IwKSB8IENTQjIyNl9VU0VSX0xFRDEsIEdQQ1IwKTsKLQkJCX0gZWxzZSBpZiAoc3RhdGU9PTApIHsKLQkJCQl3cml0ZWwocmVhZGwoR1BTUjApIHwgQ1NCMjI2X1VTRVJfTEVEMSwgR1BTUjApOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAyOiBpZiAoc3RhdGU9PTEpIHsKLQkJCQl3cml0ZWwocmVhZGwoR1BDUjApIHwgQ1NCMjI2X1VTRVJfTEVEMiwgR1BDUjApOwotCQkJfSBlbHNlIGlmIChzdGF0ZT09MCkgewotCQkJCXdyaXRlbChyZWFkbChHUFNSMCkgfCBDU0IyMjZfVVNFUl9MRUQyLCBHUFNSMCk7Ci0JCQl9Ci0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLQotLyoqCi0gKiBzaG93X2Jvb3RfcHJvZ3Jlc3M6IC0gaW5kaWNhdGUgc3RhdGUgb2YgdGhlIGJvb3QgcHJvY2VzcwotICoKLSAqIEBwYXJhbSBzdGF0dXM6IFN0YXR1cyBudW1iZXIgLSBzZWUgUkVBRE1FIGZvciBkZXRhaWxzLgotICoKLSAqIFRoZSBDU0IyMjYgZG9lcyBvbmx5IGhhdmUgMyBMRURzLCBzbyB3ZSBzd2l0Y2ggdGhlbSBvbiBhdCB0aGUgbW9zdAotICogaW1wb3J0YW50IHN0YXRlcyAoMSwgNSwgMTUpLgotICovCi0KLXZvaWQgc2hvd19ib290X3Byb2dyZXNzIChpbnQgc3RhdHVzKQotewotCXN3aXRjaChzdGF0dXMpIHsKLQkJY2FzZSAgMTogY3NiMjI2X3NldF9sZWQoMCwxKTsgYnJlYWs7Ci0JCWNhc2UgIDU6IGNzYjIyNl9zZXRfbGVkKDEsMSk7IGJyZWFrOwotCQljYXNlIDE1OiBjc2IyMjZfc2V0X2xlZCgyLDEpOyBicmVhazsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLSNpZmRlZiBDT05GSUdfQ01EX05FVAotaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19DUzg5MDAKLQlyYyA9IGNzODkwMF9pbml0aWFsaXplKDAsIENPTkZJR19DUzg5MDBfQkFTRSk7Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9mbGFzaC5jIGIvYm9hcmQvY3NiMjI2L2ZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMDM0NzAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvY3NiMjI2L2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMyAoMiB4IDE2IGJpdCBGbGFzaCBiYW5rIHBhdGNoZXMpCi0gKiBSb2xmIFBldWtlcnQsIElNTVMgZ0dtYkgsIDxyb2xmLnBldWtlcnRAaW1tcy5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLQotI2RlZmluZSBGTEFTSF9CQU5LX1NJWkUgMHgwMjAwMDAwMAotI2RlZmluZSBNQUlOX1NFQ1RfU0laRQkweDQwMDAwCQkvKiAyeDE2ID0gMjU2ayBwZXIgc2VjdG9yICovCi0KLWZsYXNoX2luZm9fdAlmbGFzaF9pbmZvW0NPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTXTsKLQotCi0vKioKLSAqIGZsYXNoX2luaXQ6IC0gaW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGZsYXNoIGNoaXBzCi0gKgotICogQHJldHVybjogc2l6ZSBvZiB0aGUgZmxhc2gKLSAqLwotCi11bG9uZyBmbGFzaF9pbml0KHZvaWQpCi17Ci0JaW50IGksIGo7Ci0JdWxvbmcgc2l6ZSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1M7IGkrKykgewotCQl1bG9uZyBmbGFzaGJhc2UgPSAwOwotCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0KLQkJCShJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSB8Ci0JCQkoSU5URUxfSURfMjhGMTI4SjMgJiBGTEFTSF9UWVBFTUFTSyk7Ci0JCWZsYXNoX2luZm9baV0uc2l6ZSA9IEZMQVNIX0JBTktfU0laRTsKLQkJZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUOwotCQltZW1zZXQoZmxhc2hfaW5mb1tpXS5wcm90ZWN0LCAwLCBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUKTsKLQotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAwOgotCQkJZmxhc2hiYXNlID0gUEhZU19GTEFTSF8xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwYW5pYygiY29uZmlndXJlZCB0b28gbWFueSBmbGFzaCBiYW5rcyFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZm9yIChqID0gMDsgaiA8IGZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50OyBqKyspIHsKLQkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBmbGFzaGJhc2UgKyBqKk1BSU5fU0VDVF9TSVpFOwotCQl9Ci0JCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwotCX0KLQotCS8qIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycyAqLwotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJCUNPTkZJR19TWVNfRkxBU0hfQkFTRSwKLQkJCUNPTkZJR19TWVNfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLQkJCSZmbGFzaF9pbmZvWzBdKTsKLQotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJCUNPTkZJR19FTlZfQUREUiwKLQkJCUNPTkZJR19FTlZfQUREUiArIENPTkZJR19FTlZfU0laRSAtIDEsCi0JCQkmZmxhc2hfaW5mb1swXSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotCi0vKioKLSAqIGZsYXNoX3ByaW50X2luZm86IC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsYXNoIHNpdHVhdGlvbgotICovCi0KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaj0wOyBqPENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyBqKyspIHsKLQotCQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQkJY2FzZSAoSU5URUxfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSyk6Ci0JCQlwcmludGYgKCJJbnRlbDogIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQkJY2FzZSAoSU5URUxfSURfMjhGMTI4SjMgJiBGTEFTSF9UWVBFTUFTSyk6Ci0JCQlwcmludGYoIjI4RjEyOEozICgxMjhNYml0KVxuIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ZigiVW5rbm93biBDaGlwIFR5cGVcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJcHJpbnRmKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAotCQkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKLQotCQlwcmludGYoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCQlpZiAoKGkgJSA1KSA9PSAwKSBwcmludGYgKCJcbgkiKTsKLQotCQkJcHJpbnRmICgiICUwOGxYJXMiLCBpbmZvLT5zdGFydFtpXSwKLQkJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIJICAgIik7Ci0JCX0KLQkJcHJpbnRmICgiXG4iKTsKLQkJaW5mbysrOwotCX0KLX0KLQotCi0vKioKLSAqIGZsYXNoX2VyYXNlOiAtIGVyYXNlIGZsYXNoIHNlY3RvcnMKLSAqLwotCi1pbnQgZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdDsKLQlpbnQgcmMgPSBFUlJfT0s7Ci0JdWxvbmcgc3RhcnQ7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKLQkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJcmV0dXJuIEVSUl9JTlZBTDsKLQl9Ci0KLQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkKLQkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1ZFTkRPUjsKLQotCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgcHJvdCsrOwotCX0KLQotCWlmIChwcm90KSByZXR1cm4gRVJSX1BST1RFQ1RFRDsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dAotCSAqIGhlcmUuIFJlbWVtYmVyIHRoYXQgb3VyIGV4Y2VwdGlvbiB2ZWN0b3JzIGFyZQotCSAqIGF0IGFkZHJlc3MgMCBpbiB0aGUgZmxhc2gsIGFuZCB3ZSBkb24ndCB3YW50IGEKLQkgKiAodGlja2VyKSBleGNlcHRpb24gdG8gaGFwcGVuIHdoaWxlIHRoZSBmbGFzaAotCSAqIGNoaXAgaXMgaW4gcHJvZ3JhbW1pbmcgbW9kZS4KLQkgKi8KLQotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3QgJiYgIWN0cmxjKCk7IHNlY3QrKykgewotCi0JCXByaW50ZigiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0KTsKLQotCQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLwotCQlzdGFydCA9IGdldF90aW1lcigwKTsKLQotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCXUzMiAqIHZvbGF0aWxlIGFkZHIgPSAodTMyICogdm9sYXRpbGUpKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQotCQkJLyogZXJhc2Ugc2VjdG9yOgkJCQkgICAgKi8KLQkJCS8qIFRoZSBzdHJhdGEgZmxhc2hzIGFyZSBhbGlnbmVkIHNpZGUgYnkgc2lkZSBvbiAgICAqLwotCQkJLyogdGhlIGRhdGEgYnVzLCBzbyB3ZSBoYXZlIHRvIHdyaXRlIHRoZSBjb21tYW5kcyAgICovCi0JCQkvKiB0byBib3RoIGNoaXBzIGhlcmU6CQkJCSAgICAqLwotCi0JCQkqYWRkciA9IDB4MDAyMDAwMjA7CS8qIGVyYXNlIHNldHVwICovCi0JCQkqYWRkciA9IDB4MDBEMDAwRDA7CS8qIGVyYXNlIGNvbmZpcm0gKi8KLQotCQkJd2hpbGUgKCgqYWRkciAmIDB4MDA4MDAwODApICE9IDB4MDA4MDAwODApIHsKLQkJCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJCQkqYWRkciA9IDB4MDBCMDAwQjA7IC8qIHN1c3BlbmQgZXJhc2UqLwotCQkJCQkqYWRkciA9IDB4MDBGRjAwRkY7IC8qIHJlYWQgbW9kZSAgICAqLwotCQkJCQlyYyA9IEVSUl9USU1PVVQ7Ci0JCQkJCWdvdG8gb3V0YWhlcmU7Ci0JCQkJfQotCQkJfQotCQkJKmFkZHIgPSAweDAwNTAwMDUwOyAvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgY21kLiAgICovCi0JCQkqYWRkciA9IDB4MDBGRjAwRkY7IC8qIHJlc2V0IHRvIHJlYWQgbW9kZQkgICAgKi8KLQkJfQotCQlwcmludGYoIm9rLlxuIik7Ci0JfQotCWlmIChjdHJsYygpKSBwcmludGYoIlVzZXIgSW50ZXJydXB0IVxuIik7Ci0KLW91dGFoZXJlOgotCS8qIGFsbG93IGZsYXNoIHRvIHNldHRsZSAtIHdhaXQgMTAgbXMgKi8KLQl1ZGVsYXlfbWFza2VkKDEwMDAwKTsKLQotCWlmIChmbGFnKSBlbmFibGVfaW50ZXJydXB0cygpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIHdyaXRlX2xvbmc6IC0gY29weSBtZW1vcnkgdG8gZmxhc2gsIGFzc3VtZSBhIGJhbmsgb2YgMiBkZXZpY2VzIHdpdGggMTZiaXQgZWFjaAotICovCi0KLXN0YXRpYyBpbnQgd3JpdGVfbG9uZyAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKQotewotCXUzMiAqIHZvbGF0aWxlIGFkZHIgPSAodTMyICogdm9sYXRpbGUpZGVzdCwgdmFsOwotCWludCByYyA9IEVSUl9PSzsKLQlpbnQgZmxhZzsKLQl1bG9uZyBzdGFydDsKLQotCS8qIHJlYWQgYXJyYXkgY29tbWFuZCAtIGp1c3QgZm9yIHRoZSBjYXNlLi4uICovCi0JKmFkZHIgPSAweDAwRkYwMEZGOwotCi0JLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCi0JaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHJldHVybiBFUlJfTk9UX0VSQVNFRDsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dAotCSAqIGhlcmUuIFJlbWVtYmVyIHRoYXQgb3VyIGV4Y2VwdGlvbiB2ZWN0b3JzIGFyZQotCSAqIGF0IGFkZHJlc3MgMCBpbiB0aGUgZmxhc2gsIGFuZCB3ZSBkb24ndCB3YW50IGEKLQkgKiAodGlja2VyKSBleGNlcHRpb24gdG8gaGFwcGVuIHdoaWxlIHRoZSBmbGFzaAotCSAqIGNoaXAgaXMgaW4gcHJvZ3JhbW1pbmcgbW9kZS4KLQkgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgY29tbWFuZCAqLwotCSphZGRyID0gMHgwMDUwMDA1MDsKLQotCS8qIHByb2dyYW0gc2V0LXVwIGNvbW1hbmQgKi8KLQkqYWRkciA9IDB4MDA0MDAwNDA7Ci0KLQkvKiBsYXRjaCBhZGRyZXNzL2RhdGEgKi8KLQkqYWRkciA9IGRhdGE7Ci0KLQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLwotCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCi0JLyogd2FpdCB3aGlsZSBwb2xsaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQl3aGlsZSgoKHZhbCA9ICphZGRyKSAmIDB4MDA4MDAwODApICE9IDB4MDA4MDAwODApIHsKLQkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQpIHsKLQkJCXJjID0gRVJSX1RJTU9VVDsKLQkJCS8qIHN1c3BlbmQgcHJvZ3JhbSBjb21tYW5kICovCi0JCQkqYWRkciA9IDB4MDBCMDAwQjA7Ci0JCQlnb3RvIG91dGFoZXJlOwotCQl9Ci0JfQotCi0JLyogY2hlY2sgZm9yIGVycm9ycyAqLwotCWlmKHZhbCAmIDB4MDAxQTAwMUEpIHsKLQkJcHJpbnRmKCJcbkZsYXNoIHdyaXRlIGVycm9yICUwMnggYXQgYWRkcmVzcyAlMDhseFxuIiwKLQkJCShpbnQpdmFsLCAodW5zaWduZWQgbG9uZylkZXN0KTsKLQkJaWYodmFsICYgMHgwMDA4MDAwOCkgewotCQkJcHJpbnRmKCJWb2x0YWdlIHJhbmdlIGVycm9yLlxuIik7Ci0JCQlyYyA9IEVSUl9QUk9HX0VSUk9SOwotCQkJZ290byBvdXRhaGVyZTsKLQkJfQotCQlpZih2YWwgJiAweDAwMDIwMDAyKSB7Ci0JCQlwcmludGYoIkRldmljZSBwcm90ZWN0IGVycm9yLlxuIik7Ci0JCQlyYyA9IEVSUl9QUk9URUNURUQ7Ci0JCQlnb3RvIG91dGFoZXJlOwotCQl9Ci0JCWlmKHZhbCAmIDB4MDAxMDAwMTApIHsKLQkJCXByaW50ZigiUHJvZ3JhbW1pbmcgZXJyb3IuXG4iKTsKLQkJCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCQlnb3RvIG91dGFoZXJlOwotCQl9Ci0JCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCWdvdG8gb3V0YWhlcmU7Ci0JfQotCi1vdXRhaGVyZToKLQkvKiByZWFkIGFycmF5IGNvbW1hbmQgKi8KLQkqYWRkciA9IDB4MDBGRjAwRkY7Ci0JaWYgKGZsYWcpIGVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQotLyoqCi0gKiB3cml0ZV9idWY6IC0gQ29weSBtZW1vcnkgdG8gZmxhc2guCi0gKgotICogQHBhcmFtIGluZm86Ci0gKiBAcGFyYW0gc3JjOglzb3VyY2Ugb2YgY29weSB0cmFuc2FjdGlvbgotICogQHBhcmFtIGFkZHI6IHdoZXJlIHRvIGNvcHkgdG8KLSAqIEBwYXJhbSBjbnQ6CW51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKgotICogQHJldHVybgllcnJvciBjb2RlCi0gKi8KLQotLyogImxvbmciIHZlcnNpb24sIHVzZXMgMzJiaXQgd29yZHMgKi8KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKLXsKLQl1bG9uZyBjcCwgd3A7Ci0JdWxvbmcgZGF0YTsKLQlpbnQgbDsKLQlpbnQgaSwgcmM7Ci0KLQl3cCA9IChhZGRyICYgfjMpOwkvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwotCSAqLwotCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgewotCQlkYXRhID0gMDsKLQkJZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgewotCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKiljcCA8PCAyNCk7Ci0JCX0KLQkJZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpKSB7Ci0JCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKnNyYysrIDw8IDI0KTsKLQkJCS0tY250OwotCQkJKytjcDsKLQkJfQotCQlmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKWNwIDw8IDI0KTsKLQkJfQotCi0JCWlmICgocmMgPSB3cml0ZV9sb25nKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gNDsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAotCSAqLwotCXdoaWxlIChjbnQgPj0gNCkgewotCQlkYXRhID0gKigodWxvbmcqKXNyYyk7Ci0JCWlmICgocmMgPSB3cml0ZV9sb25nKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJc3JjICs9IDQ7Ci0JCXdwICArPSA0OwotCQljbnQgLT0gNDsKLQl9Ci0KLQlpZiAoY250ID09IDApIHJldHVybiBFUlJfT0s7Ci0KLQkvKgotCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwotCSAqLwotCWRhdGEgPSAwOwotCWZvciAoaT0wLCBjcD13cDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3ApIHsKLQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCAyNCk7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaTw0OyArK2ksICsrY3ApIHsKLQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKiljcCA8PCAyNCk7Ci0JfQotCi0JcmV0dXJuIHdyaXRlX2xvbmcoaW5mbywgd3AsIGRhdGEpOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2ZWRlbngvcW9uZy9xb25nLmMgYi9ib2FyZC9kYXZlZGVueC9xb25nL3FvbmcuYwppbmRleCA2NjVhZWRmLi5jNDFmMTFkIDEwMDY0NAotLS0gYS9ib2FyZC9kYXZlZGVueC9xb25nL3FvbmcuYworKysgYi9ib2FyZC9kYXZlZGVueC9xb25nL3FvbmcuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAlteGNfc2V0dXBfd2VpbWNzKDMsICZjczMpOwogCi0JX19SRUcoSU9NVVhDX0dQUikgfD0gMSA8PCAxMzsKKwlteDMxX3NldF9ncHIoTVVYX1NEQ1RMX0NTRDFfU0VMLCAxKTsKIAogCW14MzFfZ3Bpb19tdXgoSU9NVVhfTU9ERShNVVhfQ1RMX05GQ19XUCwgTVVYX0NUTF9JTl9HUElPKSk7CiAJbXgzMV9ncGlvX211eChJT01VWF9NT0RFKE1VWF9DVExfTkZDX0NFLCBNVVhfQ1RMX0lOX0dQSU8pKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZG02NDY3ZXZtL2RtNjQ2N2V2bS5jIGIvYm9hcmQvZGF2aW5jaS9kbTY0Njdldm0vZG02NDY3ZXZtLmMKaW5kZXggMWEwMWMzYy4uYWM4MmQ1YyAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9kbTY0Njdldm0vZG02NDY3ZXZtLmMKKysrIGIvYm9hcmQvZGF2aW5jaS9kbTY0Njdldm0vZG02NDY3ZXZtLmMKQEAgLTI0LDYgKzI0LDI2IEBACiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCisjZGVmaW5lIFJFVl9ETTY0NjdFVk0JCTAKKyNkZWZpbmUgUkVWX0RNNjQ2N1RFVk0JCTEKKy8qCisgKiBnZXRfYm9hcmRfcmV2KCkgLSBzZXR1cCB0byBwYXNzIGtlcm5lbCBib2FyZCByZXZpc2lvbiBpbmZvcm1hdGlvbgorICogUmV0dXJuczoKKyAqIGJpdFswLTNdCVN5c3RlbSBjbG9jayBmcmVxdWVuY3kKKyAqIDAwMDBiCS0gMjcgTUh6CisgKiAwMDAxYgktIDMzIE1IegorICovCit1MzIgZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCisjaWZkZWYgREFWSU5DSV9ETTY0NjdURVZNCisJcmV0dXJuIFJFVl9ETTY0NjdURVZNOworI2Vsc2UKKwlyZXR1cm4gUkVWX0RNNjQ2N0VWTTsKKyNlbmRpZgorCit9CisKIGludCBib2FyZF9pbml0KHZvaWQpCiB7CiAJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9EQVZJTkNJX0RNNjQ2N19FVk07CmRpZmYgLS1naXQgYS9ib2FyZC9jc2IyMjYvTWFrZWZpbGUgYi9ib2FyZC9kZW54L20yOGV2ay9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDg0JQpjb3B5IGZyb20gYm9hcmQvY3NiMjI2L01ha2VmaWxlCmNvcHkgdG8gYm9hcmQvZGVueC9tMjhldmsvTWFrZWZpbGUKaW5kZXggNmZlOWJlYy4uYjZmMDAyZiAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlCisrKyBiL2JvYXJkL2RlbngvbTI4ZXZrL01ha2VmaWxlCkBAIC0yNSw3ICsyNSwxMyBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5vCiAKLUNPQkpTCTo9IGNzYjIyNi5vIGZsYXNoLm8KK2lmbmRlZglDT05GSUdfU1BMX0JVSUxECitDT0JKUwk6PSBtMjhldmsubworZW5kaWYKKworaWZkZWYJQ09ORklHX1NQTF9CVUlMRAorQ09CSlMJOj0gbWVtX2luaXQubyBtbWNfYm9vdC5vIHBvd2VyX2luaXQubyBtZW1zaXplLm8KK2VuZGlmCiAKIFNSQ1MJOj0gJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQpAQCAtMzMsNiArMzksMTMgQEAKICQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChjYWxsIGNtZF9saW5rX29fdGFyZ2V0LCAkKE9CSlMpKQogCithbGw6CSQoQUxMKQorCitpZmRlZglDT05GSUdfU1BMX0JVSUxECittZW1zaXplLmM6CisJbG4gLXNmICQoVE9QRElSKS9jb21tb24vbWVtc2l6ZS5jICRACitlbmRpZgorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldApkaWZmIC0tZ2l0IGEvYm9hcmQvZGVueC9tMjhldmsvbTI4X2luaXQuaCBiL2JvYXJkL2RlbngvbTI4ZXZrL20yOF9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkMzYzMQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RlbngvbTI4ZXZrL20yOF9pbml0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggU1BMIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYJX19NMjhfSU5JVF9IX18KKyNkZWZpbmUJX19NMjhfSU5JVF9IX18KKwordm9pZCBlYXJseV9kZWxheShpbnQgZGVsYXkpOworCit2b2lkIG14MjhfcG93ZXJfaW5pdCh2b2lkKTsKKworI2lmZGVmCUNPTkZJR19TUExfTVgyOF9QU1dJVENIX1dBSVQKK3ZvaWQgbXgyOF9wb3dlcl93YWl0X3Bzd2l0Y2godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG14MjhfcG93ZXJfd2FpdF9wc3dpdGNoKHZvaWQpIHsgfQorI2VuZGlmCisKK3ZvaWQgbXgyOF9tZW1faW5pdCh2b2lkKTsKKworI2VuZGlmCS8qIF9fTTI4X0lOSVRfSF9fICovCmRpZmYgLS1naXQgYS9ib2FyZC9kZW54L20yOGV2ay9tMjhldmsuYyBiL2JvYXJkL2RlbngvbTI4ZXZrL20yOGV2ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZjNkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9kZW54L20yOGV2ay9tMjhldmsuYwpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIERFTlggTTI4IG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW9tdXgtbXgyOC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bWlpcGh5Lmg+CisjaW5jbHVkZSA8bmV0ZGV2Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKy8qCisgKiBGdW5jdGlvbnMKKyAqLworaW50IGJvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQoreworCS8qIElPMCBjbG9jayBhdCA0ODBNSHogKi8KKwlteDI4X3NldF9pb2NsayhNWENfSU9DTEswLCA0ODAwMDApOworCS8qIElPMSBjbG9jayBhdCA0ODBNSHogKi8KKwlteDI4X3NldF9pb2NsayhNWENfSU9DTEsxLCA0ODAwMDApOworCisJLyogU1NQMCBjbG9jayBhdCA5Nk1IeiAqLworCW14Mjhfc2V0X3NzcGNsayhNWENfU1NQQ0xLMCwgOTYwMDAsIDApOworCS8qIFNTUDIgY2xvY2sgYXQgOTZNSHogKi8KKwlteDI4X3NldF9zc3BjbGsoTVhDX1NTUENMSzIsIDk2MDAwLCAwKTsKKworI2lmZGVmCUNPTkZJR19DTURfVVNCCisJbXhzX2lvbXV4X3NldHVwX3BhZChNWDI4X1BBRF9TU1AyX1NTMV9fVVNCMV9PVkVSQ1VSUkVOVCk7CisJbXhzX2lvbXV4X3NldHVwX3BhZChNWDI4X1BBRF9BVUFSVDNfVFhfX0dQSU9fM18xMyB8CisJCQlNWFNfUEFEXzEyTUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTVgyOF9QQURfQVVBUlQzX1RYX19HUElPXzNfMTMsIDApOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBBZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IFBIWVNfU0RSQU1fMSArIDB4MTAwOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUJSFdfRElHQ1RSTF9TQ1JBVENIMAkweDgwMDFjMjgwCisjZGVmaW5lCUhXX0RJR0NUUkxfU0NSQVRDSDEJMHg4MDAxYzI5MAoraW50IGRyYW1faW5pdCh2b2lkKQoreworCXVpbnQzMl90IHN6WzJdOworCisJc3pbMF0gPSByZWFkbChIV19ESUdDVFJMX1NDUkFUQ0gwKTsKKwlzelsxXSA9IHJlYWRsKEhXX0RJR0NUUkxfU0NSQVRDSDEpOworCisJaWYgKHN6WzBdICE9IHN6WzFdKSB7CisJCXByaW50ZigiTVgyODpcbiIKKwkJCSJFcnJvciwgdGhlIFJBTSBzaXplIGluIEhXX0RJR0NUUkxfU0NSQVRDSDAgYW5kXG4iCisJCQkiSFdfRElHQ1RSTF9TQ1JBVENIMSBpcyBub3QgdGhlIHNhbWUuIFBsZWFzZVxuIgorCQkJInZlcmlmeSB0aGVzZSB0d28gcmVnaXN0ZXJzIGNvbnRhaW4gdmFsaWQgUkFNIHNpemUhXG4iKTsKKwkJaGFuZygpOworCX0KKworCWdkLT5yYW1fc2l6ZSA9IHN6WzBdOworCXJldHVybiAwOworfQorCisjaWZkZWYJQ09ORklHX0NNRF9NTUMKK3N0YXRpYyBpbnQgbTI4X21tY193cChpbnQgaWQpCit7CisJaWYgKGlkICE9IDApIHsKKwkJcHJpbnRmKCJNWFMgTU1DOiBJbnZhbGlkIGNhcmQgc2VsZWN0ZWQgKGNhcmQgaWQgPSAlZClcbiIsIGlkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKE1YMjhfUEFEX0FVQVJUMl9DVFNfX0dQSU9fM18xMCk7Cit9CisKK2ludCBib2FyZF9tbWNfaW5pdChiZF90ICpiaXMpCit7CisJLyogQ29uZmlndXJlIFdQIGFzIG91dHB1dCAqLworCWdwaW9fZGlyZWN0aW9uX2lucHV0KE1YMjhfUEFEX0FVQVJUMl9DVFNfX0dQSU9fM18xMCk7CisKKwlyZXR1cm4gbXhzbW1jX2luaXRpYWxpemUoYmlzLCAwLCBtMjhfbW1jX3dwKTsKK30KKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX0NNRF9ORVQKKworI2RlZmluZQlNSUlfT1BNT0RFX1NUUkFQX09WRVJSSURFCTB4MTYKKyNkZWZpbmUJTUlJX1BIWV9DVFJMMQkJCTB4MWUKKyNkZWZpbmUJTUlJX1BIWV9DVFJMMgkJCTB4MWYKKworaW50IGZlY214Y19taWlfcG9zdGNhbGwoaW50IHBoeSkKK3sKKwltaWlwaHlfd3JpdGUoIkZFQzEiLCBwaHksIE1JSV9CTUNSLCAweDkwMDApOworCW1paXBoeV93cml0ZSgiRkVDMSIsIHBoeSwgTUlJX09QTU9ERV9TVFJBUF9PVkVSUklERSwgMHgwMjAyKTsKKwlpZiAocGh5ID09IDMpCisJCW1paXBoeV93cml0ZSgiRkVDMSIsIDMsIE1JSV9QSFlfQ1RSTDIsIDB4ODE4MCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKwlzdHJ1Y3QgZXRoX2RldmljZSAqZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBjcHVfZXRoX2luaXQoYmlzKTsKKworCWNscnNldGJpdHNfbGUzMigmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2VuZXQsCisJCUNMS0NUUkxfRU5FVF9USU1FX1NFTF9NQVNLIHwgQ0xLQ1RSTF9FTkVUX0NMS19PVVRfRU4sCisJCUNMS0NUUkxfRU5FVF9USU1FX1NFTF9STUlJX0NMSyk7CisKKwlyZXQgPSBmZWNteGNfaW5pdGlhbGl6ZV9tdWx0aShiaXMsIDAsIDAsIE1YU19FTkVUMF9CQVNFKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiRkVDIE1YUzogVW5hYmxlIHRvIGluaXQgRkVDMFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZmVjbXhjX2luaXRpYWxpemVfbXVsdGkoYmlzLCAxLCAzLCBNWFNfRU5FVDFfQkFTRSk7CisJaWYgKHJldCkgeworCQlwcmludGYoIkZFQyBNWFM6IFVuYWJsZSB0byBpbml0IEZFQzFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldiA9IGV0aF9nZXRfZGV2X2J5X25hbWUoIkZFQzAiKTsKKwlpZiAoIWRldikgeworCQlwcmludGYoIkZFQyBNWFM6IFVuYWJsZSB0byBnZXQgRkVDMCBkZXZpY2UgZW50cnlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBmZWNteGNfcmVnaXN0ZXJfbWlpX3Bvc3RjYWxsKGRldiwgZmVjbXhjX21paV9wb3N0Y2FsbCk7CisJaWYgKHJldCkgeworCQlwcmludGYoIkZFQyBNWFM6IFVuYWJsZSB0byByZWdpc3RlciBGRUMwIG1paSBwb3N0Y2FsbFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2ID0gZXRoX2dldF9kZXZfYnlfbmFtZSgiRkVDMSIpOworCWlmICghZGV2KSB7CisJCXByaW50ZigiRkVDIE1YUzogVW5hYmxlIHRvIGdldCBGRUMxIGRldmljZSBlbnRyeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGZlY214Y19yZWdpc3Rlcl9taWlfcG9zdGNhbGwoZGV2LCBmZWNteGNfbWlpX3Bvc3RjYWxsKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiRkVDIE1YUzogVW5hYmxlIHRvIHJlZ2lzdGVyIEZFQzEgbWlpIHBvc3RjYWxsXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYJQ09ORklHX00yOF9GRUNfTUFDX0lOX09DT1RQCisKKyNkZWZpbmUJTVhTX09DT1RQX01BWF9USU1FT1VUCTEwMDAwMDAKK3ZvaWQgaW14X2dldF9tYWNfZnJvbV9mdXNlKGNoYXIgKm1hYykKK3sKKwlzdHJ1Y3QgbXgyOF9vY290cF9yZWdzICpvY290cF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X29jb3RwX3JlZ3MgKilNWFNfT0NPVFBfQkFTRTsKKwl1aW50MzJfdCBkYXRhOworCisJbWVtc2V0KG1hYywgMCwgNik7CisKKwl3cml0ZWwoT0NPVFBfQ1RSTF9SRF9CQU5LX09QRU4sICZvY290cF9yZWdzLT5od19vY290cF9jdHJsX3NldCk7CisKKwlpZiAobXgyOF93YWl0X21hc2tfY2xyKCZvY290cF9yZWdzLT5od19vY290cF9jdHJsX3JlZywgT0NPVFBfQ1RSTF9CVVNZLAorCQkJCU1YU19PQ09UUF9NQVhfVElNRU9VVCkpIHsKKwkJcHJpbnRmKCJNWFMgRkVDOiBDYW4ndCBnZXQgTUFDIGZyb20gT0NPVFBcbiIpOworCQlyZXR1cm47CisJfQorCisJZGF0YSA9IHJlYWRsKCZvY290cF9yZWdzLT5od19vY290cF9jdXN0MCk7CisKKwltYWNbMF0gPSAweDAwOworCW1hY1sxXSA9IDB4MDQ7CisJbWFjWzJdID0gKGRhdGEgPj4gMjQpICYgMHhmZjsKKwltYWNbM10gPSAoZGF0YSA+PiAxNikgJiAweGZmOworCW1hY1s0XSA9IChkYXRhID4+IDgpICYgMHhmZjsKKwltYWNbNV0gPSBkYXRhICYgMHhmZjsKK30KKyNlbHNlCit2b2lkIGlteF9nZXRfbWFjX2Zyb21fZnVzZShjaGFyICptYWMpCit7CisJbWVtc2V0KG1hYywgMCwgNik7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9kZW54L20yOGV2ay9tZW1faW5pdC5jIGIvYm9hcmQvZGVueC9tMjhldmsvbWVtX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2QxZjliCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGVueC9tMjhldmsvbWVtX2luaXQuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggUkFNIGluaXQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW9tdXgtbXgyOC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisKKyNpbmNsdWRlICJtMjhfaW5pdC5oIgorCit1aW50MzJfdCBkcmFtX3ZhbHNbXSA9IHsKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAxMDEwMSwgMHgwMTAxMDEwMSwgMHgwMDBmMGYwMSwgMHgwZjAyMDIwYSwKKwkweDAwMDAwMDAwLCAweDAwMDEwMTAxLCAweDAwMDAwMTAwLCAweDAwMDAwMTAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4MDEwMTAwMDAsIDB4MDUwNjAzMDIsIDB4MDYwMDUwMDMsIDB4MGEwMDAwYzgsCisJMHgwMjAwOWM0MCwgMHgwMDAwMDMwYywgMHgwMDM2YTYwOSwgMHgwMzFhMDYxMiwgMHgwMjAzMDIwMiwKKwkweDAwYzgwMDFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEyMTAwLCAweGZmZmYwMzAzLAorCTB4MDAwMTIxMDAsIDB4ZmZmZjAzMDMsIDB4MDAwMTIxMDAsIDB4ZmZmZjAzMDMsIDB4MDAwMTIxMDAsCisJMHhmZmZmMDMwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDA2MTIsIDB4MDEwMDBGMDIsIDB4MDYxMjA2MTIsIDB4MDAwMDAyMDAsCisJMHgwMDAyMDAwNywgMHhmNTAxNGIyNywgMHhmNTAxNGIyNywgMHhmNTAxNGIyNywgMHhmNTAxNGIyNywKKwkweDA3MDAwMzAwLCAweDA3MDAwMzAwLCAweDA3MDAwMzAwLCAweDA3MDAwMzAwLCAweDAwMDAwMDA2LAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMjA0MDgsIDB4MDgwNDAyMDEsCisJMHgwMDBmMTEzMywgMHgwMDAwMDAwMCwgMHgwMDAwMWYwNCwgMHgwMDAwMWYwNCwgMHgwMDAwMWYwNCwKKwkweDAwMDAxZjA0LCAweDAwMDAxZjA0LCAweDAwMDAxZjA0LCAweDAwMDAxZjA0LCAweDAwMDAxZjA0LAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAyMDMwNCwgMHgwMDAwMDAwNCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDEwMTAwMDAsIDB4MDEwMDAwMDAsIDB4MDMwMzAwMDAsIDB4MDAwMTAzMDMsCisJMHgwMTAyMDIwMiwgMHgwMDAwMDAwMCwgMHgwMjA0MDMwMywgMHgyMTAwMjEwMywgMHgwMDA2MTIwMCwKKwkweDA2MTIwNjEyLCAweDA0MzIwNDMyLCAweDA0MzIwNDMyLCAweDAwMDQwMDA0LCAweDAwMDQwMDA0LAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEKK307CisKK3ZvaWQgaW5pdF9tMjhfMjAwbWh6X2RkcjIodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRyYW1fdmFscyk7IGkrKykKKwkJd3JpdGVsKGRyYW1fdmFsc1tpXSwgTVhTX0RSQU1fQkFTRSArICg0ICogaSkpOworfQorCit2b2lkIG14MjhfbWVtX2luaXRfY2xvY2sodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJLyogR2F0ZSBFTUkgY2xvY2sgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFRU1JLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwX3NldCk7CisKKwkvKiBFTUkgPSAyMDVNSHogKi8KKwl3cml0ZWwoQ0xLQ1RSTF9GUkFDMF9FTUlGUkFDX01BU0ssCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzBfc2V0KTsKKwl3cml0ZWwoKDB4MmEgPDwgQ0xLQ1RSTF9GUkFDMF9FTUlGUkFDX09GRlNFVCkgJgorCQlDTEtDVFJMX0ZSQUMwX0VNSUZSQUNfTUFTSywKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMF9jbHIpOworCisJLyogVW5nYXRlIEVNSSBjbG9jayAqLworCXdyaXRlbChDTEtDVFJMX0ZSQUMwX0NMS0dBVEVFTUksCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzBfY2xyKTsKKworCWVhcmx5X2RlbGF5KDExMDAwKTsKKworCXdyaXRlbCgoMiA8PCBDTEtDVFJMX0VNSV9ESVZfRU1JX09GRlNFVCkgfAorCQkoMSA8PCBDTEtDVFJMX0VNSV9ESVZfWFRBTF9PRkZTRVQpLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2VtaSk7CisKKwkvKiBVbmJ5cGFzcyBFTUkgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VNSSwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXFfY2xyKTsKKworCWVhcmx5X2RlbGF5KDEwMDAwKTsKK30KKwordm9pZCBteDI4X21lbV9zZXR1cF9jcHVfYW5kX2hidXModm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJLyogQ1BVID0gNDU0TUh6IGFuZCB1bmdhdGUgQ1BVIGNsb2NrICovCisJY2xyc2V0Yml0c19sZTMyKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzAsCisJCUNMS0NUUkxfRlJBQzBfQ1BVRlJBQ19NQVNLIHwgQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFQ1BVLAorCQkxOSA8PCBDTEtDVFJMX0ZSQUMwX0NQVUZSQUNfT0ZGU0VUKTsKKworCS8qIFNldCBDUFUgYnlwYXNzICovCisJd3JpdGVsKENMS0NUUkxfQ0xLU0VRX0JZUEFTU19DUFUsCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxX3NldCk7CisKKwkvKiBIQlVTID0gMTUxTUh6ICovCisJd3JpdGVsKENMS0NUUkxfSEJVU19ESVZfTUFTSywgJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9oYnVzX3NldCk7CisJd3JpdGVsKCgofjMpIDw8IENMS0NUUkxfSEJVU19ESVZfT0ZGU0VUKSAmIENMS0NUUkxfSEJVU19ESVZfTUFTSywKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9oYnVzX2Nscik7CisKKwllYXJseV9kZWxheSgxMDAwMCk7CisKKwkvKiBDUFUgY2xvY2sgZGl2aWRlciA9IDEgKi8KKwljbHJzZXRiaXRzX2xlMzIoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jcHUsCisJCQlDTEtDVFJMX0NQVV9ESVZfQ1BVX01BU0ssIDEpOworCisJLyogRGlzYWJsZSBDUFUgYnlwYXNzICovCisJd3JpdGVsKENMS0NUUkxfQ0xLU0VRX0JZUEFTU19DUFUsCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxX2Nscik7Cit9CisKK3ZvaWQgbXgyOF9tZW1fc2V0dXBfdmRkYSh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJd3JpdGVsKCgweGMgPDwgUE9XRVJfVkREQUNUUkxfVFJHX09GRlNFVCkgfAorCQkoMHg3IDw8IFBPV0VSX1ZEREFDVFJMX0JPX09GRlNFVF9PRkZTRVQpIHwKKwkJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1csCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRhY3RybCk7Cit9CisKK3ZvaWQgbXgyOF9tZW1fc2V0dXBfdmRkZCh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJd3JpdGVsKCgweDFjIDw8IFBPV0VSX1ZERERDVFJMX1RSR19PRkZTRVQpIHwKKwkJKDB4NyA8PCBQT1dFUl9WREREQ1RSTF9CT19PRkZTRVRfT0ZGU0VUKSB8CisJCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0JFTE9XLAorCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwpOworfQorCisjZGVmaW5lCUhXX0RJR0NUUkxfU0NSQVRDSDAJMHg4MDAxYzI4MAorI2RlZmluZQlIV19ESUdDVFJMX1NDUkFUQ0gxCTB4ODAwMWMyOTAKK3ZvaWQgZGF0YV9hYm9ydF9tZW1kZXRlY3RfaGFuZGxlcih2b2lkKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOwordm9pZCBkYXRhX2Fib3J0X21lbWRldGVjdF9oYW5kbGVyKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCJzdWJzIHBjLCByMTQsICM0Iik7Cit9CisKK3ZvaWQgbXgyOF9tZW1fZ2V0X3NpemUodm9pZCkKK3sKKwl1aW50MzJfdCBzeiwgZGE7CisJdWludDMyX3QgKnZ0ID0gKHVpbnQzMl90ICopMHgyMDsKKworCS8qIFJlcGxhY2UgdGhlIERBQlQgaGFuZGxlci4gKi8KKwlkYSA9IHZ0WzRdOworCXZ0WzRdID0gKHVpbnQzMl90KSZkYXRhX2Fib3J0X21lbWRldGVjdF9oYW5kbGVyOworCisJc3ogPSBnZXRfcmFtX3NpemUoKGxvbmcgKilQSFlTX1NEUkFNXzEsIFBIWVNfU0RSQU1fMV9TSVpFKTsKKwl3cml0ZWwoc3osIEhXX0RJR0NUUkxfU0NSQVRDSDApOworCXdyaXRlbChzeiwgSFdfRElHQ1RSTF9TQ1JBVENIMSk7CisKKwkvKiBSZXN0b3JlIHRoZSBvbGQgREFCVCBoYW5kbGVyLiAqLworCXZ0WzRdID0gZGE7Cit9CisKK3ZvaWQgbXgyOF9tZW1faW5pdCh2b2lkKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisJc3RydWN0IG14MjhfcGluY3RybF9yZWdzICpwaW5jdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcGluY3RybF9yZWdzICopTVhTX1BJTkNUUkxfQkFTRTsKKworCS8qIFNldCBERFIyIG1vZGUgKi8KKwl3cml0ZWwoUElOQ1RSTF9FTUlfRFNfQ1RSTF9ERFJfTU9ERV9ERFIyLAorCQkmcGluY3RybF9yZWdzLT5od19waW5jdHJsX2VtaV9kc19jdHJsX3NldCk7CisKKwkvKiBQb3dlciB1cCBQTEwwICovCisJd3JpdGVsKENMS0NUUkxfUExMMENUUkwwX1BPV0VSLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX3BsbDBjdHJsMF9zZXQpOworCisJZWFybHlfZGVsYXkoMTEwMDApOworCisJbXgyOF9tZW1faW5pdF9jbG9jaygpOworCisJbXgyOF9tZW1fc2V0dXBfdmRkYSgpOworCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIERSQU0gcmVnaXN0ZXJzCisJICovCisKKwkvKiBDbGVhciBTVEFSVCBiaXQgZnJvbSBEUkFNX0NUTDE2ICovCisJY2xyYml0c19sZTMyKE1YU19EUkFNX0JBU0UgKyAweDQwLCAxKTsKKworCWluaXRfbTI4XzIwMG1oel9kZHIyKCk7CisKKwkvKiBDbGVhciBTUkVGUkVTSCBiaXQgZnJvbSBEUkFNX0NUTDE3ICovCisJY2xyYml0c19sZTMyKE1YU19EUkFNX0JBU0UgKyAweDQ0LCAxKTsKKworCS8qIFNldCBTVEFSVCBiaXQgaW4gRFJBTV9DVEwxNiAqLworCXNldGJpdHNfbGUzMihNWFNfRFJBTV9CQVNFICsgMHg0MCwgMSk7CisKKwkvKiBXYWl0IGZvciBiaXQgMjAgKERSQU0gaW5pdCBjb21wbGV0ZSkgaW4gRFJBTV9DVEw1OCAqLworCXdoaWxlICghKHJlYWRsKE1YU19EUkFNX0JBU0UgKyAweGU4KSAmICgxIDw8IDIwKSkpCisJCTsKKworCW14MjhfbWVtX3NldHVwX3ZkZGQoKTsKKworCWVhcmx5X2RlbGF5KDEwMDAwKTsKKworCW14MjhfbWVtX3NldHVwX2NwdV9hbmRfaGJ1cygpOworCisJbXgyOF9tZW1fZ2V0X3NpemUoKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2RlbngvbTI4ZXZrL21tY19ib290LmMgYi9ib2FyZC9kZW54L20yOGV2ay9tbWNfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZDNhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9kZW54L20yOGV2ay9tbWNfYm9vdC5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBCb290IHNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvbXV4LW14MjguaD4KKworI2luY2x1ZGUgIm0yOF9pbml0LmgiCisKKy8qCisgKiBUaGlzIGRlbGF5IGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSBpbiBlYXJseSBzdGFnZSBvZiBib290LCB3aGVyZQorICogY2xvY2sgYXJlIG5vdCBzZXQgdXAgeWV0LiBUaGUgdGltZXIgdXNlZCBoZXJlIGlzIHJlc2V0IG9uIGV2ZXJ5IGJvb3QgYW5kCisgKiB0YWtlcyBhIGZldyBzZWNvbmRzIHRvIHJvbGwuIFRoZSBib290IGRvZXNuJ3QgdGFrZSB0aGF0IGxvbmcsIHNvIHRvIGtlZXAgdGhlCisgKiBjb2RlIHNpbXBsZSwgaXQgZG9lc24ndCB0YWtlIHJvbGxpbmcgaW50byBjb25zaWRlcmF0aW9uLgorICovCisjZGVmaW5lCUhXX0RJR0NUUkxfTUlDUk9TRUNPTkRTCTB4ODAwMWMwYzAKK3ZvaWQgZWFybHlfZGVsYXkoaW50IGRlbGF5KQoreworCXVpbnQzMl90IHN0ID0gcmVhZGwoSFdfRElHQ1RSTF9NSUNST1NFQ09ORFMpOworCXN0ICs9IGRlbGF5OworCXdoaWxlIChzdCA+IHJlYWRsKEhXX0RJR0NUUkxfTUlDUk9TRUNPTkRTKSkKKwkJOworfQorCisjZGVmaW5lCU1VWF9DT05GSUdfTEVECShNWFNfUEFEXzNWMyB8IE1YU19QQURfNE1BIHwgTVhTX1BBRF9OT1BVTEwpCisjZGVmaW5lCU1VWF9DT05GSUdfTENECShNWFNfUEFEXzNWMyB8IE1YU19QQURfNE1BKQorI2RlZmluZQlNVVhfQ09ORklHX1RTQwkoTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzhNQSB8IE1YU19QQURfUFVMTFVQKQorI2RlZmluZQlNVVhfQ09ORklHX1NTUDAJKE1YU19QQURfM1YzIHwgTVhTX1BBRF8xMk1BIHwgTVhTX1BBRF9QVUxMVVApCisjZGVmaW5lCU1VWF9DT05GSUdfU1NQMgkoTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzRNQSB8IE1YU19QQURfUFVMTFVQKQorI2RlZmluZQlNVVhfQ09ORklHX0dQTUkJKE1YU19QQURfMVY4IHwgTVhTX1BBRF80TUEgfCBNWFNfUEFEX05PUFVMTCkKKyNkZWZpbmUJTVVYX0NPTkZJR19FTkVUCShNWFNfUEFEXzNWMyB8IE1YU19QQURfNE1BIHwgTVhTX1BBRF9QVUxMVVApCisjZGVmaW5lCU1VWF9DT05GSUdfRU1JCShNWFNfUEFEXzNWMyB8IE1YU19QQURfMTJNQSB8IE1YU19QQURfTk9QVUxMKQorCitjb25zdCBpb211eF9jZmdfdCBpb211eF9zZXR1cFtdID0geworCS8qIExFRCAqLworCU1YMjhfUEFEX0VORVQwX1JYRDNfX0dQSU9fNF8xMCB8IE1VWF9DT05GSUdfTEVELAorCisJLyogZnJhbWVidWZmZXIgKi8KKwlNWDI4X1BBRF9MQ0RfRDAwX19MQ0RfRDAgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDAxX19MQ0RfRDEgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDAyX19MQ0RfRDIgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDAzX19MQ0RfRDMgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDA0X19MQ0RfRDQgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDA1X19MQ0RfRDUgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDA2X19MQ0RfRDYgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDA3X19MQ0RfRDcgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDA4X19MQ0RfRDggfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDA5X19MQ0RfRDkgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDEwX19MQ0RfRDEwIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QxMV9fTENEX0QxMSB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMTJfX0xDRF9EMTIgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDEzX19MQ0RfRDEzIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QxNF9fTENEX0QxNCB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMTVfX0xDRF9EMTUgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDE2X19MQ0RfRDE2IHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QxN19fTENEX0QxNyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMThfX0xDRF9EMTggfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDE5X19MQ0RfRDE5IHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QyMF9fTENEX0QyMCB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMjFfX0xDRF9EMjEgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDIyX19MQ0RfRDIyIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QyM19fTENEX0QyMyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9SRF9FX19MQ0RfVlNZTkMgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfV1JfUldOX19MQ0RfSFNZTkMgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfUlNfX0xDRF9ET1RDTEsgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfQ1NfX0xDRF9DUyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9WU1lOQ19fTENEX1ZTWU5DIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0hTWU5DX19MQ0RfSFNZTkMgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRE9UQ0xLX19MQ0RfRE9UQ0xLIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0VOQUJMRV9fR1BJT18xXzMxIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX1JFU0VUX19HUElPXzNfMzAgfCBNVVhfQ09ORklHX0xDRCwKKworCS8qIFVBUlQxICovCisJTVgyOF9QQURfUFdNMF9fRFVBUlRfUlgsCisJTVgyOF9QQURfUFdNMV9fRFVBUlRfVFgsCisJTVgyOF9QQURfQVVBUlQwX1RYX19EVUFSVF9SVFMsCisJTVgyOF9QQURfQVVBUlQwX1JYX19EVUFSVF9DVFMsCisKKwkvKiBVQVJUMiAqLworCU1YMjhfUEFEX0FVQVJUMV9SWF9fQVVBUlQxX1JYLAorCU1YMjhfUEFEX0FVQVJUMV9UWF9fQVVBUlQxX1RYLAorCU1YMjhfUEFEX0FVQVJUMV9SVFNfX0FVQVJUMV9SVFMsCisJTVgyOF9QQURfQVVBUlQxX0NUU19fQVVBUlQxX0NUUywKKworCS8qIENBTiAqLworCU1YMjhfUEFEX0dQTUlfUkRZMl9fQ0FOMF9UWCwKKwlNWDI4X1BBRF9HUE1JX1JEWTNfX0NBTjBfUlgsCisKKwkvKiBJMkMgKi8KKwlNWDI4X1BBRF9JMkMwX1NDTF9fSTJDMF9TQ0wsCisJTVgyOF9QQURfSTJDMF9TREFfX0kyQzBfU0RBLAorCisJLyogVFNDMjAwNyAqLworCU1YMjhfUEFEX1NBSUYwX01DTEtfX0dQSU9fM18yMCB8IE1VWF9DT05GSUdfVFNDLAorCisJLyogTU1DMCAqLworCU1YMjhfUEFEX1NTUDBfREFUQTBfX1NTUDBfRDAgfCBNVVhfQ09ORklHX1NTUDAsCisJTVgyOF9QQURfU1NQMF9EQVRBMV9fU1NQMF9EMSB8IE1VWF9DT05GSUdfU1NQMCwKKwlNWDI4X1BBRF9TU1AwX0RBVEEyX19TU1AwX0QyIHwgTVVYX0NPTkZJR19TU1AwLAorCU1YMjhfUEFEX1NTUDBfREFUQTNfX1NTUDBfRDMgfCBNVVhfQ09ORklHX1NTUDAsCisJTVgyOF9QQURfU1NQMF9EQVRBNF9fU1NQMF9ENCB8IE1VWF9DT05GSUdfU1NQMCwKKwlNWDI4X1BBRF9TU1AwX0RBVEE1X19TU1AwX0Q1IHwgTVVYX0NPTkZJR19TU1AwLAorCU1YMjhfUEFEX1NTUDBfREFUQTZfX1NTUDBfRDYgfCBNVVhfQ09ORklHX1NTUDAsCisJTVgyOF9QQURfU1NQMF9EQVRBN19fU1NQMF9ENyB8IE1VWF9DT05GSUdfU1NQMCwKKwlNWDI4X1BBRF9TU1AwX0NNRF9fU1NQMF9DTUQgfCBNVVhfQ09ORklHX1NTUDAsCisJTVgyOF9QQURfU1NQMF9ERVRFQ1RfX1NTUDBfQ0FSRF9ERVRFQ1QgfAorCQkoTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzEyTUEgfCBNWFNfUEFEX05PUFVMTCksCisJTVgyOF9QQURfU1NQMF9TQ0tfX1NTUDBfU0NLIHwKKwkJKE1YU19QQURfM1YzIHwgTVhTX1BBRF8xMk1BIHwgTVhTX1BBRF9OT1BVTEwpLAorCU1YMjhfUEFEX1BXTTNfX0dQSU9fM18yOCB8IE1VWF9DT05GSUdfU1NQMCwJLyogUG93ZXIgLi4gRklYTUUgKi8KKwlNWDI4X1BBRF9BVUFSVDJfQ1RTX19HUElPXzNfMTAsCS8qIFdQIC4uLiBGSVhNRSAqLworCisJLyogR1BNSSBOQU5EICovCisJTVgyOF9QQURfR1BNSV9EMDBfX0dQTUlfRDAgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9EMDFfX0dQTUlfRDEgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9EMDJfX0dQTUlfRDIgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9EMDNfX0dQTUlfRDMgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9EMDRfX0dQTUlfRDQgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9EMDVfX0dQTUlfRDUgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9EMDZfX0dQTUlfRDYgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9EMDdfX0dQTUlfRDcgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9DRTBOX19HUE1JX0NFME4gfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9SRFkwX19HUE1JX1JFQURZMCB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX1JETl9fR1BNSV9SRE4gfAorCQkoTVhTX1BBRF8xVjggfCBNWFNfUEFEXzhNQSB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9HUE1JX1dSTl9fR1BNSV9XUk4gfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9BTEVfX0dQTUlfQUxFIHwgTVVYX0NPTkZJR19HUE1JLAorCU1YMjhfUEFEX0dQTUlfQ0xFX19HUE1JX0NMRSB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX1JFU0VUTl9fR1BNSV9SRVNFVE4gfCBNVVhfQ09ORklHX0dQTUksCisKKwkvKiBGRUMgRXRoZXJuZXQgKi8KKwlNWDI4X1BBRF9FTkVUMF9NRENfX0VORVQwX01EQyB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9NRElPX19FTkVUMF9NRElPIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX1JYX0VOX19FTkVUMF9SWF9FTiB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9UWF9FTl9fRU5FVDBfVFhfRU4gfCBNVVhfQ09ORklHX0VORVQsCisJTVgyOF9QQURfRU5FVDBfUlhEMF9fRU5FVDBfUlhEMCB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9SWEQxX19FTkVUMF9SWEQxIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX1RYRDBfX0VORVQwX1RYRDAgfCBNVVhfQ09ORklHX0VORVQsCisJTVgyOF9QQURfRU5FVDBfVFhEMV9fRU5FVDBfVFhEMSB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUX0NMS19fQ0xLQ1RSTF9FTkVUIHwgTVVYX0NPTkZJR19FTkVULAorCisJTVgyOF9QQURfRU5FVDBfQ09MX19FTkVUMV9UWF9FTiB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9DUlNfX0VORVQxX1JYX0VOIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX1JYRDJfX0VORVQxX1JYRDAgfCBNVVhfQ09ORklHX0VORVQsCisJTVgyOF9QQURfRU5FVDBfUlhEM19fRU5FVDFfUlhEMSB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9UWEQyX19FTkVUMV9UWEQwIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX1RYRDNfX0VORVQxX1RYRDEgfCBNVVhfQ09ORklHX0VORVQsCisKKwkvKiBJMkMgKi8KKwlNWDI4X1BBRF9JMkMwX1NDTF9fSTJDMF9TQ0wsCisJTVgyOF9QQURfSTJDMF9TREFfX0kyQzBfU0RBLAorCisJLyogRU1JICovCisJTVgyOF9QQURfRU1JX0QwMF9fRU1JX0RBVEEwIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwMV9fRU1JX0RBVEExIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwMl9fRU1JX0RBVEEyIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwM19fRU1JX0RBVEEzIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwNF9fRU1JX0RBVEE0IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwNV9fRU1JX0RBVEE1IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwNl9fRU1JX0RBVEE2IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwN19fRU1JX0RBVEE3IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwOF9fRU1JX0RBVEE4IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QwOV9fRU1JX0RBVEE5IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QxMF9fRU1JX0RBVEExMCB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9EMTFfX0VNSV9EQVRBMTEgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDEyX19FTUlfREFUQTEyIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QxM19fRU1JX0RBVEExMyB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9EMTRfX0VNSV9EQVRBMTQgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDE1X19FTUlfREFUQTE1IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX09EVDBfX0VNSV9PRFQwIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0RRTTBfX0VNSV9EUU0wIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX09EVDFfX0VNSV9PRFQxIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0RRTTFfX0VNSV9EUU0xIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0REUl9PUEVOX0ZCX19FTUlfRERSX09QRU5fRkVFREJBQ0sgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfQ0xLX19FTUlfQ0xLIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0RRUzBfX0VNSV9EUVMwIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0RRUzFfX0VNSV9EUVMxIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0REUl9PUEVOX19FTUlfRERSX09QRU4gfCBNVVhfQ09ORklHX0VNSSwKKworCU1YMjhfUEFEX0VNSV9BMDBfX0VNSV9BRERSMCB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDFfX0VNSV9BRERSMSB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDJfX0VNSV9BRERSMiB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDNfX0VNSV9BRERSMyB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDRfX0VNSV9BRERSNCB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDVfX0VNSV9BRERSNSB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDZfX0VNSV9BRERSNiB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDdfX0VNSV9BRERSNyB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDhfX0VNSV9BRERSOCB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMDlfX0VNSV9BRERSOSB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMTBfX0VNSV9BRERSMTAgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfQTExX19FTUlfQUREUjExIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0ExMl9fRU1JX0FERFIxMiB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMTNfX0VNSV9BRERSMTMgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfQTE0X19FTUlfQUREUjE0IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0JBMF9fRU1JX0JBMCB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9CQTFfX0VNSV9CQTEgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfQkEyX19FTUlfQkEyIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0NBU05fX0VNSV9DQVNOIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX1JBU05fX0VNSV9SQVNOIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX1dFTl9fRU1JX1dFTiB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9DRTBOX19FTUlfQ0UwTiB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9DRTFOX19FTUlfQ0UxTiB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9DS0VfX0VNSV9DS0UgfCBNVVhfQ09ORklHX0VNSSwKKworCS8qIFNQSTIgKGZvciBmbGFzaCkgKi8KKwlNWDI4X1BBRF9TU1AyX1NDS19fU1NQMl9TQ0sgfCBNVVhfQ09ORklHX1NTUDIsCisJTVgyOF9QQURfU1NQMl9NT1NJX19TU1AyX0NNRCB8IE1VWF9DT05GSUdfU1NQMiwKKwlNWDI4X1BBRF9TU1AyX01JU09fX1NTUDJfRDAgfCBNVVhfQ09ORklHX1NTUDIsCisJTVgyOF9QQURfU1NQMl9TUzBfX1NTUDJfRDMgfAorCQkoTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzhNQSB8IE1YU19QQURfUFVMTFVQKSwKK307CisKK3ZvaWQgYm9hcmRfaW5pdF9sbCh2b2lkKQoreworCW14c19pb211eF9zZXR1cF9tdWx0aXBsZV9wYWRzKGlvbXV4X3NldHVwLCBBUlJBWV9TSVpFKGlvbXV4X3NldHVwKSk7CisJbXgyOF9wb3dlcl9pbml0KCk7CisJbXgyOF9tZW1faW5pdCgpOworCW14MjhfcG93ZXJfd2FpdF9wc3dpdGNoKCk7Cit9CisKKy8qIFN1cHBvcnQgYXBhcmF0dXMgKi8KK2lubGluZSB2b2lkIGJvYXJkX2luaXRfZih1bnNpZ25lZCBsb25nIGJvb3RmbGFnKQoreworCWZvciAoOzspCisJCTsKK30KKworaW5saW5lIHZvaWQgYm9hcmRfaW5pdF9yKGdkX3QgKmlkLCB1bG9uZyBkZXN0X2FkZHIpCit7CisJZm9yICg7OykKKwkJOworfQorCitpbmxpbmUgaW50IHByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlyZXR1cm4gMDsKK30KKworaW5saW5lIHZvaWQgX19jb2xvdXJlZF9MRURfaW5pdCh2b2lkKSB7fQoraW5saW5lIHZvaWQgX19yZWRfTEVEX29uKHZvaWQpIHt9Cit2b2lkIGNvbG91cmVkX0xFRF9pbml0KHZvaWQpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fY29sb3VyZWRfTEVEX2luaXQiKSkpOwordm9pZCByZWRfTEVEX29uKHZvaWQpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fcmVkX0xFRF9vbiIpKSk7Cit2b2lkIGhhbmcodm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Cit2b2lkIGhhbmcodm9pZCkKK3sKKwlmb3IgKDs7KQorCQk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9kZW54L20yOGV2ay9wb3dlcl9pbml0LmMgYi9ib2FyZC9kZW54L20yOGV2ay9wb3dlcl9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczMjJiNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RlbngvbTI4ZXZrL3Bvd2VyX2luaXQuYwpAQCAtMCwwICsxLDkxMyBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggQm9vdCBQTUlDIGluaXQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKworI2luY2x1ZGUgIm0yOF9pbml0LmgiCisKK3ZvaWQgbXgyOF9wb3dlcl9jbG9jazJ4dGFsKHZvaWQpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKworCS8qIFNldCBYVEFMIGFzIENQVSByZWZlcmVuY2UgY2xvY2sgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0NQVSwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXFfc2V0KTsKK30KKwordm9pZCBteDI4X3Bvd2VyX2Nsb2NrMnBsbCh2b2lkKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwl3cml0ZWwoQ0xLQ1RSTF9QTEwwQ1RSTDBfUE9XRVIsCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfcGxsMGN0cmwwX3NldCk7CisJZWFybHlfZGVsYXkoMTAwKTsKKwl3cml0ZWwoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0NQVSwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXFfY2xyKTsKK30KKwordm9pZCBteDI4X3Bvd2VyX2NsZWFyX2F1dG9fcmVzdGFydCh2b2lkKQoreworCXN0cnVjdCBteDI4X3J0Y19yZWdzICpydGNfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9ydGNfcmVncyAqKU1YU19SVENfQkFTRTsKKworCXdyaXRlbChSVENfQ1RSTF9TRlRSU1QsICZydGNfcmVncy0+aHdfcnRjX2N0cmxfY2xyKTsKKwl3aGlsZSAocmVhZGwoJnJ0Y19yZWdzLT5od19ydGNfY3RybCkgJiBSVENfQ1RSTF9TRlRSU1QpCisJCTsKKworCXdyaXRlbChSVENfQ1RSTF9DTEtHQVRFLCAmcnRjX3JlZ3MtPmh3X3J0Y19jdHJsX2Nscik7CisJd2hpbGUgKHJlYWRsKCZydGNfcmVncy0+aHdfcnRjX2N0cmwpICYgUlRDX0NUUkxfQ0xLR0FURSkKKwkJOworCisJLyoKKwkgKiBEdWUgdG8gdGhlIGhhcmR3YXJlIGRlc2lnbiBidWcgb2YgbXgyOCBFVkstQQorCSAqIHdlIG5lZWQgdG8gc2V0IHRoZSBBVVRPX1JFU1RBUlQgYml0LgorCSAqLworCWlmIChyZWFkbCgmcnRjX3JlZ3MtPmh3X3J0Y19wZXJzaXN0ZW50MCkgJiBSVENfUEVSU0lTVEVOVDBfQVVUT19SRVNUQVJUKQorCQlyZXR1cm47CisKKwl3aGlsZSAocmVhZGwoJnJ0Y19yZWdzLT5od19ydGNfc3RhdCkgJiBSVENfU1RBVF9ORVdfUkVHU19NQVNLKQorCQk7CisKKwlzZXRiaXRzX2xlMzIoJnJ0Y19yZWdzLT5od19ydGNfcGVyc2lzdGVudDAsCisJCQlSVENfUEVSU0lTVEVOVDBfQVVUT19SRVNUQVJUKTsKKwl3cml0ZWwoUlRDX0NUUkxfRk9SQ0VfVVBEQVRFLCAmcnRjX3JlZ3MtPmh3X3J0Y19jdHJsX3NldCk7CisJd3JpdGVsKFJUQ19DVFJMX0ZPUkNFX1VQREFURSwgJnJ0Y19yZWdzLT5od19ydGNfY3RybF9jbHIpOworCXdoaWxlIChyZWFkbCgmcnRjX3JlZ3MtPmh3X3J0Y19zdGF0KSAmIFJUQ19TVEFUX05FV19SRUdTX01BU0spCisJCTsKKwl3aGlsZSAocmVhZGwoJnJ0Y19yZWdzLT5od19ydGNfc3RhdCkgJiBSVENfU1RBVF9TVEFMRV9SRUdTX01BU0spCisJCTsKK30KKwordm9pZCBteDI4X3Bvd2VyX3NldF9saW5yZWcodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKworCS8qIFNldCBsaW5lYXIgcmVndWxhdG9yIDI1bVYgYmVsb3cgc3dpdGNoaW5nIGNvbnZlcnRlciAqLworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0ssCisJCQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzFTVEVQU19CRUxPVyk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGFjdHJsLAorCQkJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF9NQVNLLAorCQkJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1cpOworCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwsCisJCQlQT1dFUl9WRERJT0NUUkxfTElOUkVHX09GRlNFVF9NQVNLLAorCQkJUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0JFTE9XKTsKK30KKwordm9pZCBteDI4X3Bvd2VyX3NldHVwXzV2X2RldGVjdCh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJLyogU3RhcnQgNVYgZGV0ZWN0aW9uICovCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfTUFTSywKKwkJCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF80VjQgfAorCQkJUE9XRVJfNVZDVFJMX1BXUlVQX1ZCVVNfQ01QUyk7Cit9CisKK3ZvaWQgbXgyOF9zcmNfcG93ZXJfaW5pdCh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJLyogSW1wcm92ZSBlZmZpY2llbnkgYW5kIHJlZHVjZSB0cmFuc2llbnQgcmlwcGxlICovCisJd3JpdGVsKFBPV0VSX0xPT1BDVFJMX1RPR0dMRV9ESUYgfCBQT1dFUl9MT09QQ1RSTF9FTl9DTV9IWVNUIHwKKwkJUE9XRVJfTE9PUENUUkxfRU5fREZfSFlTVCwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2xvb3BjdHJsX3NldCk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2RjbGltaXRzLAorCQkJUE9XRVJfRENMSU1JVFNfUE9TTElNSVRfQlVDS19NQVNLLAorCQkJMHgzMCA8PCBQT1dFUl9EQ0xJTUlUU19QT1NMSU1JVF9CVUNLX09GRlNFVCk7CisKKwlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2JhdHRtb25pdG9yLAorCQkJUE9XRVJfQkFUVE1PTklUT1JfRU5fQkFUQURKKTsKKworCS8qIEluY3JlYXNlIHRoZSBSQ1NDQUxFIGxldmVsIGZvciBxdWljayBEQ0RDIHJlc3BvbnNlIHRvIGR5bmFtaWMgbG9hZCAqLworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfbG9vcGN0cmwsCisJCQlQT1dFUl9MT09QQ1RSTF9FTl9SQ1NDQUxFX01BU0ssCisJCQlQT1dFUl9MT09QQ1RSTF9SQ1NDQUxFX1RIUkVTSCB8CisJCQlQT1dFUl9MT09QQ1RSTF9FTl9SQ1NDQUxFXzhYKTsKKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfbWlucHdyLAorCQkJUE9XRVJfTUlOUFdSX0hBTEZGRVRTLCBQT1dFUl9NSU5QV1JfRE9VQkxFX0ZFVFMpOworCisJLyogNVYgdG8gYmF0dGVyeSBoYW5kb2ZmIC4uLiBGSVhNRSAqLworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsLCBQT1dFUl81VkNUUkxfRENEQ19YRkVSKTsKKwllYXJseV9kZWxheSgzMCk7CisJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsIFBPV0VSXzVWQ1RSTF9EQ0RDX1hGRVIpOworfQorCit2b2lkIG14MjhfcG93ZXJfaW5pdF80cDJfcGFyYW1zKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwkvKiBTZXR1cCA0UDIgcGFyYW1ldGVycyAqLworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwKKwkJUE9XRVJfRENEQzRQMl9DTVBUUklQX01BU0sgfCBQT1dFUl9EQ0RDNFAyX1RSR19NQVNLLAorCQlQT1dFUl9EQ0RDNFAyX1RSR180VjIgfCAoMzEgPDwgUE9XRVJfRENEQzRQMl9DTVBUUklQX09GRlNFVCkpOworCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCVBPV0VSXzVWQ1RSTF9IRUFEUk9PTV9BREpfTUFTSywKKwkJMHg0IDw8IFBPV0VSXzVWQ1RSTF9IRUFEUk9PTV9BREpfT0ZGU0VUKTsKKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwKKwkJUE9XRVJfRENEQzRQMl9EUk9QT1VUX0NUUkxfTUFTSywKKwkJUE9XRVJfRENEQzRQMl9EUk9QT1VUX0NUUkxfMTAwTVYgfAorCQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF9TUkNfU0VMKTsKKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsLAorCQlQT1dFUl81VkNUUkxfQ0hBUkdFXzRQMl9JTElNSVRfTUFTSywKKwkJMHgzZiA8PCBQT1dFUl81VkNUUkxfQ0hBUkdFXzRQMl9JTElNSVRfT0ZGU0VUKTsKK30KKwordm9pZCBteDI4X2VuYWJsZV80cDJfZGNkY19pbnB1dChpbnQgeGZlcikKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCB0bXAsIHZidXNfdGhyZXNoLCB2YnVzXzV2ZGV0ZWN0LCBwd2RfYm87CisJdWludDMyX3QgcHJldl81dl9icm5vdXQsIHByZXZfNXZfZHJvb3A7CisKKwlwcmV2XzV2X2Jybm91dCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpICYKKwkJCQlQT1dFUl81VkNUUkxfUFdETl81VkJSTk9VVDsKKwlwcmV2XzV2X2Ryb29wID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmwpICYKKwkJCQlQT1dFUl9DVFJMX0VOSVJRX1ZERDVWX0RST09QOworCisJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsIFBPV0VSXzVWQ1RSTF9QV0ROXzVWQlJOT1VUKTsKKwl3cml0ZWwoUE9XRVJfUkVTRVRfVU5MT0NLX0tFWSB8IFBPV0VSX1JFU0VUX1BXRF9PRkYsCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9yZXNldCk7CisKKwljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmwsIFBPV0VSX0NUUkxfRU5JUlFfVkRENVZfRFJPT1ApOworCisJaWYgKHhmZXIgJiYgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpICYKKwkJCVBPV0VSXzVWQ1RSTF9FTkFCTEVfRENEQykpIHsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUmVjb3JkaW5nIG9yaWduYWwgdmFsdWVzIHRoYXQgd2lsbCBiZSBtb2RpZmllZCB0ZW1wb3JhcmxpbHkKKwkgKiB0byBoYW5kbGUgYSBjaGlwIGJ1Zy4gU2VlIGNoaXAgZXJyYXRhIGZvciBDUSBFTkdSMDAxMTU4MzcKKwkgKi8KKwl0bXAgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsKTsKKwl2YnVzX3RocmVzaCA9IHRtcCAmIFBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF9NQVNLOworCXZidXNfNXZkZXRlY3QgPSB0bXAgJiBQT1dFUl81VkNUUkxfVkJVU1ZBTElEXzVWREVURUNUOworCisJcHdkX2JvID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX21pbnB3cikgJiBQT1dFUl9NSU5QV1JfUFdEX0JPOworCisJLyoKKwkgKiBEaXNhYmxlIG1lY2hhbmlzbXMgdGhhdCBnZXQgZXJyb25lb3VzbHkgdHJpcHBlZCBieSB3aGVuIHNldHRpbmcKKwkgKiB0aGUgRENEQzRQMiBFTl9EQ0RDCisJICovCisJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfNVZERVRFQ1QgfAorCQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfTUFTSyk7CisKKwl3cml0ZWwoUE9XRVJfTUlOUFdSX1BXRF9CTywgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX21pbnB3cl9zZXQpOworCisJaWYgKHhmZXIpIHsKKwkJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCQkJUE9XRVJfNVZDVFJMX0RDRENfWEZFUik7CisJCWVhcmx5X2RlbGF5KDIwKTsKKwkJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCQkJUE9XRVJfNVZDVFJMX0RDRENfWEZFUik7CisKKwkJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCQkJUE9XRVJfNVZDVFJMX0VOQUJMRV9EQ0RDKTsKKwl9IGVsc2UgeworCQlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2RjZGM0cDIsCisJCQkJUE9XRVJfRENEQzRQMl9FTkFCTEVfRENEQyk7CisJfQorCisJZWFybHlfZGVsYXkoMjUpOworCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfTUFTSywgdmJ1c190aHJlc2gpOworCisJaWYgKHZidXNfNXZkZXRlY3QpCisJCXdyaXRlbCh2YnVzXzV2ZGV0ZWN0LCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX3NldCk7CisKKwlpZiAoIXB3ZF9ibykKKwkJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9taW5wd3IsIFBPV0VSX01JTlBXUl9QV0RfQk8pOworCisJd2hpbGUgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsKSAmIFBPV0VSX0NUUkxfVkJVU19WQUxJRF9JUlEpCisJCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybCwKKwkJCQlQT1dFUl9DVFJMX1ZCVVNfVkFMSURfSVJRKTsKKworCWlmIChwcmV2XzV2X2Jybm91dCkgeworCQl3cml0ZWwoUE9XRVJfNVZDVFJMX1BXRE5fNVZCUk5PVVQsCisJCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX3NldCk7CisJCXdyaXRlbChQT1dFUl9SRVNFVF9VTkxPQ0tfS0VZLAorCQkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3Jlc2V0KTsKKwl9IGVsc2UgeworCQl3cml0ZWwoUE9XRVJfNVZDVFJMX1BXRE5fNVZCUk5PVVQsCisJCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX2Nscik7CisJCXdyaXRlbChQT1dFUl9SRVNFVF9VTkxPQ0tfS0VZIHwgUE9XRVJfUkVTRVRfUFdEX09GRiwKKwkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9yZXNldCk7CisJfQorCisJd2hpbGUgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsKSAmIFBPV0VSX0NUUkxfVkRENVZfRFJPT1BfSVJRKQorCQljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmwsCisJCQkJUE9XRVJfQ1RSTF9WREQ1Vl9EUk9PUF9JUlEpOworCisJaWYgKHByZXZfNXZfZHJvb3ApCisJCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybCwKKwkJCQlQT1dFUl9DVFJMX0VOSVJRX1ZERDVWX0RST09QKTsKKwllbHNlCisJCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybCwKKwkJCQlQT1dFUl9DVFJMX0VOSVJRX1ZERDVWX0RST09QKTsKK30KKwordm9pZCBteDI4X3Bvd2VyX2luaXRfNHAyX3JlZ3VsYXRvcih2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCXVpbnQzMl90IHRtcCwgdG1wMjsKKworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwgUE9XRVJfRENEQzRQMl9FTkFCTEVfNFAyKTsKKworCXdyaXRlbChQT1dFUl9DSEFSR0VfRU5BQkxFX0xPQUQsICZwb3dlcl9yZWdzLT5od19wb3dlcl9jaGFyZ2Vfc2V0KTsKKworCXdyaXRlbChQT1dFUl81VkNUUkxfQ0hBUkdFXzRQMl9JTElNSVRfTUFTSywKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybF9jbHIpOworCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwgUE9XRVJfRENEQzRQMl9UUkdfTUFTSyk7CisKKwkvKiBQb3dlciB1cCB0aGUgNHAyIHJhaWwgYW5kIGxvZ2ljL2NvbnRyb2wgKi8KKwl3cml0ZWwoUE9XRVJfNVZDVFJMX1BXRF9DSEFSR0VfNFAyX01BU0ssCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfY2xyKTsKKworCS8qCisJICogU3RhcnQgY2hhcmdpbmcgdXAgdGhlIDRwMiBjYXBhY2l0b3IuIFdlIHJhbXAgb2YgdGhpcyBjaGFyZ2UKKwkgKiBncmFkdWFsbHkgdG8gYXZvaWQgbGFyZ2UgaW5ydXNoIGN1cnJlbnQgZnJvbSB0aGUgNVYgY2FibGUgd2hpY2ggY2FuCisJICogY2F1c2UgdHJhbnNpZW50cy9wcm9ibGVtcworCSAqLworCW14MjhfZW5hYmxlXzRwMl9kY2RjX2lucHV0KDApOworCisJaWYgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsKSAmIFBPV0VSX0NUUkxfVkJVU19WQUxJRF9JUlEpIHsKKwkJLyoKKwkJICogSWYgd2UgYXJyaXZlZCBoZXJlLCB3ZSB3ZXJlIHVuYWJsZSB0byByZWNvdmVyIGZyb20gbXgyMyBjaGlwCisJCSAqIGVycmF0YSA1ODM3LiA0UDIgaXMgZGlzYWJsZWQgYW5kIHN1ZmZpY2llbnQgYmF0dGVyeSBwb3dlciBpcworCQkgKiBub3QgcHJlc2VudC4gRXhpdGluZyB0byBub3QgZW5hYmxlIERDREMgcG93ZXIgZHVyaW5nIDVWCisJCSAqIGNvbm5lY3RlZCBzdGF0ZS4KKwkJICovCisJCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwKKwkJCVBPV0VSX0RDREM0UDJfRU5BQkxFX0RDREMpOworCQl3cml0ZWwoUE9XRVJfNVZDVFJMX1BXRF9DSEFSR0VfNFAyX01BU0ssCisJCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX3NldCk7CisJCWhhbmcoKTsKKwl9CisKKwkvKgorCSAqIEhlcmUgd2Ugc2V0IHRoZSA0cDIgYnJvd25vdXQgbGV2ZWwgdG8gc29tZXRoaW5nIHZlcnkgY2xvc2UgdG8gNC4yVi4KKwkgKiBXZSB0aGVuIGNoZWNrIHRoZSBicm93bm91dCBzdGF0dXMuIElmIHRoZSBicm93bm91dCBzdGF0dXMgaXMgZmFsc2UsCisJICogdGhlIHZvbHRhZ2UgaXMgYWxyZWFkeSBjbG9zZSB0byB0aGUgdGFyZ2V0IHZvbHRhZ2Ugb2YgNC4yViBzbyB3ZQorCSAqIGNhbiBnbyBhaGVhZCBhbmQgc2V0IHRoZSA0UDIgY3VycmVudCBsaW1pdCB0byBvdXIgbWF4IHRhcmdldCBsaW1pdC4KKwkgKiBJZiB0aGUgYnJvd25vdXQgc3RhdHVzIGlzIHRydWUsIHdlIG5lZWQgdG8gcmFtcCB1cyB0aGUgY3VycmVudCBsaW1pdAorCSAqIHNvIHRoYXQgd2UgZG9uJ3QgY2F1c2UgbGFyZ2UgaW5ydXNoIGN1cnJlbnQgaXNzdWVzLiBXZSBzdGVwIHVwIHRoZQorCSAqIGN1cnJlbnQgbGltaXQgdW50aWwgdGhlIGJyb3dub3V0IHN0YXR1cyBpcyBmYWxzZSBvciB1bnRpbCB3ZSd2ZQorCSAqIHJlYWNoZWQgb3VyIG1heGltdW0gZGVmaW5lZCA0cDIgY3VycmVudCBsaW1pdC4KKwkgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2RjZGM0cDIsCisJCQlQT1dFUl9EQ0RDNFAyX0JPX01BU0ssCisJCQkyMiA8PCBQT1dFUl9EQ0RDNFAyX0JPX09GRlNFVCk7CS8qIDQuMTVWICovCisKKwlpZiAoIShyZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfc3RzKSAmIFBPV0VSX1NUU19EQ0RDXzRQMl9CTykpIHsKKwkJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCQkweDNmIDw8IFBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9PRkZTRVQpOworCX0gZWxzZSB7CisJCXRtcCA9IChyZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsKSAmCisJCQlQT1dFUl81VkNUUkxfQ0hBUkdFXzRQMl9JTElNSVRfTUFTSykgPj4KKwkJCVBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9PRkZTRVQ7CisJCXdoaWxlICh0bXAgPCAweDNmKSB7CisJCQlpZiAoIShyZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfc3RzKSAmCisJCQkJCVBPV0VSX1NUU19EQ0RDXzRQMl9CTykpIHsKKwkJCQl0bXAgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsKTsKKwkJCQl0bXAgfD0gUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX01BU0s7CisJCQkJZWFybHlfZGVsYXkoMTAwKTsKKwkJCQl3cml0ZWwodG1wLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJdG1wKys7CisJCQkJdG1wMiA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpOworCQkJCXRtcDIgJj0gflBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9NQVNLOworCQkJCXRtcDIgfD0gdG1wIDw8CisJCQkJCVBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9PRkZTRVQ7CisJCQkJd3JpdGVsKHRtcDIsICZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpOworCQkJCWVhcmx5X2RlbGF5KDEwMCk7CisJCQl9CisJCX0KKwl9CisKKwljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2RjZGM0cDIsIFBPV0VSX0RDREM0UDJfQk9fTUFTSyk7CisJd3JpdGVsKFBPV0VSX0NUUkxfRENEQzRQMl9CT19JUlEsICZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7Cit9CisKK3ZvaWQgbXgyOF9wb3dlcl9pbml0X2RjZGNfNHAyX3NvdXJjZSh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJaWYgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2RjZGM0cDIpICYKKwkJUE9XRVJfRENEQzRQMl9FTkFCTEVfRENEQykpIHsKKwkJaGFuZygpOworCX0KKworCW14MjhfZW5hYmxlXzRwMl9kY2RjX2lucHV0KDEpOworCisJaWYgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsKSAmIFBPV0VSX0NUUkxfVkJVU19WQUxJRF9JUlEpIHsKKwkJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9kY2RjNHAyLAorCQkJUE9XRVJfRENEQzRQMl9FTkFCTEVfRENEQyk7CisJCXdyaXRlbChQT1dFUl81VkNUUkxfRU5BQkxFX0RDREMsCisJCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX2Nscik7CisJCXdyaXRlbChQT1dFUl81VkNUUkxfUFdEX0NIQVJHRV80UDJfTUFTSywKKwkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfc2V0KTsKKwl9Cit9CisKK3ZvaWQgbXgyOF9wb3dlcl9lbmFibGVfNHAyKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3QgdmRkZGN0cmwsIHZkZGFjdHJsLCB2ZGRpb2N0cmw7CisJdWludDMyX3QgdG1wOworCisJdmRkZGN0cmwgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwpOworCXZkZGFjdHJsID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGFjdHJsKTsKKwl2ZGRpb2N0cmwgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsKTsKKworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCVBPV0VSX1ZERERDVFJMX0RJU0FCTEVfRkVUIHwgUE9XRVJfVkRERENUUkxfRU5BQkxFX0xJTlJFRyB8CisJCVBPV0VSX1ZERERDVFJMX1BXRE5fQlJOT1VUKTsKKworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkYWN0cmwsCisJCVBPV0VSX1ZEREFDVFJMX0RJU0FCTEVfRkVUIHwgUE9XRVJfVkREQUNUUkxfRU5BQkxFX0xJTlJFRyB8CisJCVBPV0VSX1ZEREFDVFJMX1BXRE5fQlJOT1VUKTsKKworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsLAorCQlQT1dFUl9WRERJT0NUUkxfRElTQUJMRV9GRVQgfCBQT1dFUl9WRERJT0NUUkxfUFdETl9CUk5PVVQpOworCisJbXgyOF9wb3dlcl9pbml0XzRwMl9wYXJhbXMoKTsKKwlteDI4X3Bvd2VyX2luaXRfNHAyX3JlZ3VsYXRvcigpOworCisJLyogU2h1dGRvd24gYmF0dGVyeSAobm9uZSBwcmVzZW50KSAqLworCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwgUE9XRVJfRENEQzRQMl9CT19NQVNLKTsKKwl3cml0ZWwoUE9XRVJfQ1RSTF9EQ0RDNFAyX0JPX0lSUSwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmxfY2xyKTsKKwl3cml0ZWwoUE9XRVJfQ1RSTF9FTklSUV9EQ0RDNFAyX0JPLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCisJbXgyOF9wb3dlcl9pbml0X2RjZGNfNHAyX3NvdXJjZSgpOworCisJd3JpdGVsKHZkZGRjdHJsLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwpOworCWVhcmx5X2RlbGF5KDIwKTsKKwl3cml0ZWwodmRkYWN0cmwsICZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRhY3RybCk7CisJZWFybHlfZGVsYXkoMjApOworCXdyaXRlbCh2ZGRpb2N0cmwsICZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwpOworCisJLyoKKwkgKiBDaGVjayBpZiBGRVQgaXMgZW5hYmxlZCBvbiBlaXRoZXIgcG93ZXJvdXQgYW5kIGlmIHNvLAorCSAqIGRpc2FibGUgbG9hZC4KKwkgKi8KKwl0bXAgPSAwOworCXRtcCB8PSAhKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCkgJgorCQkJUE9XRVJfVkRERENUUkxfRElTQUJMRV9GRVQpOworCXRtcCB8PSAhKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRhY3RybCkgJgorCQkJUE9XRVJfVkREQUNUUkxfRElTQUJMRV9GRVQpOworCXRtcCB8PSAhKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwpICYKKwkJCVBPV0VSX1ZERElPQ1RSTF9ESVNBQkxFX0ZFVCk7CisJaWYgKHRtcCkKKwkJd3JpdGVsKFBPV0VSX0NIQVJHRV9FTkFCTEVfTE9BRCwKKwkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9jaGFyZ2VfY2xyKTsKK30KKwordm9pZCBteDI4X2Jvb3RfdmFsaWRfNXYodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKworCS8qCisJICogVXNlIFZCVVNWQUxJRCBsZXZlbCBpbnN0ZWFkIG9mIFZERDVWX0dUX1ZERElPIGxldmVsIHRvIHRyaWdnZXIgYSA1VgorCSAqIGRpc2Nvbm5lY3QgZXZlbnQuIEZJWE1FCisJICovCisJd3JpdGVsKFBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfNVZERVRFQ1QsCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfc2V0KTsKKworCS8qIENvbmZpZ3VyZSBwb2xhcml0eSB0byBjaGVjayBmb3IgNVYgZGlzY29ubmVjdGlvbi4gKi8KKwl3cml0ZWwoUE9XRVJfQ1RSTF9QT0xBUklUWV9WQlVTVkFMSUQgfAorCQlQT1dFUl9DVFJMX1BPTEFSSVRZX1ZERDVWX0dUX1ZERElPLAorCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCisJd3JpdGVsKFBPV0VSX0NUUkxfVkJVU19WQUxJRF9JUlEgfCBQT1dFUl9DVFJMX1ZERDVWX0dUX1ZERElPX0lSUSwKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmxfY2xyKTsKKworCW14MjhfcG93ZXJfZW5hYmxlXzRwMigpOworfQorCit2b2lkIG14MjhfcG93ZXJkb3duKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJd3JpdGVsKFBPV0VSX1JFU0VUX1VOTE9DS19LRVksICZwb3dlcl9yZWdzLT5od19wb3dlcl9yZXNldCk7CisJd3JpdGVsKFBPV0VSX1JFU0VUX1VOTE9DS19LRVkgfCBQT1dFUl9SRVNFVF9QV0RfT0ZGLAorCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfcmVzZXQpOworfQorCit2b2lkIG14MjhfaGFuZGxlXzV2X2NvbmZsaWN0KHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3QgdG1wOworCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwsCisJCQlQT1dFUl9WRERJT0NUUkxfQk9fT0ZGU0VUX01BU0spOworCisJZm9yICg7OykgeworCQl0bXAgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfc3RzKTsKKworCQlpZiAodG1wICYgUE9XRVJfU1RTX1ZERElPX0JPKSB7CisJCQlteDI4X3Bvd2VyZG93bigpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodG1wICYgUE9XRVJfU1RTX1ZERDVWX0dUX1ZERElPKSB7CisJCQlteDI4X2Jvb3RfdmFsaWRfNXYoKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJbXgyOF9wb3dlcmRvd24oKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitpbnQgbXgyOF9nZXRfYmF0dF92b2x0KHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3Qgdm9sdCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9iYXR0bW9uaXRvcik7CisJdm9sdCAmPSBQT1dFUl9CQVRUTU9OSVRPUl9CQVRUX1ZBTF9NQVNLOworCXZvbHQgPj49IFBPV0VSX0JBVFRNT05JVE9SX0JBVFRfVkFMX09GRlNFVDsKKwl2b2x0ICo9IDg7CisJcmV0dXJuIHZvbHQ7Cit9CisKK2ludCBteDI4X2lzX2JhdHRfcmVhZHkodm9pZCkKK3sKKwlyZXR1cm4gKG14MjhfZ2V0X2JhdHRfdm9sdCgpID49IDM2MDApOworfQorCit2b2lkIG14MjhfNXZfYm9vdCh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJLyoKKwkgKiBOT1RFOiBJbiBvcmlnaW5hbCBJTVgtQm9vdGxldHMsIHRoaXMgYWxzbyBjaGVja3MgZm9yIFZCVVNWQUxJRCwKKwkgKiBidXQgdGhlaXIgaW1wbGVtZW50YXRpb24gYWx3YXlzIHJldHVybnMgMSBzbyB3ZSBvbWl0IGl0IGhlcmUuCisJICovCisJaWYgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYgUE9XRVJfU1RTX1ZERDVWX0dUX1ZERElPKSB7CisJCW14MjhfYm9vdF92YWxpZF81digpOworCQlyZXR1cm47CisJfQorCisJZWFybHlfZGVsYXkoMTAwMCk7CisJaWYgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYgUE9XRVJfU1RTX1ZERDVWX0dUX1ZERElPKSB7CisJCW14MjhfYm9vdF92YWxpZF81digpOworCQlyZXR1cm47CisJfQorCisJbXgyOF9oYW5kbGVfNXZfY29uZmxpY3QoKTsKK30KKwordm9pZCBteDI4X2luaXRfYmF0dF9ibyh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJLyogQnJvd25vdXQgYXQgM1YgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2JhdHRtb25pdG9yLAorCQlQT1dFUl9CQVRUTU9OSVRPUl9CUldOT1VUX0xWTF9NQVNLLAorCQkxNSA8PCBQT1dFUl9CQVRUTU9OSVRPUl9CUldOT1VUX0xWTF9PRkZTRVQpOworCisJd3JpdGVsKFBPV0VSX0NUUkxfQkFUVF9CT19JUlEsICZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7CisJd3JpdGVsKFBPV0VSX0NUUkxfRU5JUlFfQkFUVF9CTywgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmxfY2xyKTsKK30KKwordm9pZCBteDI4X3N3aXRjaF92ZGRkX3RvX2RjZGNfc291cmNlKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsLAorCQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0ssCisJCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0JFTE9XKTsKKworCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCVBPV0VSX1ZERERDVFJMX0RJU0FCTEVfRkVUIHwgUE9XRVJfVkRERENUUkxfRU5BQkxFX0xJTlJFRyB8CisJCVBPV0VSX1ZERERDVFJMX0RJU0FCTEVfU1RFUFBJTkcpOworfQorCitpbnQgbXgyOF9pc19iYXR0X2dvb2Qodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCB2b2x0OworCisJdm9sdCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9iYXR0bW9uaXRvcik7CisJdm9sdCAmPSBQT1dFUl9CQVRUTU9OSVRPUl9CQVRUX1ZBTF9NQVNLOworCXZvbHQgPj49IFBPV0VSX0JBVFRNT05JVE9SX0JBVFRfVkFMX09GRlNFVDsKKwl2b2x0ICo9IDg7CisKKwlpZiAoKHZvbHQgPj0gMjQwMCkgJiYgKHZvbHQgPD0gNDMwMCkpCisJCXJldHVybiAxOworCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCVBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9NQVNLLAorCQkweDMgPDwgUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX09GRlNFVCk7CisJd3JpdGVsKFBPV0VSXzVWQ1RSTF9QV0RfQ0hBUkdFXzRQMl9NQVNLLAorCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX2Nscik7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2NoYXJnZSwKKwkJUE9XRVJfQ0hBUkdFX1NUT1BfSUxJTUlUX01BU0sgfCBQT1dFUl9DSEFSR0VfQkFUVENIUkdfSV9NQVNLLAorCQlQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfMTBNQSB8IDB4Myk7CisKKwl3cml0ZWwoUE9XRVJfQ0hBUkdFX1BXRF9CQVRUQ0hSRywgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2NoYXJnZV9jbHIpOworCXdyaXRlbChQT1dFUl81VkNUUkxfUFdEX0NIQVJHRV80UDJfTUFTSywKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybF9jbHIpOworCisJZWFybHlfZGVsYXkoNTAwMDAwKTsKKworCXZvbHQgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfYmF0dG1vbml0b3IpOworCXZvbHQgJj0gUE9XRVJfQkFUVE1PTklUT1JfQkFUVF9WQUxfTUFTSzsKKwl2b2x0ID4+PSBQT1dFUl9CQVRUTU9OSVRPUl9CQVRUX1ZBTF9PRkZTRVQ7CisJdm9sdCAqPSA4OworCisJaWYgKHZvbHQgPj0gMzUwMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodm9sdCA+PSAyNDAwKQorCQlyZXR1cm4gMTsKKworCXdyaXRlbChQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfTUFTSyB8IFBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JX01BU0ssCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9jaGFyZ2VfY2xyKTsKKwl3cml0ZWwoUE9XRVJfQ0hBUkdFX1BXRF9CQVRUQ0hSRywgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2NoYXJnZV9zZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXgyOF9wb3dlcl9jb25maWd1cmVfcG93ZXJfc291cmNlKHZvaWQpCit7CisJbXgyOF9zcmNfcG93ZXJfaW5pdCgpOworCisJbXgyOF81dl9ib290KCk7CisJbXgyOF9wb3dlcl9jbG9jazJwbGwoKTsKKworCW14MjhfaW5pdF9iYXR0X2JvKCk7CisJbXgyOF9zd2l0Y2hfdmRkZF90b19kY2RjX3NvdXJjZSgpOworfQorCit2b2lkIG14MjhfZW5hYmxlX291dHB1dF9yYWlsX3Byb3RlY3Rpb24odm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKworCXdyaXRlbChQT1dFUl9DVFJMX1ZERERfQk9fSVJRIHwgUE9XRVJfQ1RSTF9WRERBX0JPX0lSUSB8CisJCVBPV0VSX0NUUkxfVkRESU9fQk9fSVJRLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCwKKwkJCVBPV0VSX1ZERERDVFJMX1BXRE5fQlJOT1VUKTsKKworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkYWN0cmwsCisJCQlQT1dFUl9WRERBQ1RSTF9QV0ROX0JSTk9VVCk7CisKKwlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCwKKwkJCVBPV0VSX1ZERElPQ1RSTF9QV0ROX0JSTk9VVCk7Cit9CisKK2ludCBteDI4X2dldF92ZGRpb19wb3dlcl9zb3VyY2Vfb2ZmKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3QgdG1wOworCisJaWYgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYgUE9XRVJfU1RTX1ZERDVWX0dUX1ZERElPKSB7CisJCXRtcCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwpOworCQlpZiAodG1wICYgUE9XRVJfVkRESU9DVFJMX0RJU0FCTEVfRkVUKSB7CisJCQlpZiAoKHRtcCAmIFBPV0VSX1ZERElPQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0spID09CisJCQkJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF8wU1RFUFMpIHsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCisJCWlmICghKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpICYKKwkJCVBPV0VSXzVWQ1RSTF9FTkFCTEVfRENEQykpIHsKKwkJCWlmICgodG1wICYgUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfTUFTSykgPT0KKwkJCQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzBTVEVQUykgeworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7CisKK30KKworaW50IG14MjhfZ2V0X3ZkZGRfcG93ZXJfc291cmNlX29mZih2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCXVpbnQzMl90IHRtcDsKKworCXRtcCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7CisJaWYgKHRtcCAmIFBPV0VSX1ZERERDVFJMX0RJU0FCTEVfRkVUKSB7CisJCWlmICgodG1wICYgUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF9NQVNLKSA9PQorCQkJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF8wU1RFUFMpIHsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYgUE9XRVJfU1RTX1ZERDVWX0dUX1ZERElPKSB7CisJCWlmICghKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpICYKKwkJCVBPV0VSXzVWQ1RSTF9FTkFCTEVfRENEQykpIHsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKCEodG1wICYgUE9XRVJfVkRERENUUkxfRU5BQkxFX0xJTlJFRykpIHsKKwkJaWYgKCh0bXAgJiBQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0spID09CisJCQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzFTVEVQU19CRUxPVykgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBteDI4X3Bvd2VyX3NldF92ZGRpbyh1aW50MzJfdCBuZXdfdGFyZ2V0LCB1aW50MzJfdCBuZXdfYnJvd25vdXQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3QgY3VyX3RhcmdldCwgZGlmZiwgYm9faW50ID0gMDsKKwl1aW50MzJfdCBwb3dlcmVkX2J5X2xpbnJlZyA9IDA7CisKKwluZXdfYnJvd25vdXQgPSBuZXdfdGFyZ2V0IC0gbmV3X2Jyb3dub3V0OworCisJY3VyX3RhcmdldCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwpOworCWN1cl90YXJnZXQgJj0gUE9XRVJfVkRESU9DVFJMX1RSR19NQVNLOworCWN1cl90YXJnZXQgKj0gNTA7CS8qIDUwIG1WIHN0ZXAqLworCWN1cl90YXJnZXQgKz0gMjgwMDsJLyogMjgwMCBtViBsb3dlc3QgKi8KKworCXBvd2VyZWRfYnlfbGlucmVnID0gbXgyOF9nZXRfdmRkaW9fcG93ZXJfc291cmNlX29mZigpOworCWlmIChuZXdfdGFyZ2V0ID4gY3VyX3RhcmdldCkgeworCisJCWlmIChwb3dlcmVkX2J5X2xpbnJlZykgeworCQkJYm9faW50ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCk7CisJCQljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCwKKwkJCQkJUE9XRVJfQ1RSTF9FTklSUV9WRERJT19CTyk7CisJCX0KKworCQlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCwKKwkJCQlQT1dFUl9WRERJT0NUUkxfQk9fT0ZGU0VUX01BU0spOworCQlkbyB7CisJCQlpZiAobmV3X3RhcmdldCAtIGN1cl90YXJnZXQgPiAxMDApCisJCQkJZGlmZiA9IGN1cl90YXJnZXQgKyAxMDA7CisJCQllbHNlCisJCQkJZGlmZiA9IG5ld190YXJnZXQ7CisKKwkJCWRpZmYgLT0gMjgwMDsKKwkJCWRpZmYgLz0gNTA7CisKKwkJCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsLAorCQkJCVBPV0VSX1ZERElPQ1RSTF9UUkdfTUFTSywgZGlmZik7CisKKwkJCWlmIChwb3dlcmVkX2J5X2xpbnJlZykKKwkJCQllYXJseV9kZWxheSgxNTAwKTsKKwkJCWVsc2UgeworCQkJCXdoaWxlICghKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYKKwkJCQkJUE9XRVJfU1RTX0RDX09LKSkKKwkJCQkJOworCisJCQl9CisKKwkJCWN1cl90YXJnZXQgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsKTsKKwkJCWN1cl90YXJnZXQgJj0gUE9XRVJfVkRESU9DVFJMX1RSR19NQVNLOworCQkJY3VyX3RhcmdldCAqPSA1MDsJLyogNTAgbVYgc3RlcCovCisJCQljdXJfdGFyZ2V0ICs9IDI4MDA7CS8qIDI4MDAgbVYgbG93ZXN0ICovCisJCX0gd2hpbGUgKG5ld190YXJnZXQgPiBjdXJfdGFyZ2V0KTsKKworCQlpZiAocG93ZXJlZF9ieV9saW5yZWcpIHsKKwkJCXdyaXRlbChQT1dFUl9DVFJMX1ZERElPX0JPX0lSUSwKKwkJCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCQkJaWYgKGJvX2ludCAmIFBPV0VSX0NUUkxfRU5JUlFfVkRESU9fQk8pCisJCQkJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwsCisJCQkJCQlQT1dFUl9DVFJMX0VOSVJRX1ZERElPX0JPKTsKKwkJfQorCX0gZWxzZSB7CisJCWRvIHsKKwkJCWlmIChjdXJfdGFyZ2V0IC0gbmV3X3RhcmdldCA+IDEwMCkKKwkJCQlkaWZmID0gY3VyX3RhcmdldCAtIDEwMDsKKwkJCWVsc2UKKwkJCQlkaWZmID0gbmV3X3RhcmdldDsKKworCQkJZGlmZiAtPSAyODAwOworCQkJZGlmZiAvPSA1MDsKKworCQkJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwsCisJCQkJUE9XRVJfVkRESU9DVFJMX1RSR19NQVNLLCBkaWZmKTsKKworCQkJaWYgKHBvd2VyZWRfYnlfbGlucmVnKQorCQkJCWVhcmx5X2RlbGF5KDE1MDApOworCQkJZWxzZSB7CisJCQkJd2hpbGUgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJgorCQkJCQlQT1dFUl9TVFNfRENfT0spKQorCQkJCQk7CisKKwkJCX0KKworCQkJY3VyX3RhcmdldCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwpOworCQkJY3VyX3RhcmdldCAmPSBQT1dFUl9WRERJT0NUUkxfVFJHX01BU0s7CisJCQljdXJfdGFyZ2V0ICo9IDUwOwkvKiA1MCBtViBzdGVwKi8KKwkJCWN1cl90YXJnZXQgKz0gMjgwMDsJLyogMjgwMCBtViBsb3dlc3QgKi8KKwkJfSB3aGlsZSAobmV3X3RhcmdldCA8IGN1cl90YXJnZXQpOworCX0KKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsLAorCQkJUE9XRVJfVkRERENUUkxfQk9fT0ZGU0VUX01BU0ssCisJCQluZXdfYnJvd25vdXQgPDwgUE9XRVJfVkRERENUUkxfQk9fT0ZGU0VUX09GRlNFVCk7Cit9CisKK3ZvaWQgbXgyOF9wb3dlcl9zZXRfdmRkZCh1aW50MzJfdCBuZXdfdGFyZ2V0LCB1aW50MzJfdCBuZXdfYnJvd25vdXQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3QgY3VyX3RhcmdldCwgZGlmZiwgYm9faW50ID0gMDsKKwl1aW50MzJfdCBwb3dlcmVkX2J5X2xpbnJlZyA9IDA7CisKKwluZXdfYnJvd25vdXQgPSBuZXdfdGFyZ2V0IC0gbmV3X2Jyb3dub3V0OworCisJY3VyX3RhcmdldCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7CisJY3VyX3RhcmdldCAmPSBQT1dFUl9WREREQ1RSTF9UUkdfTUFTSzsKKwljdXJfdGFyZ2V0ICo9IDI1OwkvKiAyNSBtViBzdGVwKi8KKwljdXJfdGFyZ2V0ICs9IDgwMDsJLyogODAwIG1WIGxvd2VzdCAqLworCisJcG93ZXJlZF9ieV9saW5yZWcgPSBteDI4X2dldF92ZGRkX3Bvd2VyX3NvdXJjZV9vZmYoKTsKKwlpZiAobmV3X3RhcmdldCA+IGN1cl90YXJnZXQpIHsKKwkJaWYgKHBvd2VyZWRfYnlfbGlucmVnKSB7CisJCQlib19pbnQgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwpOworCQkJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCwKKwkJCQkJUE9XRVJfQ1RSTF9FTklSUV9WREREX0JPKTsKKwkJfQorCisJCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCQkJUE9XRVJfVkRERENUUkxfQk9fT0ZGU0VUX01BU0spOworCisJCWRvIHsKKwkJCWlmIChuZXdfdGFyZ2V0IC0gY3VyX3RhcmdldCA+IDEwMCkKKwkJCQlkaWZmID0gY3VyX3RhcmdldCArIDEwMDsKKwkJCWVsc2UKKwkJCQlkaWZmID0gbmV3X3RhcmdldDsKKworCQkJZGlmZiAtPSA4MDA7CisJCQlkaWZmIC89IDI1OworCisJCQljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsLAorCQkJCVBPV0VSX1ZERERDVFJMX1RSR19NQVNLLCBkaWZmKTsKKworCQkJaWYgKHBvd2VyZWRfYnlfbGlucmVnKQorCQkJCWVhcmx5X2RlbGF5KDE1MDApOworCQkJZWxzZSB7CisJCQkJd2hpbGUgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJgorCQkJCQlQT1dFUl9TVFNfRENfT0spKQorCQkJCQk7CisKKwkJCX0KKworCQkJY3VyX3RhcmdldCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7CisJCQljdXJfdGFyZ2V0ICY9IFBPV0VSX1ZERERDVFJMX1RSR19NQVNLOworCQkJY3VyX3RhcmdldCAqPSAyNTsJLyogMjUgbVYgc3RlcCovCisJCQljdXJfdGFyZ2V0ICs9IDgwMDsJLyogODAwIG1WIGxvd2VzdCAqLworCQl9IHdoaWxlIChuZXdfdGFyZ2V0ID4gY3VyX3RhcmdldCk7CisKKwkJaWYgKHBvd2VyZWRfYnlfbGlucmVnKSB7CisJCQl3cml0ZWwoUE9XRVJfQ1RSTF9WREREX0JPX0lSUSwKKwkJCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCQkJaWYgKGJvX2ludCAmIFBPV0VSX0NUUkxfRU5JUlFfVkRERF9CTykKKwkJCQlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsLAorCQkJCQkJUE9XRVJfQ1RSTF9FTklSUV9WREREX0JPKTsKKwkJfQorCX0gZWxzZSB7CisJCWRvIHsKKwkJCWlmIChjdXJfdGFyZ2V0IC0gbmV3X3RhcmdldCA+IDEwMCkKKwkJCQlkaWZmID0gY3VyX3RhcmdldCAtIDEwMDsKKwkJCWVsc2UKKwkJCQlkaWZmID0gbmV3X3RhcmdldDsKKworCQkJZGlmZiAtPSA4MDA7CisJCQlkaWZmIC89IDI1OworCisJCQljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsLAorCQkJCQlQT1dFUl9WREREQ1RSTF9UUkdfTUFTSywgZGlmZik7CisKKwkJCWlmIChwb3dlcmVkX2J5X2xpbnJlZykKKwkJCQllYXJseV9kZWxheSgxNTAwKTsKKwkJCWVsc2UgeworCQkJCXdoaWxlICghKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYKKwkJCQkJUE9XRVJfU1RTX0RDX09LKSkKKwkJCQkJOworCisJCQl9CisKKwkJCWN1cl90YXJnZXQgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwpOworCQkJY3VyX3RhcmdldCAmPSBQT1dFUl9WREREQ1RSTF9UUkdfTUFTSzsKKwkJCWN1cl90YXJnZXQgKj0gMjU7CS8qIDI1IG1WIHN0ZXAqLworCQkJY3VyX3RhcmdldCArPSA4MDA7CS8qIDgwMCBtViBsb3dlc3QgKi8KKwkJfSB3aGlsZSAobmV3X3RhcmdldCA8IGN1cl90YXJnZXQpOworCX0KKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCQlQT1dFUl9WREREQ1RSTF9CT19PRkZTRVRfTUFTSywKKwkJCW5ld19icm93bm91dCA8PCBQT1dFUl9WREREQ1RSTF9CT19PRkZTRVRfT0ZGU0VUKTsKK30KKwordm9pZCBteDI4X3Bvd2VyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKworCW14MjhfcG93ZXJfY2xvY2syeHRhbCgpOworCW14MjhfcG93ZXJfY2xlYXJfYXV0b19yZXN0YXJ0KCk7CisJbXgyOF9wb3dlcl9zZXRfbGlucmVnKCk7CisJbXgyOF9wb3dlcl9zZXR1cF81dl9kZXRlY3QoKTsKKwlteDI4X3Bvd2VyX2NvbmZpZ3VyZV9wb3dlcl9zb3VyY2UoKTsKKwlteDI4X2VuYWJsZV9vdXRwdXRfcmFpbF9wcm90ZWN0aW9uKCk7CisKKwlteDI4X3Bvd2VyX3NldF92ZGRpbygzMzAwLCAzMTUwKTsKKworCW14MjhfcG93ZXJfc2V0X3ZkZGQoMTM1MCwgMTIwMCk7CisKKwl3cml0ZWwoUE9XRVJfQ1RSTF9WREREX0JPX0lSUSB8IFBPV0VSX0NUUkxfVkREQV9CT19JUlEgfAorCQlQT1dFUl9DVFJMX1ZERElPX0JPX0lSUSB8IFBPV0VSX0NUUkxfVkRENVZfRFJPT1BfSVJRIHwKKwkJUE9XRVJfQ1RSTF9WQlVTX1ZBTElEX0lSUSB8IFBPV0VSX0NUUkxfQkFUVF9CT19JUlEgfAorCQlQT1dFUl9DVFJMX0RDREM0UDJfQk9fSVJRLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCisJd3JpdGVsKFBPV0VSXzVWQ1RSTF9QV0ROXzVWQlJOT1VULCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX3NldCk7CisKKwllYXJseV9kZWxheSgxMDAwKTsKK30KKworI2lmZGVmCUNPTkZJR19TUExfTVgyOF9QU1dJVENIX1dBSVQKK3ZvaWQgbXgyOF9wb3dlcl93YWl0X3Bzd2l0Y2godm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKworCXdoaWxlICghKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYgUE9XRVJfU1RTX1BTV0lUQ0hfTUFTSykpCisJCTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvZGVueC9tMjhldmsvc3RhcnQuUyBiL2JvYXJkL2RlbngvbTI4ZXZrL3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2OTZkNgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RlbngvbTI4ZXZrL3N0YXJ0LlMKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiAgYXJtYm9vdCAtIFN0YXJ0dXAgQ29kZSBmb3IgQVJNOTI2RUpTIENQVS1jb3JlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMyAgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiAgLS0tLS0gQWRhcHRlZCBmb3IgT01BUDE2MTAgT01BUDczMCBmcm9tIEFSTTkyNXQgY29kZSAtLS0tLS0KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcm9nZXIgPG1hZ0BzeXNnby5kZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIJQWxleCBadXBrZSA8YXp1QHN5c2dvLmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMglHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMJUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogIENvcHlyaWdodCAoYykgMjAwMwlLc2hpdGlqIDxrc2hpdGlqQHRpLmNvbT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAJQWxiZXJ0IEFyaWJhdWQgPGFsYmVydC51LmJvb3RAYXJpYmF1ZC5uZXQ+CisgKgorICogQ2hhbmdlIHRvIHN1cHBvcnQgY2FsbCBiYWNrIGludG8gaU1YMjggYm9vdHJvbQorICogQ29weXJpZ2h0IChjKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGFzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfT01BUDE2MTApCisjaW5jbHVkZSA8Li9jb25maWdzL29tYXAxNTEwLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQNzMwKQorI2luY2x1ZGUgPC4vY29uZmlncy9vbWFwNzMwLmg+CisjZW5kaWYKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSnVtcCB2ZWN0b3IgdGFibGUgYXMgaW4gdGFibGUgMy4xIGluIFsxXQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworCisuZ2xvYmwgX3N0YXJ0Citfc3RhcnQ6CisJYglyZXNldAorCWIJdW5kZWZpbmVkX2luc3RydWN0aW9uCisJYglzb2Z0d2FyZV9pbnRlcnJ1cHQKKwliCXByZWZldGNoX2Fib3J0CisJYglkYXRhX2Fib3J0CisJYglub3RfdXNlZAorCWIJaXJxCisJYglmaXEKKworLyoKKyAqIFZlY3RvciB0YWJsZSwgbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAuCisgKiBUaGlzIHRhYmxlIGFsbG93cyB0aGUgY29kZSBydW5uaW5nIEFGVEVSIFNQTCwgdGhlIFUtQm9vdCwgdG8gaW5zdGFsbCBpdCdzCisgKiBpbnRlcnJ1cHQgaGFuZGxlcnMgaGVyZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgVS1Cb290IGlzIGxvYWRlZCBpbnRvIFJBTSwKKyAqIGluY2x1ZGluZyBpdCdzIGludGVycnVwdCB2ZWN0b3JpbmcgdGFibGUgYW5kIHRoZSB0YWJsZSBhdCAweDAgaXMgc3RpbGwgdGhlCisgKiBTUExzLiBTbyBpZiBpbnRlcnJ1cHQgaGFwcGVucyBpbiBVLUJvb3QsIHRoZSBTUExzIGludGVycnVwdCB2ZWN0b3JpbmcgdGFibGUKKyAqIGlzIHN0aWxsIHVzZWQuCisgKi8KK192dF9yZXNldDoKKwkud29yZAlfcmVzZXQKK192dF91bmRlZmluZWRfaW5zdHJ1Y3Rpb246CisJLndvcmQJX2hhbmcKK192dF9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CisJLndvcmQJX2hhbmcKK192dF9wcmVmZXRjaF9hYm9ydDoKKwkud29yZAlfaGFuZworX3Z0X2RhdGFfYWJvcnQ6CisJLndvcmQJX2hhbmcKK192dF9ub3RfdXNlZDoKKwkud29yZAlfcmVzZXQKK192dF9pcnE6CisJLndvcmQJX2hhbmcKK192dF9maXE6CisJLndvcmQJX2hhbmcKKworcmVzZXQ6CisJbGRyCXBjLCBfdnRfcmVzZXQKK3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoKKwlsZHIJcGMsIF92dF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KK3NvZnR3YXJlX2ludGVycnVwdDoKKwlsZHIJcGMsIF92dF9zb2Z0d2FyZV9pbnRlcnJ1cHQKK3ByZWZldGNoX2Fib3J0OgorCWxkcglwYywgX3Z0X3ByZWZldGNoX2Fib3J0CitkYXRhX2Fib3J0OgorCWxkcglwYywgX3Z0X2RhdGFfYWJvcnQKK25vdF91c2VkOgorCWxkcglwYywgX3Z0X25vdF91c2VkCitpcnE6CisJbGRyCXBjLCBfdnRfaXJxCitmaXE6CisJbGRyCXBjLCBfdnRfZmlxCisKKwkuYmFsaWdubCAxNiwweGRlYWRiZWVmCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0YXJ0dXAgQ29kZSAocmVzZXQgdmVjdG9yKQorICoKKyAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCisgKiBzZXR1cCBNZW1vcnkgYW5kIGJvYXJkIHNwZWNpZmljIGJpdHMgcHJpb3IgdG8gcmVsb2NhdGlvbi4KKyAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCisgKiBzZXR1cCBzdGFjaworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLmdsb2JsIF9URVhUX0JBU0UKK19URVhUX0JBU0U6CisJLndvcmQJQ09ORklHX1NZU19URVhUX0JBU0UKKworLyoKKyAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgorICogU3VidHJhY3RpbmcgX3N0YXJ0IGZyb20gdGhlbSBsZXRzIHRoZSBsaW5rZXIgcHV0IHRoZWlyCisgKiByZWxhdGl2ZSBwb3NpdGlvbiBpbiB0aGUgZXhlY3V0YWJsZSBpbnN0ZWFkIG9mIGxlYXZpbmcKKyAqIHRoZW0gbnVsbC4KKyAqLworLmdsb2JsIF9ic3Nfc3RhcnRfb2ZzCitfYnNzX3N0YXJ0X29mczoKKwkud29yZCBfX2Jzc19zdGFydCAtIF9zdGFydAorCisuZ2xvYmwgX2Jzc19lbmRfb2ZzCitfYnNzX2VuZF9vZnM6CisJLndvcmQgX19ic3NfZW5kX18gLSBfc3RhcnQKKworLmdsb2JsIF9lbmRfb2ZzCitfZW5kX29mczoKKwkud29yZCBfZW5kIC0gX3N0YXJ0CisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KKy5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKK0lSUV9TVEFDS19TVEFSVDoKKwkud29yZAkweDBiYWRjMGRlCisKKy8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCisuZ2xvYmwgRklRX1NUQUNLX1NUQVJUCitGSVFfU1RBQ0tfU1RBUlQ6CisJLndvcmQgMHgwYmFkYzBkZQorI2VuZGlmCisKKy8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICsgOCBieXRlcyAqLworLmdsb2JsIElSUV9TVEFDS19TVEFSVF9JTgorSVJRX1NUQUNLX1NUQVJUX0lOOgorCS53b3JkCTB4MGJhZGMwZGUKKworLyoKKyAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQorICovCisKK19yZXNldDoKKwkvKgorCSAqIFN0b3JlIGFsbCByZWdpc3RlcnMgb24gb2xkIHN0YWNrIHBvaW50ZXIsIHRoaXMgd2lsbCBhbGxvdyB1cyBsYXRlciB0bworCSAqIHJldHVybiB0byB0aGUgQm9vdFJPTSBhbmQgbGV0IHRoZSBCb290Uk9NIGxvYWQgVS1Cb290IGludG8gUkFNLgorCSAqLworCXB1c2gJe3IwLXIxMixyMTR9CisKKwkvKgorCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKKwkgKi8KKwltcnMJcjAsY3BzcgorCWJpYwlyMCxyMCwjMHgxZgorCW9ycglyMCxyMCwjMHhkMworCW1zcgljcHNyLHIwCisKKwkvKgorCSAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKKwkgKiBub3Qgd2hlbiBib290aW5nIGZyb20gcmFtIQorCSAqLworI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisJYmwJY3B1X2luaXRfY3JpdAorI2VuZGlmCisKKwlibAlib2FyZF9pbml0X2xsCisKKwlwb3AJe3IwLXIxMixyMTR9CisJYngJbHIKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCisgKgorICogc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycworICogc2V0dXAgbWVtb3J5IHRpbWluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorY3B1X2luaXRfY3JpdDoKKwkvKgorCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKKwkgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkvKiBmbHVzaCB2My92NCBjYWNoZSAqLworCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCisKKwkvKgorCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKKwkgKi8KKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJLyogY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpICovCisJYmljCXIwLCByMCwgIzB4MDAwMDAwODcJLyogY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkgKi8KKwlvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMgkvKiBzZXQgYml0IDIgKEEpIEFsaWduICovCisJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJLyogc2V0IGJpdCAxMiAoSSkgSS1DYWNoZSAqLworCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKworCW1vdglwYywgbHIJCS8qIGJhY2sgdG8gbXkgY2FsbGVyICovCisKKwkuYWxpZ24JNQorI2VuZGlmIC8qIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgKi8KKworX2hhbmc6CisJbGRyCXNwLCBfVEVYVF9CQVNFCQkJLyogc3dpdGNoIHRvIGFib3J0IHN0YWNrICovCisxOgorCWJsCTFiCQkJCS8qIGhhbmcgYW5kIG5ldmVyIHJldHVybiAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGVueC9tMjhldmsvdS1ib290LXNwbC5sZHMgYi9ib2FyZC9kZW54L20yOGV2ay91LWJvb3Qtc3BsLmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjk2YTkyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGVueC9tMjhldmsvdS1ib290LXNwbC5sZHMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEphbnVhcnkgMjAwNCAtIENoYW5nZWQgdG8gc3VwcG9ydCBINCBkZXZpY2UKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IFRleGFzIEluc3RydW1lbnRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdhcnlqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0CToKKwl7CisJCWJvYXJkL2RlbngvbTI4ZXZrL3N0YXJ0Lm8JKC50ZXh0KQorCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7CisJCSooLmRhdGEpCisJfQorCisJLiA9IEFMSUdOKDQpOworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKworCS5yZWwuZHluIDogeworCQlfX3JlbF9keW5fc3RhcnQgPSAuOworCQkqKC5yZWwqKQorCQlfX3JlbF9keW5fZW5kID0gLjsKKwl9CisKKwkuZHluc3ltIDogeworCQlfX2R5bnN5bV9zdGFydCA9IC47CisJCSooLmR5bnN5bSkKKwl9CisKKwlfZW5kID0gLjsKKworCS5ic3MgX19yZWxfZHluX3N0YXJ0IChPVkVSTEFZKSA6IHsKKwkJX19ic3Nfc3RhcnQgPSAuOworCQkqKC5ic3MpCisJCSAuID0gQUxJR04oNCk7CisJCV9fYnNzX2VuZF9fID0gLjsKKwl9CisKKwkvRElTQ0FSRC8gOiB7ICooLmJzcyopIH0KKwkvRElTQ0FSRC8gOiB7ICooLmR5bnN0ciopIH0KKwkvRElTQ0FSRC8gOiB7ICooLmR5bnN5bSopIH0KKwkvRElTQ0FSRC8gOiB7ICooLmR5bmFtaWMqKSB9CisJL0RJU0NBUkQvIDogeyAqKC5oYXNoKikgfQorCS9ESVNDQVJELyA6IHsgKigucGx0KikgfQorCS9ESVNDQVJELyA6IHsgKiguaW50ZXJwKikgfQorCS9ESVNDQVJELyA6IHsgKiguZ251KikgfQorfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZGVueC9tMjhldmsvdS1ib290LmJkIGIvYm9hcmQvZGVueC9tMjhldmsvdS1ib290LmJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTdmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9kZW54L20yOGV2ay91LWJvb3QuYmQKQEAgLTAsMCArMSwxNCBAQAorc291cmNlcyB7CisJdV9ib290X3NwbD0ic3BsL3UtYm9vdC1zcGwuYmluIjsKKwl1X2Jvb3Q9InUtYm9vdC5iaW4iOworfQorCitzZWN0aW9uICgwKSB7CisgICAgICAgIGxvYWQgdV9ib290X3NwbCA+IDB4MDAwMDsKKyAgICAgICAgbG9hZCBpdnQgKGVudHJ5ID0gMHgwMDE0KSA+IDB4ODAwMDsKKwloYWIgY2FsbCAweDgwMDA7CisKKyAgICAgICAgbG9hZCB1X2Jvb3QgPiAweDQwMDAwMTAwOworICAgICAgICBsb2FkIGl2dCAoZW50cnkgPSAweDQwMDAwMTAwKSA+IDB4ODAwMDsKKwloYWIgY2FsbCAweDgwMDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9iYWI3eHgvbWlzYy5jIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L21pc2MuYwppbmRleCBiYzZlYjQwLi5kMDVlMjI2IDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9iYWI3eHgvbWlzYy5jCisrKyBiL2JvYXJkL2VsdGVjL2JhYjd4eC9taXNjLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJzcm9tLmgiCiAKIC8qIGltcG9ydHMgICovCi1leHRlcm4gY2hhciBjb25zb2xlX2J1ZmZlcltDT05GSUdfU1lTX0NCU0laRV07CiBleHRlcm4gaW50IGwyX2NhY2hlX2VuYWJsZSAoaW50IGwyY29udHJvbCk7CiBleHRlcm4gdm9pZCAqbnZyYW1fcmVhZCAodm9pZCAqZGVzdCwgY29uc3Qgc2hvcnQgc3JjLCBzaXplX3QgY291bnQpOwogZXh0ZXJuIHZvaWQgbnZyYW1fd3JpdGUgKHNob3J0IGRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2VscHBjL21pc2MuYyBiL2JvYXJkL2VsdGVjL2VscHBjL21pc2MuYwppbmRleCBjYmFmMTBiLi5kNDc2Y2Q1IDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9lbHBwYy9taXNjLmMKKysrIGIvYm9hcmQvZWx0ZWMvZWxwcGMvbWlzYy5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAic3JvbS5oIgogCiAvKiBpbXBvcnRzICAqLwotZXh0ZXJuIGNoYXIgY29uc29sZV9idWZmZXJbQ09ORklHX1NZU19DQlNJWkVdOwogZXh0ZXJuIGludCBsMl9jYWNoZV9lbmFibGUgKGludCBsMmNvbnRyb2wpOwogZXh0ZXJuIGludCBlZXBybzEwMF93cml0ZV9lZXByb20gKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGludCBsb2NhdGlvbiwKIAkJCQkgIGludCBhZGRyX2xlbiwgdW5zaWduZWQgc2hvcnQgZGF0YSk7CmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9taHBjL21ocGMuYyBiL2JvYXJkL2VsdGVjL21ocGMvbWhwYy5jCmluZGV4IDdjY2E2YjIuLmU4MDZiM2UgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL21ocGMvbWhwYy5jCisrKyBiL2JvYXJkL2VsdGVjL21ocGMvbWhwYy5jCkBAIC0zNSw5ICszNSw2IEBACiAjaW5jbHVkZSAibXBjOHh4LmgiCiAjaW5jbHVkZSA8dmlkZW9fZmIuaD4KIAotLyogaW1wb3J0cyBmcm9tIGNvbW1vbi9tYWluLmMgKi8KLWV4dGVybiBjaGFyIGNvbnNvbGVfYnVmZmVyW0NPTkZJR19TWVNfQ0JTSVpFXTsKLQogZXh0ZXJuIHZvaWQgZWVwcm9tX2luaXQgKHZvaWQpOwogZXh0ZXJuIGludCBlZXByb21fcmVhZCAodW5zaWduZWQgZGV2X2FkZHIsIHVuc2lnbmVkIG9mZnNldCwKIAkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgY250KTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jb21tb24vYXV0b191cGRhdGUuYyBiL2JvYXJkL2VzZC9jb21tb24vYXV0b191cGRhdGUuYwppbmRleCA0ZGZlYTcxLi5mYzYwNTQ1IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY29tbW9uL2F1dG9fdXBkYXRlLmMKKysrIGIvYm9hcmQvZXNkL2NvbW1vbi9hdXRvX3VwZGF0ZS5jCkBAIC05MSw3ICs5MSw2IEBACiBpbnQgYXVfY2hlY2tfaGVhZGVyX3ZhbGlkKGludCBpLCBsb25nIG5ieXRlcykKIHsKIAlpbWFnZV9oZWFkZXJfdCAqaGRyOwotCXVuc2lnbmVkIGxvbmcgY2hlY2tzdW07CiAKIAloZHIgPSAoaW1hZ2VfaGVhZGVyX3QgKilMT0FEX0FERFI7CiAjaWYgZGVmaW5lZChDT05GSUdfRklUKQpAQCAtMTI3LDkgKzEyNiw2IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiByZWN5Y2xlIGNoZWNrc3VtICovCi0JY2hlY2tzdW0gPSBpbWFnZV9nZXRfZGF0YV9zaXplIChoZHIpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5Nyw3ICszOTMsNyBAQAogewogCWJsb2NrX2Rldl9kZXNjX3QgKnN0b3JfZGV2ID0gTlVMTDsKIAlsb25nIHN6OwotCWludCBpLCByZXMsIGNudCwgb2xkX2N0cmxjLCBnb3RfY3RybGM7CisJaW50IGksIHJlcywgY250LCBvbGRfY3RybGM7CiAJY2hhciBidWZmZXJbMzJdOwogCWNoYXIgc3RyWzgwXTsKIAlpbnQgbjsKQEAgLTQ3Myw4ICs0NjksNiBAQAogCQkJLyogbGV0IHRoZSB1c2VyIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLwogCQkJaWYgKGN0cmxjKCkgfHwgaGFkX2N0cmxjICgpKSB7CiAJCQkJY2xlYXJfY3RybGMgKCk7Ci0JCQkJaWYgKHJlcyA8IDApCi0JCQkJCWdvdF9jdHJsYyA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljbnQrKzsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNzUwL2NwY2k3NTAuYyBiL2JvYXJkL2VzZC9jcGNpNzUwL2NwY2k3NTAuYwppbmRleCBmMjdkNjVlLi4wODMxMWM5IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTc1MC9jcGNpNzUwLmMKKysrIGIvYm9hcmQvZXNkL2NwY2k3NTAvY3BjaTc1MC5jCkBAIC01NjYsNyArNTY2LDcgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKIAlpbnQgY291bnQgPSAwOwogCWludCBjb3VudDIgPSAwOwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAJY2hhciBhZGRyWzE2XTsKIAljaGFyIHN0cltdID0gIlxcfC8tIjsKIAljaGFyICpsb2NhbF9hcmdzWzJdOwpAQCAtNjIyLDcgKzYyMiw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKIFVfQk9PVF9DTUQoCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaTc1MC9zZHJhbV9pbml0LmMgYi9ib2FyZC9lc2QvY3BjaTc1MC9zZHJhbV9pbml0LmMKaW5kZXggNjE1ZTMyYS4uOTc2N2NmMiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k3NTAvc2RyYW1faW5pdC5jCisrKyBiL2JvYXJkL2VzZC9jcGNpNzUwL3NkcmFtX2luaXQuYwpAQCAtNDcsMTggKzQ3LDYgQEAKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLSN1bmRlZglERUJVRwotLyogI2RlZmluZSBERUJVRyAqLwotI2lmZGVmIENPTkZJR19QQ0kKLSNkZWZpbmUJTUFQX1BDSQotI2VuZGlmIC8qIG9mIENPTkZJR19QQ0kgKi8KLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERQKHgpIHgKLSNlbHNlCi0jZGVmaW5lIERQKHgpCi0jZW5kaWYKLQogaW50IHNldF9kZmNkbEluaXQodm9pZCk7CS8qIHNldHVwIGRlbGF5IGxpbmUgb2YgTXY2NDM2MCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNTAsOCArMjM4LDYgQEAKIC8qIHN0YXRpYyBpbnQgY2hlY2tfZGltbSh1Y2hhciBzbG90LCBBVVhfTUVNX0RJTU1fSU5GTyAqaW5mbykgKi8KIHN0YXRpYyBpbnQgY2hlY2tfZGltbSAodWNoYXIgc2xvdCwgQVVYX01FTV9ESU1NX0lORk8gKiBkaW1tSW5mbykKIHsKLQl1bnNpZ25lZCBsb25nIHNwZF9jaGVja3N1bTsKLQogCXVjaGFyIGFkZHIgPSBzbG90ID09IDAgPyBESU1NMF9JMkNfQUREUiA6IERJTU0xX0kyQ19BRERSOwogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGksIGosIGRlbnNpdHkgPSAxLCBkZXZpY2VzRm9yRXJyQ2hlY2sgPSAwOwpAQCAtMjY0LDcgKzI1MCw3IEBACiAJdWNoYXIgc3VwcF9jYWwsIGNhbF92YWw7CiAJdWxvbmcgbWVtY2xrLCB0bWVtY2xrOwogCXVsb25nIHRtcDsKLQl1Y2hhciB0cnBfY2xvY2tzID0gMCwgdHJjZF9jbG9ja3MsIHRyYXNfY2xvY2tzLCB0cnJkX2Nsb2NrczsKKwl1Y2hhciB0cnBfY2xvY2tzID0gMCwgdHJhc19jbG9ja3M7CiAJdWNoYXIgZGF0YVsxMjhdOwogCiAJbWVtY2xrID0gZ2QtPmJ1c19jbGs7CkBAIC0yNzUsMTEgKzI2MSwxMSBAQAogCiAJcmV0ID0gMDsKIAotCURQIChwdXRzICgiYmVmb3JlIGkyYyByZWFkXG4iKSk7CisJZGVidWcoImJlZm9yZSBpMmMgcmVhZFxuIik7CiAKIAlyZXQgPSBpMmNfcmVhZCAoYWRkciwgMCwgMiwgZGF0YSwgMTI4KTsKIAotCURQIChwdXRzICgiYWZ0ZXIgaTJjIHJlYWRcbiIpKTsKKwlkZWJ1ZygiYWZ0ZXIgaTJjIHJlYWRcbiIpOwogCiAJaWYgKChkYXRhWzY0XSAhPSAnZScpIHx8IChkYXRhWzY1XSAhPSAncycpIHx8IChkYXRhWzY2XSAhPSAnZCcpCiAJICAgIHx8IChkYXRhWzY3XSAhPSAnLScpIHx8IChkYXRhWzY4XSAhPSAnZycpIHx8IChkYXRhWzY5XSAhPSAnbScpCkBAIC0zNDUsNyArMzMxLDcgQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCURQIChwcmludGYgKCJObyBESU1NIGluIHNsb3QgJWQgW2VyciA9ICV4XVxuIiwgc2xvdCwgcmV0KSk7CisJCWRlYnVnKCJObyBESU1NIGluIHNsb3QgJWQgW2VyciA9ICV4XVxuIiwgc2xvdCwgcmV0KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCiAJCWRpbW1JbmZvLT5zbG90ID0gc2xvdDsJLyogc3RhcnQgdG8gZmlsbCB1cCBkaW1taW5mbyBmb3IgdGhpcyAic2xvdCIgKi8KQEAgLTQwMiw4ICszODgsOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogY2FsY3VsYXRlIFNQRCBjaGVja3N1bSAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXNwZF9jaGVja3N1bSA9IDA7CiAjaWYgMAkJCQkvKiB0ZXN0LW9ubHkgKi8KKwlzcGRfY2hlY2tzdW0gPSAwOworCiAJZm9yIChpID0gMDsgaSA8PSA2MjsgaSsrKSB7CiAJCXNwZF9jaGVja3N1bSArPSBkYXRhW2ldOwogCX0KQEAgLTQyNCw0NiArNDExLDQwIEBACiAJCQlkaW1tSW5mby0+bWVtb3J5VHlwZSA9IChkYXRhW2ldID09IDB4NykgPyBERFIgOiBTRFJBTTsKICNpZmRlZiBERUJVRwogCQkJaWYgKGRpbW1JbmZvLT5tZW1vcnlUeXBlID09IDApCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIkRyYW1fdHlwZSBpbiBzbG90ICVkIGlzOgkJCVNEUkFNXG4iLAotCQkJCSAgICAgZGltbUluZm8tPnNsb3QpKTsKKwkJCQlkZWJ1ZygiRHJhbV90eXBlIGluIHNsb3QgJWQgaXM6CQkJU0RSQU1cbiIsCisJCQkJICAgICBkaW1tSW5mby0+c2xvdCk7CiAJCQlpZiAoZGltbUluZm8tPm1lbW9yeVR5cGUgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiRHJhbV90eXBlIGluIHNsb3QgJWQgaXM6CQkJRERSQU1cbiIsCi0JCQkJICAgICBkaW1tSW5mby0+c2xvdCkpOworCQkJCWRlYnVnKCJEcmFtX3R5cGUgaW4gc2xvdCAlZCBpczoJCQlERFJBTVxuIiwKKwkJCQkgICAgIGRpbW1JbmZvLT5zbG90KTsKICNlbmRpZgogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAkJY2FzZSAzOgkvKiBOdW1iZXIgT2YgUm93IEFkZHJlc3NlcyAqLwogCQkJZGltbUluZm8tPm51bU9mUm93QWRkcmVzc2VzID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1vZHVsZSBOdW1iZXIgb2Ygcm93IGFkZHJlc3NlczoJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bnVtT2ZSb3dBZGRyZXNzZXMpKTsKKwkJCWRlYnVnKCJNb2R1bGUgTnVtYmVyIG9mIHJvdyBhZGRyZXNzZXM6CQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm51bU9mUm93QWRkcmVzc2VzKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJCWNhc2UgNDoJLyogTnVtYmVyIE9mIENvbHVtbiBBZGRyZXNzZXMgKi8KIAkJCWRpbW1JbmZvLT5udW1PZkNvbEFkZHJlc3NlcyA9IGRhdGFbaV07Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJNb2R1bGUgTnVtYmVyIG9mIGNvbCBhZGRyZXNzZXM6CQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPm51bU9mQ29sQWRkcmVzc2VzKSk7CisJCQlkZWJ1ZygiTW9kdWxlIE51bWJlciBvZiBjb2wgYWRkcmVzc2VzOgkJJWRcbiIsCisJCQkgICAgIGRpbW1JbmZvLT5udW1PZkNvbEFkZHJlc3Nlcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDU6CS8qIE51bWJlciBPZiBNb2R1bGUgQmFua3MgKi8KIAkJCWRpbW1JbmZvLT5udW1PZk1vZHVsZUJhbmtzID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk51bWJlciBvZiBCYW5rcyBvbiBNb2QuIDogCQkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bnVtT2ZNb2R1bGVCYW5rcykpOworCQkJZGVidWcoIk51bWJlciBvZiBCYW5rcyBvbiBNb2QuIDogCQkJCSVkXG4iLAorCQkJICAgICBkaW1tSW5mby0+bnVtT2ZNb2R1bGVCYW5rcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDY6CS8qIERhdGEgV2lkdGggKi8KIAkJCWRpbW1JbmZvLT5kYXRhV2lkdGggPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiTW9kdWxlIERhdGEgV2lkdGg6CQkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+ZGF0YVdpZHRoKSk7CisJCQlkZWJ1ZygiTW9kdWxlIERhdGEgV2lkdGg6CQkJCSVkXG4iLAorCQkJICAgICBkaW1tSW5mby0+ZGF0YVdpZHRoKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00NzEsMzMgKzQ1MiwyNyBAQAogCQkJc3dpdGNoIChkYXRhW2ldKSB7CiAJCQljYXNlIDB4MDoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IFRUTF81Vl9UT0xFUkFOVDsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJVFRMXzVWX1RPTEVSQU5UXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCVRUTF81Vl9UT0xFUkFOVFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MToKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IExWVFRMOwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNb2R1bGUgaXMgCQkJCQlMVlRUTFxuIikpOworCQkJCWRlYnVnKCJNb2R1bGUgaXMgCQkJCQlMVlRUTFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MjoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IEhTVExfMV81VjsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJVFRMXzVWX1RPTEVSQU5UXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCVRUTF81Vl9UT0xFUkFOVFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MzoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IFNTVExfM18zVjsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJSFNUTF8xXzVWXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCUhTVExfMV81VlxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4NDoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IFNTVExfMl81VjsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJU1NUTF8yXzVWXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCVNTVExfMl81VlxuIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWRpbW1JbmZvLT52b2x0YWdlSW50ZXJmYWNlID0gVk9MVEFHRV9VTktOT1dOOwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNb2R1bGUgaXMgCQkJCQlWT0xUQUdFX1VOS05PV05cbiIpKTsKKwkJCQlkZWJ1ZygiTW9kdWxlIGlzIAkJCQkJVk9MVEFHRV9VTktOT1dOXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTE2LDkgKzQ5MSw4IEBACiAJCQkJbGVmdE9mUG9pbnQ7CiAJCQlkaW1tSW5mby0+bWluaW11bUN5Y2xlVGltZUF0TWF4Q2FzTGF0YW5jeV9Sb1AgPQogCQkJCXJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gQ3ljbGUgVGltZSBBdCBNYXggQ2FzTGF0YW5jeToJCSVkLiVkIFtuc11cbiIsCi0JCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpKTsKKwkJCWRlYnVnKCJNaW5pbXVtIEN5Y2xlIFRpbWUgQXQgTWF4IENhc0xhdGFuY3k6CQklZC4lZCBbbnNdXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01MzEsOSArNTA1LDggQEAKIAkJCXJpZ2h0T2ZQb2ludCA9IHRpbWVfdG1wICUgZGl2OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0X0xvUCA9IGxlZnRPZlBvaW50OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0X1JvUCA9IHJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkNsb2NrIFRvIERhdGEgT3V0OgkJCQklZC4lMmQgW25zXVxuIiwKLQkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCkpOworCQkJZGVidWcoIkNsb2NrIFRvIERhdGEgT3V0OgkJCQklZC4lMmQgW25zXVxuIiwKKwkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCk7CiAJCQkvKmRpbW1JbmZvLT5jbG9ja1RvRGF0YU91dCAqLwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01NDEsNDIgKzUxNCwzNyBAQAogI2lmZGVmIENPTkZJR19NVjY0MzYwX0VDQwogCQljYXNlIDExOgkvKiBFcnJvciBDaGVjayBUeXBlICovCiAJCQlkaW1tSW5mby0+ZXJyb3JDaGVja1R5cGUgPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiRXJyb3IgQ2hlY2sgVHlwZSAoMD1OT05FKToJCQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPmVycm9yQ2hlY2tUeXBlKSk7CisJCQlkZWJ1ZygiRXJyb3IgQ2hlY2sgVHlwZSAoMD1OT05FKToJCQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPmVycm9yQ2hlY2tUeXBlKTsKIAkJCWJyZWFrOwogI2VuZGlmIC8qIG9mIGlmZGVmIENPTkZJR19NVjY0MzYwX0VDQyAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJCWNhc2UgMTI6CS8qIFJlZnJlc2ggSW50ZXJ2YWwgKi8KIAkJCWRpbW1JbmZvLT5SZWZyZXNoSW50ZXJ2YWwgPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiUmVmcmVzaEludGVydmFsICg4MD0gU2VsZiByZWZyZXNoIE5vcm1hbCwgMTUuNjI1dXMpIDogJXhcbiIsCi0JCQkgICAgIGRpbW1JbmZvLT5SZWZyZXNoSW50ZXJ2YWwpKTsKKwkJCWRlYnVnKCJSZWZyZXNoSW50ZXJ2YWwgKDgwPSBTZWxmIHJlZnJlc2ggTm9ybWFsLCAxNS42MjV1cykgOiAleFxuIiwKKwkJCSAgICAgZGltbUluZm8tPlJlZnJlc2hJbnRlcnZhbCk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDEzOgkvKiBTZHJhbSBXaWR0aCAqLwogCQkJZGltbUluZm8tPnNkcmFtV2lkdGggPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiU2RyYW0gV2lkdGg6CQkJCQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPnNkcmFtV2lkdGgpKTsKKwkJCWRlYnVnKCJTZHJhbSBXaWR0aDoJCQkJCSVkXG4iLAorCQkJICAgICBkaW1tSW5mby0+c2RyYW1XaWR0aCk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDE0OgkvKiBFcnJvciBDaGVjayBEYXRhIFdpZHRoICovCiAJCQlkaW1tSW5mby0+ZXJyb3JDaGVja0RhdGFXaWR0aCA9IGRhdGFbaV07Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJFcnJvciBDaGVjayBEYXRhIFdpZHRoOgkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+ZXJyb3JDaGVja0RhdGFXaWR0aCkpOworCQkJZGVidWcoIkVycm9yIENoZWNrIERhdGEgV2lkdGg6CQkJJWRcbiIsCisJCQkgICAgIGRpbW1JbmZvLT5lcnJvckNoZWNrRGF0YVdpZHRoKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJCWNhc2UgMTU6CS8qIE1pbmltdW0gQ2xvY2sgRGVsYXkgKi8KIAkJCWRpbW1JbmZvLT5taW5DbGtEZWxheSA9IGRhdGFbaV07Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJNaW5pbXVtIENsb2NrIERlbGF5OgkJCQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPm1pbkNsa0RlbGF5KSk7CisJCQlkZWJ1ZygiTWluaW11bSBDbG9jayBEZWxheToJCQkJJWRcbiIsCisJCQkgICAgIGRpbW1JbmZvLT5taW5DbGtEZWxheSk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTkyLDI2ICs1NjAsMjQgQEAKIAogCQkJZGltbUluZm8tPmJ1cnN0TGVuZ3RoU3VwcG9ydGVkID0gZGF0YVtpXTsKICNpZmRlZiBERUJVRwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiQnVyc3QgTGVuZ3RoIFN1cHBvcnRlZDoJCQkiKSk7CisJCQlkZWJ1ZygiQnVyc3QgTGVuZ3RoIFN1cHBvcnRlZDoJCQkiKTsKIAkJCWlmIChkaW1tSW5mby0+YnVyc3RMZW5ndGhTdXBwb3J0ZWQgJiAweDAxKQotCQkJCURQIChwcmludGYgKCIxLCAiKSk7CisJCQkJZGVidWcoIjEsICIpOwogCQkJaWYgKGRpbW1JbmZvLT5idXJzdExlbmd0aFN1cHBvcnRlZCAmIDB4MDIpCi0JCQkJRFAgKHByaW50ZiAoIjIsICIpKTsKKwkJCQlkZWJ1ZygiMiwgIik7CiAJCQlpZiAoZGltbUluZm8tPmJ1cnN0TGVuZ3RoU3VwcG9ydGVkICYgMHgwNCkKLQkJCQlEUCAocHJpbnRmICgiNCwgIikpOworCQkJCWRlYnVnKCI0LCAiKTsKIAkJCWlmIChkaW1tSW5mby0+YnVyc3RMZW5ndGhTdXBwb3J0ZWQgJiAweDA4KQotCQkJCURQIChwcmludGYgKCI4LCAiKSk7Ci0JCQlEUCAocHJpbnRmICgiIEJpdCBcbiIpKTsKKwkJCQlkZWJ1ZygiOCwgIik7CisJCQlkZWJ1ZygiIEJpdCBcbiIpOwogI2VuZGlmCiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDE3OgkvKiBOdW1iZXIgT2YgQmFua3MgT24gRWFjaCBEZXZpY2UgKi8KIAkJCWRpbW1JbmZvLT5udW1PZkJhbmtzT25FYWNoRGV2aWNlID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk51bWJlciBPZiBCYW5rcyBPbiBFYWNoIENoaXA6CQkJJWRcbiIsCi0JCQkgICAgIGRpbW1JbmZvLT5udW1PZkJhbmtzT25FYWNoRGV2aWNlKSk7CisJCQlkZWJ1ZygiTnVtYmVyIE9mIEJhbmtzIE9uIEVhY2ggQ2hpcDoJCQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm51bU9mQmFua3NPbkVhY2hEZXZpY2UpOwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTYzMSwzNCArNTk3LDMyIEBACiAJCQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCQlkaW1tSW5mby0+c3Vwb3J0ZWRDYXNMYXRlbmNpZXMgPSBkYXRhW2ldOwogI2lmZGVmIERFQlVHCi0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJTdXBvcnRlZCBDYXMgTGF0ZW5jaWVzOiAoQ0wpCQkJIikpOworCQkJZGVidWcoIlN1cG9ydGVkIENhcyBMYXRlbmNpZXM6IChDTCkJCQkiKTsKIAkJCWlmIChkaW1tSW5mby0+bWVtb3J5VHlwZSA9PSAwKSB7CS8qIFNEUkFNICovCiAJCQkJZm9yIChrID0gMDsgayA8PSA3OyBrKyspIHsKIAkJCQkJaWYgKGRpbW1JbmZvLT4KIAkJCQkJICAgIHN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgKDEgPDwgaykpCi0JCQkJCQlEUCAocHJpbnRmCi0JCQkJCQkgICAgKCIlZCwJCQkiLAotCQkJCQkJICAgICBrICsgMSkpOworCQkJCQkJZGVidWcoIiVkLAkJCSIsCisJCQkJCQkgICAgIGsgKyAxKTsKIAkJCQl9CiAKIAkJCX0gZWxzZSB7CS8qIEREUi1SQU0gKi8KIAogCQkJCWlmIChkaW1tSW5mby0+c3Vwb3J0ZWRDYXNMYXRlbmNpZXMgJiAxKQotCQkJCQlEUCAocHJpbnRmICgiMSwgIikpOworCQkJCQlkZWJ1ZygiMSwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5zdXBvcnRlZENhc0xhdGVuY2llcyAmIDIpCi0JCQkJCURQIChwcmludGYgKCIxLjUsICIpKTsKKwkJCQkJZGVidWcoIjEuNSwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5zdXBvcnRlZENhc0xhdGVuY2llcyAmIDQpCi0JCQkJCURQIChwcmludGYgKCIyLCAiKSk7CisJCQkJCWRlYnVnKCIyLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgOCkKLQkJCQkJRFAgKHByaW50ZiAoIjIuNSwgIikpOworCQkJCQlkZWJ1ZygiMi41LCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgMTYpCi0JCQkJCURQIChwcmludGYgKCIzLCAiKSk7CisJCQkJCWRlYnVnKCIzLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgMzIpCi0JCQkJCURQIChwcmludGYgKCIzLjUsICIpKTsKKwkJCQkJZGVidWcoIjMuNSwgIik7CiAKIAkJCX0KLQkJCURQIChwcmludGYgKCJcbiIpKTsKKwkJCWRlYnVnKCJcbiIpOwogI2VuZGlmCiAJCQkvKiBDYWxjdWxhdGluZyBNQVggQ0FTIGxhdGVuY3kgKi8KIAkJCWZvciAoaiA9IDc7IGogPiAwOyBqLS0pIHsKQEAgLTY3MCw4ICs2MzQsNyBAQAogCQkJCQkJLyogQ0FTIGxhdGVuY3kgMSwgMS41LCAyLCAyLjUsIDMsIDMuNSAqLwogCQkJCQkJc3dpdGNoIChqKSB7CiAJCQkJCQljYXNlIDc6Ci0JCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJCSAgICAoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJRVJST1IgISEhXG4iKSk7CisJCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJRVJST1IgISEhXG4iKTsKIAkJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJCW1heENsU3VwcG9ydGVkX0REUgogCQkJCQkJCQk9CkBAIC02NzksOCArNjQyLDcgQEAKIAkJCQkJCQloYW5nICgpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSA2OgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCUVSUk9SICEhIVxuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCUVSUk9SICEhIVxuIik7CiAJCQkJCQkJZGltbUluZm8tPgogCQkJCQkJCQltYXhDbFN1cHBvcnRlZF9ERFIKIAkJCQkJCQkJPQpAQCAtNjg4LDM2ICs2NTAsMzEgQEAKIAkJCQkJCQloYW5nICgpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSA1OgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTMuNSBjbGsnc1xuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTMuNSBjbGsnc1xuIik7CiAJCQkJCQkJZGltbUluZm8tPgogCQkJCQkJCQltYXhDbFN1cHBvcnRlZF9ERFIKIAkJCQkJCQkJPSBERFJfQ0xfM181OwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSA0OgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTMgY2xrJ3MgXG4iKSk7CisJCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJMyBjbGsncyBcbiIpOwogCQkJCQkJCWRpbW1JbmZvLT4KIAkJCQkJCQkJbWF4Q2xTdXBwb3J0ZWRfRERSCiAJCQkJCQkJCT0gRERSX0NMXzM7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQljYXNlIDM6Ci0JCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJCSAgICAoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJMi41IGNsaydzIFxuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTIuNSBjbGsncyBcbiIpOwogCQkJCQkJCWRpbW1JbmZvLT4KIAkJCQkJCQkJbWF4Q2xTdXBwb3J0ZWRfRERSCiAJCQkJCQkJCT0gRERSX0NMXzJfNTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCWNhc2UgMjoKLQkJCQkJCQlEUCAocHJpbnRmCi0JCQkJCQkJICAgICgiTWF4LiBDYXMgTGF0ZW5jaWVzIChERFIpOiAJCQkyIGNsaydzIFxuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTIgY2xrJ3MgXG4iKTsKIAkJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJCW1heENsU3VwcG9ydGVkX0REUgogCQkJCQkJCQk9IEREUl9DTF8yOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSAxOgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTEuNSBjbGsncyBcbiIpKTsKKwkJCQkJCQlkZWJ1ZygiTWF4LiBDYXMgTGF0ZW5jaWVzIChERFIpOiAJCQkxLjUgY2xrJ3MgXG4iKTsKIAkJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJCW1heENsU3VwcG9ydGVkX0REUgogCQkJCQkJCQk9IEREUl9DTF8xXzU7CkBAIC03MzYsMzIgKzY5MywyOSBAQAogCQkJCQkJCWRpbW1JbmZvLT4KIAkJCQkJCQkJbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1AKIAkJCQkJCQkJPSAwOwotCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJICAgICgiTWF4LiBDYXMgTGF0ZW5jaWVzIChERFIgTG9QLlJvUCBOb3RhdGlvbik6CSVkLiVkIFxuIiwKKwkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUiBMb1AuUm9QIE5vdGF0aW9uKToJJWQuJWQgXG4iLAogCQkJCQkJICAgICBkaW1tSW5mby0+CiAJCQkJCQkgICAgIG1heENBU2xhdGVuY3lTdXBwb3J0ZWRfTG9QLAogCQkJCQkJICAgICBkaW1tSW5mby0+Ci0JCQkJCQkgICAgIG1heENBU2xhdGVuY3lTdXBwb3J0ZWRfUm9QKSk7CisJCQkJCQkgICAgIG1heENBU2xhdGVuY3lTdXBwb3J0ZWRfUm9QKTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIFNEUkFNOgogCQkJCQkJLyogQ0FTIGxhdGVuY3kgMSwgMiwgMywgNCwgNSwgNiwgNyAqLwogCQkJCQkJZGltbUluZm8tPm1heENsU3VwcG9ydGVkX1NEID0gajsJLyogIENhcyBMYXRlbmN5IEREUi1SQU0gQ29kZWQJCQkqLwotCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJICAgICgiTWF4LiBDYXMgTGF0ZW5jaWVzIChTRCk6ICVkXG4iLAorCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoU0QpOiAlZFxuIiwKIAkJCQkJCSAgICAgZGltbUluZm8tPgotCQkJCQkJICAgICBtYXhDbFN1cHBvcnRlZF9TRCkpOworCQkJCQkJICAgICBtYXhDbFN1cHBvcnRlZF9TRCk7CiAJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Mb1AKIAkJCQkJCQk9IGo7CiAJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1AKIAkJCQkJCQk9IDA7Ci0JCQkJCQlEUCAocHJpbnRmCi0JCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUiBMb1AuUm9QIE5vdGF0aW9uKTogJWQuJWQgXG4iLAorCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSIExvUC5Sb1AgTm90YXRpb24pOiAlZC4lZCBcbiIsCiAJCQkJCQkgICAgIGRpbW1JbmZvLT4KIAkJCQkJCSAgICAgbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Mb1AsCiAJCQkJCQkgICAgIGRpbW1JbmZvLT4KLQkJCQkJCSAgICAgbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1ApKTsKKwkJCQkJCSAgICAgbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1ApOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQkJYnJlYWs7CkBAIC03NzEsNyArNzI1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDIxOgkvKiBCdWZmZXJlZCBBZGRyZXNzIEFuZCBDb250cm9sIElucHV0cyAqLwotCQkJRFAgKHByaW50ZiAoIlxuTW9kdWwgQXR0cmlidXRlcyAoU1BEIEJ5dGUgMjEpOiBcbiIpKTsKKwkJCWRlYnVnKCJcbk1vZHVsIEF0dHJpYnV0ZXMgKFNQRCBCeXRlIDIxKTogXG4iKTsKIAkJCWRpbW1JbmZvLT5idWZmZXJlZEFkZHJBbmRDb250cm9sSW5wdXRzID0KIAkJCQlkYXRhW2ldICYgQklUMDsKIAkJCWRpbW1JbmZvLT5yZWdpc3RlcmVkQWRkckFuZENvbnRyb2xJbnB1dHMgPQpAQCAtNzg0LDYyICs3MzgsNDcgQEAKIAkJCQkoZGF0YVtpXSAmIEJJVDUpID4+IDU7CiAJCQlkaW1tSW5mby0+cmVkdW5kYW50Um93QWRkcmVzc2luZyA9CiAJCQkJKGRhdGFbaV0gJiBCSVQ2KSA+PiA2OwotI2lmZGVmIERFQlVHCisKIAkJCWlmIChkaW1tSW5mby0+YnVmZmVyZWRBZGRyQW5kQ29udHJvbElucHV0cyA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBCdWZmZXJlZCBBZGRyZXNzL0NvbnRyb2wgSW5wdXQ6CQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIEJ1ZmZlcmVkIEFkZHJlc3MvQ29udHJvbCBJbnB1dDoJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBCdWZmZXJlZCBBZGRyZXNzL0NvbnRyb2wgSW5wdXQ6CQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gQnVmZmVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJTm8gXG4iKTsKIAogCQkJaWYgKGRpbW1JbmZvLT5yZWdpc3RlcmVkQWRkckFuZENvbnRyb2xJbnB1dHMgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gUmVnaXN0ZXJlZCBBZGRyZXNzL0NvbnRyb2wgSW5wdXQ6CQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIFJlZ2lzdGVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIFJlZ2lzdGVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJTm8gXG4iKSk7CisJCQkJZGVidWcoIiAtIFJlZ2lzdGVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJTm8gXG4iKTsKIAogCQkJaWYgKGRpbW1JbmZvLT5vbkNhcmRQTEwgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gT24tQ2FyZCBQTEwgKGNsb2NrKToJCQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSBPbi1DYXJkIFBMTCAoY2xvY2spOgkJCQlZZXMgXG4iKTsKIAkJCWVsc2UKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gT24tQ2FyZCBQTEwgKGNsb2NrKToJCQkJTm8gXG4iKSk7CisJCQkJZGVidWcoIiAtIE9uLUNhcmQgUExMIChjbG9jayk6CQkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+YnVmZmVyZWREUU1CaW5wdXRzID09IDEpCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIEJ1ZmZlcmQgRFFNQiBJbnB1dHM6CQkJCVllcyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gQnVmZmVyZCBEUU1CIElucHV0czoJCQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIEJ1ZmZlcmQgRFFNQiBJbnB1dHM6CQkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSBCdWZmZXJkIERRTUIgSW5wdXRzOgkJCQlObyBcbiIpOwogCiAJCQlpZiAoZGltbUluZm8tPnJlZ2lzdGVyZWREUU1CaW5wdXRzID09IDEpCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIFJlZ2lzdGVyZWQgRFFNQiBJbnB1dHM6CQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSBSZWdpc3RlcmVkIERRTUIgSW5wdXRzOgkJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBSZWdpc3RlcmVkIERRTUIgSW5wdXRzOgkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSBSZWdpc3RlcmVkIERRTUIgSW5wdXRzOgkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+ZGlmZmVyZW50aWFsQ2xvY2tJbnB1dCA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBEaWZmZXJlbnRpYWwgQ2xvY2sgSW5wdXQ6CQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSBEaWZmZXJlbnRpYWwgQ2xvY2sgSW5wdXQ6CQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIERpZmZlcmVudGlhbCBDbG9jayBJbnB1dDoJCQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gRGlmZmVyZW50aWFsIENsb2NrIElucHV0OgkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+cmVkdW5kYW50Um93QWRkcmVzc2luZyA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSByZWR1bmRhbnQgUm93IEFkZHJlc3Npbmc6CQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSByZWR1bmRhbnQgUm93IEFkZHJlc3Npbmc6CQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIHJlZHVuZGFudCBSb3cgQWRkcmVzc2luZzoJCQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gcmVkdW5kYW50IFJvdyBBZGRyZXNzaW5nOgkJCU5vIFxuIik7CiAKLSNlbmRpZgogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAkJY2FzZSAyMjoJLyogU3Vwb3J0ZWQgQXV0b1ByZUNoYXJnZSAqLwotCQkJRFAgKHByaW50ZiAoIlxuTW9kdWwgQXR0cmlidXRlcyAoU1BEIEJ5dGUgMjIpOiBcbiIpKTsKKwkJCWRlYnVnKCJcbk1vZHVsIEF0dHJpYnV0ZXMgKFNQRCBCeXRlIDIyKTogXG4iKTsKIAkJCWRpbW1JbmZvLT5zdXBvcnRlZEVhcmx5UmFzUHJlQ2hhcmdlID0gZGF0YVtpXSAmIEJJVDA7CiAJCQlkaW1tSW5mby0+c3Vwb3J0ZWRBdXRvUHJlQ2hhcmdlID0KIAkJCQkoZGF0YVtpXSAmIEJJVDEpID4+IDE7CkBAIC04NTEsNTAgKzc5MCwzNyBAQAogCQkJCShkYXRhW2ldICYgQklUNCkgPj4gNDsKIAkJCWRpbW1JbmZvLT5zdXBvcnRlZDVQZXJjZW50VXBwZXJWQ0MgPQogCQkJCShkYXRhW2ldICYgQklUNSkgPj4gNTsKLSNpZmRlZiBERUJVRworCiAJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkRWFybHlSYXNQcmVDaGFyZ2UgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gRWFybHkgUmFzIFByZWNoYXJnZToJCQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIEVhcmx5IFJhcyBQcmVjaGFyZ2U6CQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtICBFYXJseSBSYXMgUHJlY2hhcmdlOgkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSAgRWFybHkgUmFzIFByZWNoYXJnZToJCQlObyBcbiIpOwogCiAJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQXV0b1ByZUNoYXJnZSA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBBdXRvUHJlQ2hhcmdlOgkJCQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIEF1dG9QcmVDaGFyZ2U6CQkJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSAgQXV0b1ByZUNoYXJnZToJCQkJTm8gXG4iKSk7CisJCQkJZGVidWcoIiAtICBBdXRvUHJlQ2hhcmdlOgkJCQlObyBcbiIpOwogCiAJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkUHJlQ2hhcmdlQWxsID09IDEpCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIFByZWNoYXJnZSBBbGw6CQkJCVllcyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gUHJlY2hhcmdlIEFsbDoJCQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtICBQcmVjaGFyZ2UgQWxsOgkJCQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gIFByZWNoYXJnZSBBbGw6CQkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+c3Vwb3J0ZWRXcml0ZTFSZWFkQnVyc3QgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCVllcyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSAgV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSAgV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+c3Vwb3J0ZWQ1UGVyY2VudExvd1ZDQyA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBsb3dlciBWQ0MgdG9sZXJhbmNlOgkJCTUgUGVyY2VudCBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gbG93ZXIgVkNDIHRvbGVyYW5jZToJCQk1IFBlcmNlbnQgXG4iKTsKIAkJCWVsc2UKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiCS0gbG93ZXIgVkNDIHRvbGVyYW5jZToJCQkxMCBQZXJjZW50IFxuIikpOworCQkJCWRlYnVnKCIJLSBsb3dlciBWQ0MgdG9sZXJhbmNlOgkJCTEwIFBlcmNlbnQgXG4iKTsKIAogCQkJaWYgKGRpbW1JbmZvLT5zdXBvcnRlZDVQZXJjZW50VXBwZXJWQ0MgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gdXBwZXIgVkNDIHRvbGVyYW5jZToJCQk1IFBlcmNlbnQgXG4iKSk7CisJCQkJZGVidWcoIiAtIHVwcGVyIFZDQyB0b2xlcmFuY2U6CQkJNSBQZXJjZW50IFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtICB1cHBlciBWQ0MgdG9sZXJhbmNlOgkJCTEwIFBlcmNlbnQgXG4iKSk7CisJCQkJZGVidWcoIiAtICB1cHBlciBWQ0MgdG9sZXJhbmNlOgkJCTEwIFBlcmNlbnQgXG4iKTsKIAotI2VuZGlmCiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtOTExLDkgKzgzNyw4IEBACiAJCQkJbGVmdE9mUG9pbnQ7CiAJCQlkaW1tSW5mby0+bWluaW11bUN5Y2xlVGltZUF0TWF4Q2FzTGF0YW5jeU1pbnVzMV9Sb1AgPQogCQkJCXJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gQ3ljbGUgVGltZSBBdCAybmQgaGlnaGVzdCBDYXNMYXRhbmN5ICgwID0gTm90IHN1cHBvcnRlZCk6ICVkLiVkIFtuc11cbiIsCi0JCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpKTsKKwkJCWRlYnVnKCJNaW5pbXVtIEN5Y2xlIFRpbWUgQXQgMm5kIGhpZ2hlc3QgQ2FzTGF0YW5jeSAoMCA9IE5vdCBzdXBwb3J0ZWQpOiAlZC4lZCBbbnNdXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCS8qZGltbUluZm8tPm1pbmltdW1DeWNsZVRpbWVBdE1heENhc0xhdGFuY3kgKi8KIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtOTI3LDkgKzg1Miw4IEBACiAJCQlyaWdodE9mUG9pbnQgPSB0aW1lX3RtcCAlIGRpdjsKIAkJCWRpbW1JbmZvLT5jbG9ja1RvRGF0YU91dE1pbnVzMV9Mb1AgPSBsZWZ0T2ZQb2ludDsKIAkJCWRpbW1JbmZvLT5jbG9ja1RvRGF0YU91dE1pbnVzMV9Sb1AgPSByaWdodE9mUG9pbnQ7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJDbG9jayBUbyBEYXRhIE91dCAoMm5kIENMIHZhbHVlKTogCQklZC4lMmQgW25zXVxuIiwKLQkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCkpOworCQkJZGVidWcoIkNsb2NrIFRvIERhdGEgT3V0ICgybmQgQ0wgdmFsdWUpOiAJCSVkLiUyZCBbbnNdXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NDYsOSArODcwLDggQEAKIAkJCQlsZWZ0T2ZQb2ludDsKIAkJCWRpbW1JbmZvLT5taW5pbXVtQ3ljbGVUaW1lQXRNYXhDYXNMYXRhbmN5TWludXMyX1JvUCA9CiAJCQkJcmlnaHRPZlBvaW50OwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiTWluaW11bSBDeWNsZSBUaW1lIEF0IDNyZCBoaWdoZXN0IENhc0xhdGFuY3kgKDAgPSBOb3Qgc3VwcG9ydGVkKTogJWQuJWQgW25zXVxuIiwKLQkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCkpOworCQkJZGVidWcoIk1pbmltdW0gQ3ljbGUgVGltZSBBdCAzcmQgaGlnaGVzdCBDYXNMYXRhbmN5ICgwID0gTm90IHN1cHBvcnRlZCk6ICVkLiVkIFtuc11cbiIsCisJCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpOwogCQkJLypkaW1tSW5mby0+bWluaW11bUN5Y2xlVGltZUF0TWF4Q2FzTGF0YW5jeSAqLwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC05NjIsOSArODg1LDggQEAKIAkJCXJpZ2h0T2ZQb2ludCA9IHRpbWVfdG1wICUgZGl2OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0TWludXMyX0xvUCA9IGxlZnRPZlBvaW50OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0TWludXMyX1JvUCA9IHJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkNsb2NrIFRvIERhdGEgT3V0ICgzcmQgQ0wgdmFsdWUpOiAJCSVkLiUyZCBbbnNdXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiQ2xvY2sgVG8gRGF0YSBPdXQgKDNyZCBDTCB2YWx1ZSk6IAkJJWQuJTJkIFtuc11cbiIsCisJCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpOwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTk4MSwxMiArOTAzLDEwIEBACiAJCQl0cnBfY2xvY2tzID0KIAkJCQkoZGltbUluZm8tPm1pblJvd1ByZWNoYXJnZVRpbWUgKwogCQkJCSAodG1lbWNsayAtIDEpKSAvIHRtZW1jbGs7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCIqKiogMSBjbG9jayBjeWNsZSA9ICVsZCAgMTBwcyBpbnRlcnZhbGxzID0gJWxkLiVsZCBucyoqKipcbiIsCi0JCQkgICAgIHRtZW1jbGssIHRtZW1jbGsgLyAxMDAsIHRtZW1jbGsgJSAxMDApKTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gUm93IFByZWNoYXJnZSBUaW1lIFtuc106CQklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKSk7CisJCQlkZWJ1ZygiKioqIDEgY2xvY2sgY3ljbGUgPSAlbGQgIDEwcHMgaW50ZXJ2YWxscyA9ICVsZC4lbGQgbnMqKioqXG4iLAorCQkJICAgICB0bWVtY2xrLCB0bWVtY2xrIC8gMTAwLCB0bWVtY2xrICUgMTAwKTsKKwkJCWRlYnVnKCJNaW5pbXVtIFJvdyBQcmVjaGFyZ2UgVGltZSBbbnNdOgkJJWQuJTJkID0gaW4gQ2xrIGN5Y2xlcyAlZFxuIiwKKwkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCwgdHJwX2Nsb2Nrcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTAwMCwxMiArOTIwLDggQEAKIAkJCXJpZ2h0T2ZQb2ludCA9IChkYXRhW2ldICYgbWFza1JpZ2h0T2ZQb2ludCkgKiAyNTsKIAogCQkJZGltbUluZm8tPm1pblJvd0FjdGl2ZVJvd0FjdGl2ZURlbGF5ID0gKChsZWZ0T2ZQb2ludCAqIDEwMCkgKyByaWdodE9mUG9pbnQpOwkvKiBtZWFzdXJlZCBpbiAxMDBucyBJbnRlcnZhbHMgKi8KLQkJCXRycmRfY2xvY2tzID0KLQkJCQkoZGltbUluZm8tPm1pblJvd0FjdGl2ZVJvd0FjdGl2ZURlbGF5ICsKLQkJCQkgKHRtZW1jbGsgLSAxKSkgLyB0bWVtY2xrOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiTWluaW11bSBSb3cgQWN0aXZlIC1Uby0gUm93IEFjdGl2ZSBEZWxheSBbbnNdOgklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKSk7CisJCQlkZWJ1ZygiTWluaW11bSBSb3cgQWN0aXZlIC1Uby0gUm93IEFjdGl2ZSBEZWxheSBbbnNdOgklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMDE5LDEyICs5MzUsOCBAQAogCQkJcmlnaHRPZlBvaW50ID0gKGRhdGFbaV0gJiBtYXNrUmlnaHRPZlBvaW50KSAqIDI1OwogCiAJCQlkaW1tSW5mby0+bWluUm93QWN0aXZlUm93QWN0aXZlRGVsYXkgPSAoKGxlZnRPZlBvaW50ICogMTAwKSArIHJpZ2h0T2ZQb2ludCk7CS8qIG1lYXN1cmVkIGluIDEwMG5zIEludGVydmFscyAqLwotCQkJdHJjZF9jbG9ja3MgPQotCQkJCShkaW1tSW5mby0+bWluUm93QWN0aXZlUm93QWN0aXZlRGVsYXkgKwotCQkJCSAodG1lbWNsayAtIDEpKSAvIHRtZW1jbGs7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJNaW5pbXVtIFJhcy1Uby1DYXMgRGVsYXkgW25zXToJCQklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKSk7CisJCQlkZWJ1ZygiTWluaW11bSBSYXMtVG8tQ2FzIERlbGF5IFtuc106CQkJJWQuJTJkID0gaW4gQ2xrIGN5Y2xlcyAlZFxuIiwKKwkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCwgdHJwX2Nsb2Nrcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTAzMyw0MSArOTQ1LDM4IEBACiAJCQl0cmFzX2Nsb2NrcyA9CiAJCQkJKE5TdG8xMFBTIChkYXRhW2ldKSArCiAJCQkJICh0bWVtY2xrIC0gMSkpIC8gdG1lbWNsazsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gUmFzIFB1bHNlIFdpZHRoIFtuc106CQkJJWQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bWluUmFzUHVsc2VXaWR0aCwgdHJhc19jbG9ja3MpKTsKKwkJCWRlYnVnKCJNaW5pbXVtIFJhcyBQdWxzZSBXaWR0aCBbbnNdOgkJCSVkID0gaW4gQ2xrIGN5Y2xlcyAlZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm1pblJhc1B1bHNlV2lkdGgsIHRyYXNfY2xvY2tzKTsKIAogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAkJY2FzZSAzMToJLyogTW9kdWxlIEJhbmsgRGVuc2l0eSAqLwogCQkJZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1vZHVsZSBCYW5rIERlbnNpdHk6CQkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bW9kdWxlQmFua0RlbnNpdHkpKTsKKwkJCWRlYnVnKCJNb2R1bGUgQmFuayBEZW5zaXR5OgkJCQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5KTsKICNpZmRlZiBERUJVRwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiKioqIE9mZmVyZWQgRGVuc2l0aWVzIChtb3JlIHRoYW4gMSA9IE11bHRpc2l6ZS1Nb2R1bGUpOiAiKSk7CisJCQlkZWJ1ZygiKioqIE9mZmVyZWQgRGVuc2l0aWVzIChtb3JlIHRoYW4gMSA9IE11bHRpc2l6ZS1Nb2R1bGUpOiAiKTsKIAkJCXsKIAkJCQlpZiAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgMSkKLQkJCQkJRFAgKHByaW50ZiAoIjRNQiwgIikpOworCQkJCQlkZWJ1ZygiNE1CLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgMikKLQkJCQkJRFAgKHByaW50ZiAoIjhNQiwgIikpOworCQkJCQlkZWJ1ZygiOE1CLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgNCkKLQkJCQkJRFAgKHByaW50ZiAoIjE2TUIsICIpKTsKKwkJCQkJZGVidWcoIjE2TUIsICIpOwogCQkJCWlmIChkaW1tSW5mby0+bW9kdWxlQmFua0RlbnNpdHkgJiA4KQotCQkJCQlEUCAocHJpbnRmICgiMzJNQiwgIikpOworCQkJCQlkZWJ1ZygiMzJNQiwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5tb2R1bGVCYW5rRGVuc2l0eSAmIDE2KQotCQkJCQlEUCAocHJpbnRmICgiNjRNQiwgIikpOworCQkJCQlkZWJ1ZygiNjRNQiwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5tb2R1bGVCYW5rRGVuc2l0eSAmIDMyKQotCQkJCQlEUCAocHJpbnRmICgiMTI4TUIsICIpKTsKKwkJCQkJZGVidWcoIjEyOE1CLCAiKTsKIAkJCQlpZiAoKGRpbW1JbmZvLT5tb2R1bGVCYW5rRGVuc2l0eSAmIDY0KQogCQkJCSAgICB8fCAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgMTI4KSkgewotCQkJCQlEUCAocHJpbnRmICgiRVJST1IsICIpKTsKKwkJCQkJZGVidWcoIkVSUk9SLCAiKTsKIAkJCQkJaGFuZyAoKTsKIAkJCQl9CiAJCQl9Ci0JCQlEUCAocHJpbnRmICgiXG4iKSk7CisJCQlkZWJ1ZygiXG4iKTsKICNlbmRpZgogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMDkzLDkgKzEwMDIsOCBAQAogCQkJfQogCQkJZGltbUluZm8tPmFkZHJBbmRDb21tYW5kU2V0dXBUaW1lID0KIAkJCQkobGVmdE9mUG9pbnQgKiAxMDAgKyByaWdodE9mUG9pbnQpICogc2lnbjsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkFkZHJlc3MgQW5kIENvbW1hbmQgU2V0dXAgVGltZSBbbnNdOgkJJWQuJWRcbiIsCi0JCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiQWRkcmVzcyBBbmQgQ29tbWFuZCBTZXR1cCBUaW1lIFtuc106CQklZC4lZFxuIiwKKwkJCSAgICAgc2lnbiAqIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpOwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTExMjAsOSArMTAyOCw4IEBACiAJCQl9CiAJCQlkaW1tSW5mby0+YWRkckFuZENvbW1hbmRIb2xkVGltZSA9CiAJCQkJKGxlZnRPZlBvaW50ICogMTAwICsgcmlnaHRPZlBvaW50KSAqIHNpZ247Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJBZGRyZXNzIEFuZCBDb21tYW5kIEhvbGQgVGltZSBbbnNdOgkJJWQuJWRcbiIsCi0JCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiQWRkcmVzcyBBbmQgQ29tbWFuZCBIb2xkIFRpbWUgW25zXToJCSVkLiVkXG4iLAorCQkJICAgICBzaWduICogbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTE0Nyw5ICsxMDU0LDggQEAKIAkJCX0KIAkJCWRpbW1JbmZvLT5kYXRhSW5wdXRTZXR1cFRpbWUgPQogCQkJCShsZWZ0T2ZQb2ludCAqIDEwMCArIHJpZ2h0T2ZQb2ludCkgKiBzaWduOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiRGF0YSBJbnB1dCBTZXR1cCBUaW1lIFtuc106CQkJJWQuJWRcbiIsCi0JCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiRGF0YSBJbnB1dCBTZXR1cCBUaW1lIFtuc106CQkJJWQuJWRcbiIsCisJCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTc0LDkgKzEwODAsOCBAQAogCQkJfQogCQkJZGltbUluZm8tPmRhdGFJbnB1dEhvbGRUaW1lID0KIAkJCQkobGVmdE9mUG9pbnQgKiAxMDAgKyByaWdodE9mUG9pbnQpICogc2lnbjsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkRhdGEgSW5wdXQgSG9sZCBUaW1lIFtuc106CQkJJWQuJWRcblxuIiwKLQkJCSAgICAgc2lnbiAqIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpKTsKKwkJCWRlYnVnKCJEYXRhIElucHV0IEhvbGQgVGltZSBbbnNdOgkJCSVkLiVkXG5cbiIsCisJCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCQl9CkBAIC0xMjEzLDcgKzExMTgsNyBAQAogCXRtcCAqPSBkaW1tSW5mby0+c2RyYW1XaWR0aDsKIAl0bXAgPSB0bXAgPj4gMjQ7CS8qIGRpdiBieSAweDQwMDAwMDAgKDY0TSkJKi8KIAlkaW1tSW5mby0+ZHJiX3NpemUgPSAodWNoYXIpIHRtcDsKLQlEUCAocHJpbnRmICgiTW9kdWxlIERSQiBzaXplIChuKjY0TWJpdCk6ICVkXG4iLCBkaW1tSW5mby0+ZHJiX3NpemUpKTsKKwlkZWJ1ZygiTW9kdWxlIERSQiBzaXplIChuKjY0TWJpdCk6ICVkXG4iLCBkaW1tSW5mby0+ZHJiX3NpemUpOwogCiAJLyogdHJ5IGEgQ0FTIGxhdGVuY3kgb2YgMyBmaXJzdC4uLiAqLwogCkBAIC0xMjM2LDExICsxMTQxLDExIEBACiAJCQljYWxfdmFsID0gNDsKIAl9CiAKLQlEUCAocHJpbnRmICgiY2FsX3ZhbCA9ICVkXG4iLCBjYWxfdmFsICogNSkpOworCWRlYnVnKCJjYWxfdmFsID0gJWRcbiIsIGNhbF92YWwgKiA1KTsKIAogCS8qIGJ1bW1lciwgZGlkJ3Qgd29yay4uLiAqLwogCWlmIChjYWxfdmFsID09IDApIHsKLQkJRFAgKHByaW50ZiAoIkNvdWxkbid0IGZpbmQgYSBnb29kIENBUyBsYXRlbmN5XG4iKSk7CisJCWRlYnVnKCJDb3VsZG4ndCBmaW5kIGEgZ29vZCBDQVMgbGF0ZW5jeVxuIik7CiAJCWhhbmcgKCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEyNjcsODEgKzExNzIsNzQgQEAKIAogCS8qIFByb2dyYW0gdGhlIEdUIHdpdGggdGhlIGRpc2NvdmVyZWQgZGF0YSAqLwogCWlmIChpbmZvLT5yZWdpc3RlcmVkQWRkckFuZENvbnRyb2xJbnB1dHMgPT0gdHJ1ZSkKLQkJRFAgKHByaW50ZgotCQkgICAgKCJNb2R1bGUgaXMgcmVnaXN0ZXJlZCwgYnV0IHdlIGRvIG5vdCBzdXBwb3J0IHJlZ2lzdGVyZWQgTW9kdWxlcyAhISFcbiIpKTsKKwkJZGVidWcoIk1vZHVsZSBpcyByZWdpc3RlcmVkLCBidXQgd2UgZG8gbm90IHN1cHBvcnQgcmVnaXN0ZXJlZCBNb2R1bGVzICEhIVxuIik7CiAKIAkvKiBkZWxheSBsaW5lICovCiAJc2V0X2RmY2RsSW5pdCAoKTsJLyogbWF5IGJlIGl0cyBub3QgbmVlZGVkICovCi0JRFAgKHByaW50ZiAoIkRlbGF5IGxpbmUgc2V0IGRvbmVcbiIpKTsKKwlkZWJ1ZygiRGVsYXkgbGluZSBzZXQgZG9uZVxuIik7CiAKIAkvKiBzZXQgU0RSQU0gbW9kZSBOT1AgKi8gLyogVG9fZG8gY2hlY2sgaXQgKi8KIAlHVF9SRUdfV1JJVEUgKFNEUkFNX09QRVJBVElPTiwgMHg1KTsKIAl3aGlsZSAoR1RSRUdSRUFEIChTRFJBTV9PUEVSQVRJT04pICE9IDApIHsKLQkJRFAgKHByaW50ZgotCQkgICAgKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxODogTW9kdWxlIHN0aWxsIGJ1c3kgLi4uIHBsZWFzZSB3YWl0Li4uICoqKlxuIikpOworCQlkZWJ1ZygiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTg6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCX0KIAogI2lmZGVmIENPTkZJR19NVjY0MzYwX0VDQwogCWlmICgoaW5mby0+ZXJyb3JDaGVja1R5cGUgPT0gMHgyKSAmJiAoQ1BDSTc1MF9FQ0NfVEVTVCkpIHsKIAkJLyogRFJBTSBoYXMgRUNDLCBzbyB0dXJuIGl0IG9uICovCiAJCXNkcmFtX2NvbmZpZ19yZWcgfD0gQklUMTg7Ci0JCURQKHByaW50ZigiRW5hYmxpbmcgRUNDXG4iKSk7CisJCWRlYnVnKCJFbmFibGluZyBFQ0NcbiIpOwogCX0KICNlbmRpZiAvKiBvZiBpZmRlZiBDT05GSUdfTVY2NDM2MF9FQ0MgKi8KIAogCS8qIFNEUkFNIGNvbmZpZ3VyYXRpb24gKi8KIAlHVF9SRUdfV1JJVEUoU0RSQU1fQ09ORklHLCBzZHJhbV9jb25maWdfcmVnKTsKLQlEUCAocHJpbnRmICgic2RyYW1fY29uZiAweDE0MDA6ICUwOHhcbiIsIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSkpOworCWRlYnVnKCJzZHJhbV9jb25mIDB4MTQwMDogJTA4eFxuIiwgR1RSRUdSRUFEIChTRFJBTV9DT05GSUcpKTsKIAogCS8qIFNEUkFNIG9wZW4gcGFnZXMgY29udHJvbGwga2VlcCBvcGVuIGFzIG11Y2ggYXMgSSBjYW4gKi8KIAlHVF9SRUdfV1JJVEUgKFNEUkFNX09QRU5fUEFHRVNfQ09OVFJPTCwgMHgwKTsKLQlEUCAocHJpbnRmCi0JICAgICgic2RyYW1fb3Blbl9wYWdlc19jb250cm9sbCAweDE0MTQ6ICUwOHhcbiIsCi0JICAgICBHVFJFR1JFQUQgKFNEUkFNX09QRU5fUEFHRVNfQ09OVFJPTCkpKTsKKwlkZWJ1Zygic2RyYW1fb3Blbl9wYWdlc19jb250cm9sbCAweDE0MTQ6ICUwOHhcbiIsCisJICAgICBHVFJFR1JFQUQgKFNEUkFNX09QRU5fUEFHRVNfQ09OVFJPTCkpOwogCiAKIAkvKiBTRFJBTSBEX1VOSVRfQ09OVFJPTF9MT1cgMHgxNDA0ICovCiAJdG1wID0gKEdUUkVHUkVBRCAoRF9VTklUX0NPTlRST0xfTE9XKSAmIDB4MDEpOwkvKiBDbG9jayBEb21haW4gU3luYyBmcm9tIHBvd2VyIG9uIHJlc2V0ICovCiAJaWYgKHRtcCA9PSAwKQotCQlEUCAocHJpbnRmICgiQ29yZSBTaWduYWxzIGFyZSBzeW5jIChieSBIVy1TZXR0aW5nKSEhIVxuIikpOworCQlkZWJ1ZygiQ29yZSBTaWduYWxzIGFyZSBzeW5jIChieSBIVy1TZXR0aW5nKSEhIVxuIik7CiAJZWxzZQotCQlEUCAocHJpbnRmCi0JCSAgICAoIkNvcmUgU2lnbmFscyBzeW5jcy4gYXJlIGJ5cGFzc2VkIChieSBIVy1TZXR0aW5nKSEhIVxuIikpOworCQlkZWJ1ZygiQ29yZSBTaWduYWxzIHN5bmNzLiBhcmUgYnlwYXNzZWQgKGJ5IEhXLVNldHRpbmcpISEhXG4iKTsKIAogCS8qIFNEUkFNIHNldCBDQVMgTGVudGVuY3kgYWNjb3JkaW5nIHRvIFNQRCBpbmZvcm1hdGlvbiAqLwogCXN3aXRjaCAoaW5mby0+bWVtb3J5VHlwZSkgewogCWNhc2UgU0RSQU06Ci0JCURQIChwcmludGYgKCIjIyMgU0QtUkFNIG5vdCBzdXBwb3J0ZWQgeWV0ICEhIVxuIikpOworCQlkZWJ1ZygiIyMjIFNELVJBTSBub3Qgc3VwcG9ydGVkIHlldCAhISFcbiIpOwogCQloYW5nICgpOwogCQkvKiBUb0RvIGZpbGwgU0QtUkFNIGlmIG5lZWRlZCAhISEhISAqLwogCQlicmVhazsKIAogCWNhc2UgRERSOgotCQlEUCAocHJpbnRmICgiIyMjIFNFVC1DTCBmb3IgRERSLVJBTVxuIikpOworCQlkZWJ1ZygiIyMjIFNFVC1DTCBmb3IgRERSLVJBTVxuIik7CiAKIAkJc3dpdGNoIChpbmZvLT5tYXhDbFN1cHBvcnRlZF9ERFIpIHsKIAkJY2FzZSBERFJfQ0xfMzoKIAkJCXRtcF9kdW5pdF9jb250cm9sX2xvdyA9IDB4M2MwMDAwMDA7CS8qIFJlYWQtRGF0YSBzYW1wbGVkIG9uIGZhbGxpbmcgZWRnZSBvZiBDbGsgKi8KIAkJCXRtcF9zZHJhbV9tb2RlID0gMHgzMjsJLyogQ0w9MyBCdXJzdGxlbmd0aCA9IDQgKi8KLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1heC4gQ0wgaXMgMyBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAotCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KSk7CisJCQlkZWJ1ZygiTWF4LiBDTCBpcyAzIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCisJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBERFJfQ0xfMl81OgogCQkJaWYgKHRtcCA9PSAxKSB7CS8qIGNsb2NrcyBzeW5jICovCiAJCQkJdG1wX2R1bml0X2NvbnRyb2xfbG93ID0gMHgyNDAwMDAwMDsJLyogUmVhZC1EYXRhIHNhbXBsZWQgb24gZmFsbGluZyBlZGdlIG9mIENsayAqLwogCQkJCXRtcF9zZHJhbV9tb2RlID0gMHg2MjsJLyogQ0w9Miw1IEJ1cnN0bGVuZ3RoID0gNCAqLwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNYXguIENMIGlzIDIsNXMgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKLQkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpKTsKKwkJCQlkZWJ1ZygiTWF4LiBDTCBpcyAyLDVzIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCisJCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KTsKIAkJCX0gZWxzZSB7CS8qIGNsayBzeW5jLiBieXBhc3NlZAkgICovCiAKIAkJCQl0bXBfZHVuaXRfY29udHJvbF9sb3cgPSAweDAzMDAwMDAwOwkvKiBSZWFkLURhdGEgc2FtcGxlZCBvbiByaXNpbmcgZWRnZSBvZiBDbGsgKi8KIAkJCQl0bXBfc2RyYW1fbW9kZSA9IDB4NjI7CS8qIENMPTIsNSBCdXJzdGxlbmd0aCA9IDQgKi8KLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTWF4LiBDTCBpcyAyLDUgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKLQkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpKTsKKwkJCQlkZWJ1ZygiTWF4LiBDTCBpcyAyLDUgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKKwkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJfQogCQkJYnJlYWs7CiAKQEAgLTEzNDksMTYgKzEyNDcsMTQgQEAKIAkJCWlmICh0bXAgPT0gMSkgewkvKiBTeW5jICovCiAJCQkJdG1wX2R1bml0X2NvbnRyb2xfbG93ID0gMHgwMzAwMDAwMDsJLyogUmVhZC1EYXRhIHNhbXBsZWQgb24gcmlzaW5nIGVkZ2Ugb2YgQ2xrICovCiAJCQkJdG1wX3NkcmFtX21vZGUgPSAweDIyOwkvKiBDTD0yIEJ1cnN0bGVuZ3RoID0gNCAqLwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNYXguIENMIGlzIDJzIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCi0JCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KSk7CisJCQkJZGVidWcoIk1heC4gQ0wgaXMgMnMgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKKwkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJfSBlbHNlIHsJLyogTm90IHN5bmMuCSAgKi8KIAogCQkJCXRtcF9kdW5pdF9jb250cm9sX2xvdyA9IDB4M2IwMDAwMDA7CS8qIFJlYWQtRGF0YSBzYW1wbGVkIG9uIHJpc2luZyBlZGdlIG9mIENsayAqLwogCQkJCXRtcF9zZHJhbV9tb2RlID0gMHgyMjsJLyogQ0w9MiBCdXJzdGxlbmd0aCA9IDQgKi8KLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTWF4LiBDTCBpcyAyIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCi0JCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KSk7CisJCQkJZGVidWcoIk1heC4gQ0wgaXMgMiBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAorCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdyk7CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMTM2NiwxNiArMTI2MiwxNCBAQAogCQkJaWYgKHRtcCA9PSAxKSB7CS8qIFN5bmMgKi8KIAkJCQl0bXBfZHVuaXRfY29udHJvbF9sb3cgPSAweDIzMDAwMDAwOwkvKiBSZWFkLURhdGEgc2FtcGxlZCBvbiBmYWxsaW5nIGVkZ2Ugb2YgQ2xrICovCiAJCQkJdG1wX3NkcmFtX21vZGUgPSAweDUyOwkvKiBDTD0xLDUgQnVyc3RsZW5ndGggPSA0ICovCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIk1heC4gQ0wgaXMgMSw1cyBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAotCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdykpOworCQkJCWRlYnVnKCJNYXguIENMIGlzIDEsNXMgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKKwkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJfSBlbHNlIHsJLyogbm90IHN5bmMgKi8KIAogCQkJCXRtcF9kdW5pdF9jb250cm9sX2xvdyA9IDB4MWEwMDAwMDA7CS8qIFJlYWQtRGF0YSBzYW1wbGVkIG9uIHJpc2luZyBlZGdlIG9mIENsayAqLwogCQkJCXRtcF9zZHJhbV9tb2RlID0gMHg1MjsJLyogQ0w9MSw1IEJ1cnN0bGVuZ3RoID0gNCAqLwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNYXguIENMIGlzIDEsNSBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAotCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdykpOworCQkJCWRlYnVnKCJNYXguIENMIGlzIDEsNSBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAorCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdyk7CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMTM5Myw4ICsxMjg3LDcgQEAKIAkvKiBzZXQgU0RSQU0gbW9kZSBTZXRDb21tYW5kIDB4MTQxOCAqLwogCUdUX1JFR19XUklURSAoU0RSQU1fT1BFUkFUSU9OLCAweDMpOwogCXdoaWxlIChHVFJFR1JFQUQgKFNEUkFNX09QRVJBVElPTikgIT0gMCkgewotCQlEUCAocHJpbnRmCi0JCSAgICAoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpKTsKKwkJZGVidWcoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCX0KIAogCkBAIC0xNDE1LDggKzEzMDgsNyBAQAogCS8qIHNldCBTRFJBTSBtb2RlIFNldENvbW1hbmQgMHgxNDE4ICovCiAJR1RfUkVHX1dSSVRFIChTRFJBTV9PUEVSQVRJT04sIDB4Myk7CiAJd2hpbGUgKEdUUkVHUkVBRCAoU0RSQU1fT1BFUkFUSU9OKSAhPSAwKSB7Ci0JCURQIChwcmludGYKLQkJICAgICgiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTggYWZ0ZXIgRF9VTklUX0NPTlRST0xfTE9XOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKSk7CisJCWRlYnVnKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBEX1VOSVRfQ09OVFJPTF9MT1c6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCX0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE0MjgsNDEgKzEzMjAsMzkgQEAKIAl0bXAgPSAweDAyOwogCiAKLQlEUCAocHJpbnRmICgiZHJiX3NpemUgKG4qNjRNYml0KTogJWRcbiIsIGluZm8tPmRyYl9zaXplKSk7CisJZGVidWcoImRyYl9zaXplIChuKjY0TWJpdCk6ICVkXG4iLCBpbmZvLT5kcmJfc2l6ZSk7CiAJc3dpdGNoIChpbmZvLT5kcmJfc2l6ZSkgewogCWNhc2UgMToJCS8qIDY0IE1iaXQgKi8KIAljYXNlIDI6CQkvKiAxMjggTWJpdCAqLwotCQlEUCAocHJpbnRmICgiUkFNLURldmljZV9zaXplIDY0TWJpdCBvciAxMjhNYml0KVxuIikpOworCQlkZWJ1ZygiUkFNLURldmljZV9zaXplIDY0TWJpdCBvciAxMjhNYml0KVxuIik7CiAJCXRtcCB8PSAoMHgwMCA8PCA0KTsKIAkJYnJlYWs7CiAJY2FzZSA0OgkJLyogMjU2IE1iaXQgKi8KIAljYXNlIDg6CQkvKiA1MTIgTWJpdCAqLwotCQlEUCAocHJpbnRmICgiUkFNLURldmljZV9zaXplIDI1Nk1iaXQgb3IgNTEyTWJpdClcbiIpKTsKKwkJZGVidWcoIlJBTS1EZXZpY2Vfc2l6ZSAyNTZNYml0IG9yIDUxMk1iaXQpXG4iKTsKIAkJdG1wIHw9ICgweDAxIDw8IDQpOwogCQlicmVhazsKIAljYXNlIDE2OgkJLyogMSBHYml0ICovCiAJY2FzZSAzMjoJCS8qIDIgR2JpdCAqLwotCQlEUCAocHJpbnRmICgiUkFNLURldmljZV9zaXplIDFHYml0IG9yIDJHYml0KVxuIikpOworCQlkZWJ1ZygiUkFNLURldmljZV9zaXplIDFHYml0IG9yIDJHYml0KVxuIik7CiAJCXRtcCB8PSAoMHgwMiA8PCA0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRmICgiRXJyb3IgaW4gZHJhbSBzaXplIGNhbGN1bGF0aW9uXG4iKTsKLQkJRFAgKHByaW50ZiAoIkFzc3VtZTogUkFNLURldmljZV9zaXplIDFHYml0IG9yIDJHYml0KVxuIikpOworCQlkZWJ1ZygiQXNzdW1lOiBSQU0tRGV2aWNlX3NpemUgMUdiaXQgb3IgMkdiaXQpXG4iKTsKIAkJdG1wIHw9ICgweDAyIDw8IDQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBTRFJBTSBiYW5rIHBhcmFtZXRlcnMgKi8KIAkvKiB0aGUgcGFyYW0gcmVnaXN0ZXJzIGZvciBzbG90IDEgKGJhbmtzIDIrMykgYXJlIG9mZnNldCBieSAweDggKi8KLQlEUCAocHJpbnRmCi0JICAgICgic2V0dGluZyB1cCBzbG90ICVkIGNvbmZpZyB3aXRoOiAlMDhseCBcbiIsIGluZm8tPnNsb3QsIHRtcCkpOworCWRlYnVnKCJzZXR0aW5nIHVwIHNsb3QgJWQgY29uZmlnIHdpdGg6ICUwOGx4IFxuIiwgaW5mby0+c2xvdCwgdG1wKTsKIAlHVF9SRUdfV1JJVEUgKFNEUkFNX0FERFJfQ09OVFJPTCwgdG1wKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLQlEUCAocHJpbnRmCi0JICAgICgic2V0dGluZyB1cCBzZHJhbV90aW1pbmdfY29udHJvbF9sb3cgd2l0aDogJTA4eCBcbiIsCi0JICAgICAweDExNTExMjIwKSk7CisJZGVidWcoInNldHRpbmcgdXAgc2RyYW1fdGltaW5nX2NvbnRyb2xfbG93IHdpdGg6ICUwOHggXG4iLAorCSAgICAgMHgxMTUxMTIyMCk7CiAJR1RfUkVHX1dSSVRFIChTRFJBTV9USU1JTkdfQ09OVFJPTF9MT1csIDB4MTE1MTEyMjApOwogCiAKQEAgLTE0NzQsMzggKzEzNjQsMzMgQEAKIAlpZiAoaW5mby0+cmVnaXN0ZXJlZEFkZHJBbmRDb250cm9sSW5wdXRzCiAJICAgIHx8IGluZm8tPnJlZ2lzdGVyZWREUU1CaW5wdXRzKSB7CiAJCXRtcCB8PSAoMSA8PCAxNyk7Ci0JCURQIChwcmludGYKLQkJICAgICgiU1BEIHNheXM6IHJlZ2lzdGVyZWQgQWRkci4gYW5kIENvbnQuOiAlZDsgcmVnaXN0ZXJlZCBEUU1CaW5wdXRzOiAlZFxuIiwKKwkJZGVidWcoIlNQRCBzYXlzOiByZWdpc3RlcmVkIEFkZHIuIGFuZCBDb250LjogJWQ7IHJlZ2lzdGVyZWQgRFFNQmlucHV0czogJWRcbiIsCiAJCSAgICAgaW5mby0+cmVnaXN0ZXJlZEFkZHJBbmRDb250cm9sSW5wdXRzLAotCQkgICAgIGluZm8tPnJlZ2lzdGVyZWREUU1CaW5wdXRzKSk7CisJCSAgICAgaW5mby0+cmVnaXN0ZXJlZERRTUJpbnB1dHMpOwogCX0KIAogCS8qIFVzZSBidWZmZXIgMSB0byByZXR1cm4gcmVhZCBkYXRhIHRvIHRoZSBDUFUKIAkgKiBQYWdlIDQyNiBNVjY0MzYwICovCiAJdG1wIHw9ICgxIDw8IDI2KTsKLQlEUCAocHJpbnRmCi0JICAgICgiQmVmb3JlIEJ1ZmZlciBhc3NpZ25tZW50IC0gc2RyYW1fY29uZjogJTA4eFxuIiwKLQkgICAgIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSkpOwotCURQIChwcmludGYKLQkgICAgKCJBZnRlciBCdWZmZXIgYXNzaWdubWVudCAtIHNkcmFtX2NvbmY6ICUwOHhcbiIsCi0JICAgICBHVFJFR1JFQUQgKFNEUkFNX0NPTkZJRykpKTsKKwlkZWJ1ZygiQmVmb3JlIEJ1ZmZlciBhc3NpZ25tZW50IC0gc2RyYW1fY29uZjogJTA4eFxuIiwKKwkgICAgIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSk7CisJZGVidWcoIkFmdGVyIEJ1ZmZlciBhc3NpZ25tZW50IC0gc2RyYW1fY29uZjogJTA4eFxuIiwKKwkgICAgIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSk7CiAKIAkvKiBTRFJBTSB0aW1pbmcgVG9fZG86ICovCiAKIAogCXRtcCA9IEdUUkVHUkVBRCAoU0RSQU1fVElNSU5HX0NPTlRST0xfSElHSCk7Ci0JRFAgKHByaW50ZiAoIiMgc2RyYW1fdGltaW5nX2NvbnRyb2xfaGlnaCBpcyA6ICUwOGx4IFxuIiwgdG1wKSk7CisJZGVidWcoIiMgc2RyYW1fdGltaW5nX2NvbnRyb2xfaGlnaCBpcyA6ICUwOGx4IFxuIiwgdG1wKTsKIAogCS8qIFNEUkFNIGFkZHJlc3MgZGVjb2RlIHJlZ2lzdGVyICovCiAJLyogcHJvZ3JhbSB0aGlzIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgKi8KIAl0bXAgPSBHVFJFR1JFQUQgKFNEUkFNX0FERFJfQ09OVFJPTCk7Ci0JRFAgKHByaW50ZgotCSAgICAoIlNEUkFNIGFkZHJlc3MgY29udHJvbCAoYmVmb3JlOiBkZWNvZGUpOiAlMDh4ICAiLAotCSAgICAgR1RSRUdSRUFEIChTRFJBTV9BRERSX0NPTlRST0wpKSk7CisJZGVidWcoIlNEUkFNIGFkZHJlc3MgY29udHJvbCAoYmVmb3JlOiBkZWNvZGUpOiAlMDh4ICAiLAorCSAgICAgR1RSRUdSRUFEIChTRFJBTV9BRERSX0NPTlRST0wpKTsKIAlHVF9SRUdfV1JJVEUgKFNEUkFNX0FERFJfQ09OVFJPTCwgKHRtcCB8IDB4MikpOwotCURQIChwcmludGYKLQkgICAgKCJTRFJBTSBhZGRyZXNzIGNvbnRyb2wgKGFmdGVyOiBkZWNvZGUpOiAlMDh4XG4iLAotCSAgICAgR1RSRUdSRUFEIChTRFJBTV9BRERSX0NPTlRST0wpKSk7CisJZGVidWcoIlNEUkFNIGFkZHJlc3MgY29udHJvbCAoYWZ0ZXI6IGRlY29kZSk6ICUwOHhcbiIsCisJICAgICBHVFJFR1JFQUQgKFNEUkFNX0FERFJfQ09OVFJPTCkpOwogCiAJLyogc2V0IHRoZSBTRFJBTSBjb25maWd1cmF0aW9uIGZvciBlYWNoIGJhbmsgKi8KIApAQCAtMTUxNCw4ICsxMzk5LDcgQEAKIAkJaW50IGwsIGwxOwogCiAJCWkgPSBpbmZvLT5zbG90OwotCQlEUCAocHJpbnRmCi0JCSAgICAoIlxuKioqIFJ1bm5pbmcgYSBNUlMgY3ljbGUgZm9yIGJhbmsgJWQgKioqXG4iLCBpKSk7CisJCWRlYnVnKCJcbioqKiBSdW5uaW5nIGEgTVJTIGN5Y2xlIGZvciBiYW5rICVkICoqKlxuIiwgaSk7CiAKIAkJLyogbWFwIHRoZSBiYW5rICovCiAJCW1lbW9yeV9tYXBfYmFuayAoaSwgMCwgR0IgLyA0KTsKQEAgLTE1MjUsMTUgKzE0MDksMTMgQEAKIAkJR1RfUkVHX1dSSVRFIChFWFRFTkRFRF9EUkFNX01PREUsIDB4MCk7CiAJCUdUX1JFR19XUklURSAoU0RSQU1fT1BFUkFUSU9OLCAweDQpOwogCQl3aGlsZSAoR1RSRUdSRUFEIChTRFJBTV9PUEVSQVRJT04pICE9IDApIHsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpKTsKKwkJCWRlYnVnKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBTRFJBTV9NT0RFOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKTsKIAkJfQogCiAJCUdUX1JFR19XUklURSAoU0RSQU1fTU9ERSwgdG1wIHwgMHg4MCk7CiAJCUdUX1JFR19XUklURSAoU0RSQU1fT1BFUkFUSU9OLCAweDMpOwogCQl3aGlsZSAoR1RSRUdSRUFEIChTRFJBTV9PUEVSQVRJT04pICE9IDApIHsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpKTsKKwkJCWRlYnVnKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBTRFJBTV9NT0RFOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKTsKIAkJfQogCQlsMSA9IDA7CiAJCWZvciAobD0wO2w8MjAwO2wrKykKQEAgLTE1NDIsMTUgKzE0MjQsMTMgQEAKIAkJR1RfUkVHX1dSSVRFIChTRFJBTV9NT0RFLCB0bXApOwogCQlHVF9SRUdfV1JJVEUgKFNEUkFNX09QRVJBVElPTiwgMHgzKTsKIAkJd2hpbGUgKEdUUkVHUkVBRCAoU0RSQU1fT1BFUkFUSU9OKSAhPSAwKSB7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBTRFJBTV9NT0RFOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKSk7CisJCQlkZWJ1ZygiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTggYWZ0ZXIgU0RSQU1fTU9ERTogTW9kdWxlIHN0aWxsIGJ1c3kgLi4uIHBsZWFzZSB3YWl0Li4uICoqKlxuIik7CiAJCX0KIAogCQkvKiBzd2l0Y2ggYmFjayB0byBub3JtYWwgb3BlcmF0aW9uIG1vZGUgKi8KIAkJR1RfUkVHX1dSSVRFIChTRFJBTV9PUEVSQVRJT04sIDB4NSk7CiAJCXdoaWxlIChHVFJFR1JFQUQgKFNEUkFNX09QRVJBVElPTikgIT0gMCkgewotCQkJRFAgKHByaW50ZgotCQkJICAgICgiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTggYWZ0ZXIgU0RSQU1fTU9ERTogTW9kdWxlIHN0aWxsIGJ1c3kgLi4uIHBsZWFzZSB3YWl0Li4uICoqKlxuIikpOworCQkJZGVidWcoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCQl9CiAKICNlbmRpZiAvKiB0ZXN0IG9ubHkgKi8KQEAgLTE1OTcsNyArMTQ3Nyw3IEBACiAJICAgICpiPXNhdmUyOwogCiAJICAgIGlmICh2YWwgIT0gY250KSB7Ci0JCSAgICBEUChwcmludGYoIkZvdW5kICUwOHggIGF0IEFkZHJlc3MgJTA4eCAoZmFpbHVyZSlcbiIsICh1bnNpZ25lZCBpbnQpdmFsLCAodW5zaWduZWQgaW50KSBhZGRyKSk7CisJCSAgICBkZWJ1ZygiRm91bmQgJTA4eCAgYXQgQWRkcmVzcyAlMDh4IChmYWlsdXJlKVxuIiwgKHVuc2lnbmVkIGludCl2YWwsICh1bnNpZ25lZCBpbnQpIGFkZHIpOwogCQkgICAgLyogZml4IGJvdW5kYXJ5IGNvbmRpdGlvbi4uIFNUQVJUVkFMIG1lYW5zIHplcm8gKi8KIAkJICAgIGlmKGNudD09U1RBUlRWQUwvc2l6ZW9mKGxvbmcpKSBjbnQ9MDsKIAkJICAgIHJldHVybiAoY250ICogc2l6ZW9mKGxvbmcpKTsKQEAgLTE2OTAsNyArMTU3MCw2IEBACiBwaHlzX3NpemVfdAogaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7Ci0JaW50IHMwID0gMCwgczEgPSAwOwogCWludCBjaGVja2JhbmtbNF0gPSB7IFswIC4uLiAzXSA9IDAgfTsKIAl1bG9uZyByZWFsc2l6ZSwgdG90YWwsIGNoZWNrOwogCUFVWF9NRU1fRElNTV9JTkZPIGRpbW1JbmZvMTsKQEAgLTE3MDksMTAgKzE1ODgsMTAgQEAKIAkJcHJpbnRmKCJTa2lwcGluZyBTRC0gRERSUkFNIHNldHVwIGR1ZSB0byBOSFIgYml0IGJlaW5nIHNldFxuIik7CiAJfSBlbHNlIHsKIAkJLyogRElNTTAgKi8KLQkJczAgPSBjaGVja19kaW1tKDAsICZkaW1tSW5mbzEpOworCQkodm9pZCljaGVja19kaW1tKDAsICZkaW1tSW5mbzEpOwogCiAJCS8qIERJTU0xICovCi0JCXMxID0gY2hlY2tfZGltbSgxLCAmZGltbUluZm8yKTsKKwkJKHZvaWQpY2hlY2tfZGltbSgxLCAmZGltbUluZm8yKTsKIAogCQltZW1vcnlfbWFwX2JhbmsoMCwgMCwgMCk7CiAJCW1lbW9yeV9tYXBfYmFuaygxLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9jbWRfZGFzYV9zaW0uYyBiL2JvYXJkL2VzZC9kYXNhX3NpbS9jbWRfZGFzYV9zaW0uYwppbmRleCA0OTQ2NTM4Li4wMDE0ODA4IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vY21kX2Rhc2Ffc2ltLmMKKysrIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2NtZF9kYXNhX3NpbS5jCkBAIC0xMzIsOCArMTMyLDYgQEAKIAogc3RhdGljIHZvaWQgdXBkYXRlUGNpOTA1NCAodm9pZCkKIHsKLQlpbnQgdmFsOwotCiAJLyoKIAkgKiBTZXQgRUVQUk9NIHdyaXRlLXByb3RlY3QgcmVnaXN0ZXIgdG8gMAogCSAqLwpAQCAtMTQxLDQ0ICsxMzksNDQgQEAKIAkJICBpbl9iZTMyICgodm9pZCAqKShwY2k5MDU0X2lvYmFzZSArIDB4MGMpKSAmIDB4ZmZmZjAwZmYpOwogCiAJLyogTG9uZyBTZXJpYWwgRUVQUk9NIExvYWQgUmVnaXN0ZXJzLi4uICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDAwLCAweDkwNTQxMGI1KTsKLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDQsIDB4MDk4MDAwMDEpOwkvKiBvdGhlciBpbnB1dCBjb250cm9sbGVyICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDA4LCAweDI4MTQwMTAwKTsKKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4OTA1NDEwYjUpOworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHgwOTgwMDAwMSk7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDgsIDB4MjgxNDAxMDApOwogCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDBjLCAweDAwMDAwMDAwKTsJLyogTUJPWDAuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MTAsIDB4MDAwMDAwMDApOworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwYywgMHgwMDAwMDAwMCk7CS8qIE1CT1gwLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDEwLCAweDAwMDAwMDAwKTsKIAogCS8qIGxhczA6IGZwZ2EgYWNjZXNzICgweDAwMDAuMDAwMCAuLi4gMHgwMDAzLmZmZmYpICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE0LCAweGZmZmMwMDAwKTsJLyogTEFTMFJSLi4uICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE4LCAweDAwMDAwMDAxKTsJLyogTEFTMEJBICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE0LCAweGZmZmMwMDAwKTsJLyogTEFTMFJSLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE4LCAweDAwMDAwMDAxKTsJLyogTEFTMEJBICovCiAKLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MWMsIDB4MDAyMDAwMDApOwkvKiBNQVJCUi4uLiAqLwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgyMCwgMHgwMDMwMDUwMCk7CS8qIExNSVNDL0JJR0VORCAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgxYywgMHgwMDIwMDAwMCk7CS8qIE1BUkJSLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDIwLCAweDAwMzAwNTAwKTsJLyogTE1JU0MvQklHRU5EICovCiAKLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjQsIDB4MDAwMDAwMDApOwkvKiBFUk9NUlIuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjgsIDB4MDAwMDAwMDApOwkvKiBFUk9NQkEgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjQsIDB4MDAwMDAwMDApOwkvKiBFUk9NUlIuLi4gKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjgsIDB4MDAwMDAwMDApOwkvKiBFUk9NQkEgKi8KIAotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgyYywgMHg0MzAzMDAwMCk7CS8qIExCUkQwLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDJjLCAweDQzMDMwMDAwKTsJLyogTEJSRDAuLi4gKi8KIAotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzMCwgMHgwMDAwMDAwMCk7CS8qIERNUlIuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MzQsIDB4MDAwMDAwMDApOwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzOCwgMHgwMDAwMDAwMCk7CisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDMwLCAweDAwMDAwMDAwKTsJLyogRE1SUi4uLiAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzNCwgMHgwMDAwMDAwMCk7CisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDM4LCAweDAwMDAwMDAwKTsKIAotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzYywgMHgwMDAwMDAwMCk7CS8qIERNUEJBTS4uLiAqLwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0MCwgMHgwMDAwMDAwMCk7CisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDNjLCAweDAwMDAwMDAwKTsJLyogRE1QQkFNLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDQwLCAweDAwMDAwMDAwKTsKIAogCS8qIEV4dHJhIExvbmcgU2VyaWFsIEVFUFJPTSBMb2FkIFJlZ2lzdGVycy4uLiAqLwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0NCwgMHgwMTAyMTJmZSk7CS8qIFBDSVNJRC4uLiAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0NCwgMHgwMTAyMTJmZSk7CS8qIFBDSVNJRC4uLiAqLwogCiAJLyogbGFzMTogNTA1LXNyYW0gYWNjZXNzICgweDAwMDQuMDAwMCAuLi4gMHgwMDFmLmZmZmYpICovCiAJLyogT2Zmc2V0IHRvIExBUzE6IEdyb3VwIDE6IDB4MDAwNDAwMDAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgICAgICAgIEdyb3VwIDI6IDB4MDAwODAwMDAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgICAgICAgIEdyb3VwIDM6IDB4MDAwYzAwMDAgICAgICAgICAgICAgICAgICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDQ4LCAweGZmZTAwMDAwKTsJLyogTEFTMVJSICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDRjLCAweDAwMDQwMDAxKTsJLyogTEFTMUJBICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDUwLCAweDAwMDAwMjA4KTsJLyogTEJSRDEgKi8gLyogc28gd2FycyBiaXNoZXIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4NDgsIDB4ZmZlMDAwMDApOwkvKiBMQVMxUlIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4NGMsIDB4MDAwNDAwMDEpOwkvKiBMQVMxQkEgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4NTAsIDB4MDAwMDAyMDgpOwkvKiBMQlJEMSAqLyAvKiBzbyB3YXJzIGJpc2hlciAqLwogCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDU0LCAweDAwMDA0YzA2KTsJLyogSG90U3dhcC4uLiAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg1NCwgMHgwMDAwNGMwNik7CS8qIEhvdFN3YXAuLi4gKi8KIAogCXByaW50ZiAoIkZpbmlzaGVkIHdyaXRpbmcgZGVmYXVsdHMgaW50byBQTFggUENJOTA1NCBFRVBST00hXG4iKTsKIH0KQEAgLTE4Niw4ICsxODQsNiBAQAogCiBzdGF0aWMgdm9pZCBjbGVhclBjaTkwNTQgKHZvaWQpCiB7Ci0JaW50IHZhbDsKLQogCS8qCiAJICogU2V0IEVFUFJPTSB3cml0ZS1wcm90ZWN0IHJlZ2lzdGVyIHRvIDAKIAkgKi8KQEAgLTE5NSw4ICsxOTEsOCBAQAogCQkgIGluX2JlMzIgKCh2b2lkICopKHBjaTkwNTRfaW9iYXNlICsgMHgwYykpICYgMHhmZmZmMDBmZik7CiAKIAkvKiBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4ZmZmZmZmZmYpOwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHhmZmZmZmZmZik7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4ZmZmZmZmZmYpOworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHhmZmZmZmZmZik7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KIAogCXByaW50ZiAoIkZpbmlzaGVkIGNsZWFyaW5nIFBMWCBQQ0k5MDU0IEVFUFJPTSFcbiIpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BjaTQwNS9jbWRfcGNpNDA1LmMgYi9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYwppbmRleCAxM2Y5MDE5Li5mNTcwZWYzIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYworKysgYi9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYwpAQCAtNDIsNyArNDIsNiBAQAogCXVuc2lnbmVkIGludCAqcHRyID0gMDsKIAlpbnQgY291bnQgPSAwOwogCWludCBjb3VudDIgPSAwOwotCWludCBzdGF0dXM7CiAJaW50IGk7CiAJY2hhciBhZGRyWzE2XTsKIAljaGFyIHN0cltdID0gIlxcfC8tIjsKQEAgLTk5LDcgKzk4LDcgQEAKIAogCQlsb2NhbF9hcmdzWzBdID0gYXJndlswXTsKIAkJbG9jYWxfYXJnc1sxXSA9IE5VTEw7Ci0JCXN0YXR1cyA9IGRvX2Jvb3RtIChjbWR0cCwgMCwgMSwgbG9jYWxfYXJncyk7CisJCWRvX2Jvb3RtIChjbWR0cCwgMCwgMSwgbG9jYWxfYXJncyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9ldGguYyBiL2JvYXJkL2V2YjY0MjYwL2V0aC5jCmluZGV4IDE0OTJmZmMuLmMwMmE5Y2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL2V0aC5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL2V0aC5jCkBAIC0xMjcsMzEgKzEyNywzMiBAQAogI2VuZGlmCiAKICAgICBpZihpY3ImMHgxMDAwMDAwMCkgewotCXVuc2lnbmVkIGludCBwc3I7Ci0JcHNyPUdUUkVHUkVBRChFVEhFUk5FVDBfUE9SVF9TVEFUVVNfUkVHSVNURVIgKyBwLT5yZWdfYmFzZSk7CiAjaWZkZWYgREVCVUcKKwl1bnNpZ25lZCBpbnQgcHNyOworCisJcHNyPUdUUkVHUkVBRChFVEhFUk5FVDBfUE9SVF9TVEFUVVNfUkVHSVNURVIgKyBwLT5yZWdfYmFzZSk7CiAJcHJpbnRmKCJQSFkgc3RhdGUgY2hhbmdlOlxuIgogCSAgICAgICAiICBHVDolczolczolczolc1xuIiwKLQkJcHNyJjE/IjEwMCI6IiAxMCIsCi0JCXBzciY4PyIgTGluayI6Im5MaW5rIiwKLQkJcHNyJjI/IkZEIjoiSEQiLAotCQlwc3ImND8iIEZDIjoibkZDIik7CisJCXBzciAmIDEgPyAiMTAwIiA6ICIgMTAiLAorCQlwc3IgJiA4ID8gIiBMaW5rIiA6ICJuTGluayIsCisJCXBzciAmIDIgPyAiRkQiIDogIkhEIiwKKwkJcHNyICYgNCA/ICIgRkMiIDogIm5GQyIpOwogCiAjaWZkZWYgQ09ORklHX0lOVEVMX0xYVDk3WCAvKiBub24tc3RhbmRhcmQgbWlpIHJlZyAoaW50ZWwgbHh0OTcyYSkgKi8KIAl7Ci0JdW5zaWduZWQgc2hvcnQgbWlpXzExOwotCW1paV8xMT1taWlwaHlfcmVhZF9yZXQoZXRoZXJfcG9ydF9waHlfYWRkcltwLT5kZXZdLDB4MTEpOworCQl1bnNpZ25lZCBzaG9ydCBtaWlfMTE7CisJCW1paV8xMSA9IG1paXBoeV9yZWFkX3JldChldGhlcl9wb3J0X3BoeV9hZGRyW3AtPmRldl0sIDB4MTEpOwogCi0JcHJpbnRmKCIgbWlpOiVzOiVzOiVzOiVzICVzOiVzICVzXG4iLAotCQltaWlfMTEmKDE8PDE0KT8iMTAwIjoiIDEwIiwKLQkJbWlpXzExJigxPDwxMCk/IiBMaW5rIjoibkxpbmsiLAotCQltaWlfMTEmKDE8PDkpPyJGRCI6IkhEIiwKLQkJbWlpXzExJigxPDw0KT8iIEZDIjoibkZDIiwKKwkJcHJpbnRmKCIgbWlpOiVzOiVzOiVzOiVzICVzOiVzICVzXG4iLAorCQkJbWlpXzExICYgKDEgPDwgMTQpID8gIjEwMCIgOiAiIDEwIiwKKwkJCW1paV8xMSAmICgxIDw8IDEwKSA/ICIgTGluayIgOiAibkxpbmsiLAorCQkJbWlpXzExICYgKDEgPDwgOSkgPyAiRkQiIDogIkhEIiwKKwkJCW1paV8xMSAmICgxIDw8IDQpID8gIiBGQyIgOiAibkZDIiwKIAotCQltaWlfMTEmKDE8PDcpPyJBTmMiOiJBTm5jIiwKLQkJbWlpXzExJigxPDw4KT8iQU4iOiJNYW51YWwiLAotCQkiIgotCQkpOworCQkJbWlpXzExICYgKDEgPDwgNykgPyAiQU5jIiA6ICJBTm5jIiwKKwkJCW1paV8xMSAmICgxIDw8IDgpID8gIkFOIiA6ICJNYW51YWwiLAorCQkJIiIKKwkJCSk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19JTlRFTF9MWFQ5N1ggKi8KICNlbmRpZiAvKiBERUJVRyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvZXZiNjQyNjAuYyBiL2JvYXJkL2V2YjY0MjYwL2V2YjY0MjYwLmMKaW5kZXggODA3NTZhNS4uMzkzMzIwYSAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvZXZiNjQyNjAuYworKysgYi9ib2FyZC9ldmI2NDI2MC9ldmI2NDI2MC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8Z2FsaWxlby9ndDY0MjYwUi5oPgogI2luY2x1ZGUgPG5ldC5oPgogI2luY2x1ZGUgPG5ldGRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJldGguaCIKQEAgLTM2MCw3ICszNjEsNyBAQAogewogI2lmICFkZWZpbmVkKENPTkZJR19aVU1BX1YyKSAmJiAhZGVmaW5lZChDT05GSUdfUDNHNCkKIAl2b2xhdGlsZSBpbnQgKmFkZHIgPSBOVUxMOwotCWludCBkdW1teTsKKwlfX21heWJlX3VudXNlZCBpbnQgZHVtbXk7CiAKIAlpZiAobW9kZSA9PSAxKSB7CiAJCXN3aXRjaCAobGVkKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9pMmMuYyBiL2JvYXJkL2V2YjY0MjYwL2kyYy5jCmluZGV4IDg4ZDBkYWMuLjgxMTlmY2UgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL2kyYy5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL2kyYy5jCkBAIC0yMCwyOSArMjAsMjUgQEAKIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgbiwgbSwgZnJlcSwgbWFyZ2luLCBwb3dlcjsKLQl1bnNpZ25lZCBpbnQgYWN0dWFsRnJlcSwgYWN0dWFsTj0wLCBhY3R1YWxNPTA7CisJdW5zaWduZWQgaW50IGFjdHVhbG4gPSAwLCBhY3R1YWxtID0gMDsKIAl1bnNpZ25lZCBpbnQgY29udHJvbCwgc3RhdHVzOwotCXVuc2lnbmVkIGludCBtaW5NYXJnaW4gPSAweGZmZmZmZmZmOworCXVuc2lnbmVkIGludCBtaW5tYXJnaW4gPSAweGZmZmZmZmZmOwogCXVuc2lnbmVkIGludCB0Y2xrID0gMTI1MDAwMDAwOwogCiAJRFAocHV0cygiaTJjX2luaXRcbiIpKTsKIAotCWZvcihuID0gMCA7IG4gPCA4IDsgbisrKQotCXsKLQkJZm9yKG0gPSAwIDsgbSA8IDE2IDsgbSsrKQotCQl7Ci0JCQlwb3dlciA9IDI8PG47IC8qIHBvd2VyID0gMl4obisxKSAqLwotCQkJZnJlcSA9IHRjbGsvKDEwKihtKzEpKnBvd2VyKTsKKwlmb3IgKG4gPSAwIDsgbiA8IDggOyBuKyspIHsKKwkJZm9yIChtID0gMCA7IG0gPCAxNiA7IG0rKykgeworCQkJcG93ZXIgPSAyIDw8IG47IC8qIHBvd2VyID0gMl4obisxKSAqLworCQkJZnJlcSA9IHRjbGsgLyAoMTAgKiAobSArIDEpICogcG93ZXIpOwogCQkJaWYgKHNwZWVkID4gZnJlcSkKIAkJCQltYXJnaW4gPSBzcGVlZCAtIGZyZXE7CiAJCQllbHNlCiAJCQkJbWFyZ2luID0gZnJlcSAtIHNwZWVkOwotCQkJaWYobWFyZ2luIDwgbWluTWFyZ2luKQotCQkJewotCQkJCW1pbk1hcmdpbiAgID0gbWFyZ2luOwotCQkJCWFjdHVhbEZyZXEgID0gZnJlcTsKLQkJCQlhY3R1YWxOCSAgICA9IG47Ci0JCQkJYWN0dWFsTQkgICAgPSBtOworCQkJaWYgKG1hcmdpbiA8IG1pbm1hcmdpbikgeworCQkJCW1pbm1hcmdpbiAgID0gbWFyZ2luOworCQkJCWFjdHVhbG4JICAgID0gbjsKKwkJCQlhY3R1YWxtCSAgICA9IG07CiAJCQl9CiAJCX0KIAl9CkBAIC01OSw3ICs1NSw3IEBACiAKIAlEUChwdXRzKCJzZXQgYmF1ZHJhdGVcbiIpKTsKIAotCUdUX1JFR19XUklURShJMkNfU1RBVFVTX0JBVURFX1JBVEUsIChhY3R1YWxNIDw8IDMpIHwgYWN0dWFsTik7CisJR1RfUkVHX1dSSVRFKEkyQ19TVEFUVVNfQkFVREVfUkFURSwgKGFjdHVhbG0gPDwgMykgfCBhY3R1YWxuKTsKIAlHVF9SRUdfV1JJVEUoSTJDX0NPTlRST0wsICgweDEgPDwgMikgfCAoMHgxIDw8IDYpKTsKIAogCXVkZWxheShJMkNfREVMQVkgKiAxMCk7CkBAIC05MSwxMyArODcsMTMgQEAKIAkJdWRlbGF5KEkyQ19ERUxBWSk7CiAJCWlmIChjb3VudCA+IDIwKSB7CiAJCQlHVF9SRUdfV1JJVEUoSTJDX0NPTlRST0wsICgweDEgPDwgNCkpOyAvKnN0b3AqLwotCQkJcmV0dXJuIChzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCQlHVF9SRUdfUkVBRChJMkNfU1RBVFVTX0JBVURFX1JBVEUsICZzdGF0dXMpOwogCQljb3VudCsrOwogCX0KIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1Y2hhcgpAQCAtMTEwLDkgKzEwNiw4IEBACiAKIAkvKiBPdXRwdXQgc2xhdmUgYWRkcmVzcyAqLwogCi0JaWYgKHRlbl9iaXQpIHsKKwlpZiAodGVuX2JpdCkKIAkJYml0cyA9IDEwOwotCX0KIAogCWRhdGEgPSAoZGV2X2FkZHIgPDwgMSk7CiAJLyogc2V0IHRoZSByZWFkIGJpdCAqLwpAQCAtMTI5LDcgKzEyNCw3IEBACiAJCXVkZWxheShJMkNfREVMQVkpOwogCQlpZiAoY291bnQgPiAyMCkgewogCQkJR1RfUkVHX1dSSVRFKEkyQ19DT05UUk9MLCAoMHgxIDw8IDQpKTsgLypzdG9wKi8KLQkJCXJldHVybihzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCQlHVF9SRUdfUkVBRChJMkNfU1RBVFVTX0JBVURFX1JBVEUsICZzdGF0dXMpOwogCQljb3VudCsrOwpAQCAtMTM3LDE0ICsxMzIsMTQgQEAKIAogCWlmIChiaXRzID09IDEwKSB7CiAJCXByaW50ZigiMTAgYml0IEkyQyBhZGRyZXNzaW5nIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOwotCQlyZXR1cm4gKDB4ZmYpOworCQlyZXR1cm4gMHhmZjsKIAl9CiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdWNoYXIKLWkyY19nZXRfZGF0YSh1Y2hhciogcmV0dXJuX2RhdGEsIGludCBsZW4pIHsKK2kyY19nZXRfZGF0YSh1Y2hhciAqcmV0dXJuX2RhdGEsIGludCBsZW4pIHsKIAogCXVuc2lnbmVkIGludCBkYXRhLCBzdGF0dXMgPSAwOwogCWludCBjb3VudCA9IDA7CkBAIC0xNjMsNyArMTU4LDcgQEAKIAkJY291bnQrKzsKIAkJd2hpbGUgKChzdGF0dXMgJiAweGZmKSAhPSAweDUwKSB7CiAJCQl1ZGVsYXkoSTJDX0RFTEFZKTsKLQkJCWlmKGNvdW50ID4gMikgeworCQkJaWYgKGNvdW50ID4gMikgewogCQkJCUdUX1JFR19XUklURShJMkNfQ09OVFJPTCwgKDB4MSA8PCA0KSk7IC8qc3RvcCovCiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC0xNzgsMTYgKzE3MywxNiBAQAogCVJFU0VUX1JFR19CSVRTKEkyQ19DT05UUk9MLCBCSVQyfEJJVDMpOwogCXdoaWxlICgoc3RhdHVzICYgMHhmZikgIT0gMHg1OCkgewogCQl1ZGVsYXkoSTJDX0RFTEFZKTsKLQkJaWYoY291bnQgPiAyMDApIHsKKwkJaWYgKGNvdW50ID4gMjAwKSB7CiAJCQlHVF9SRUdfV1JJVEUoSTJDX0NPTlRST0wsICgweDEgPDwgNCkpOyAvKnN0b3AqLwotCQkJcmV0dXJuIChzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCQlHVF9SRUdfUkVBRChJMkNfU1RBVFVTX0JBVURFX1JBVEUsICZzdGF0dXMpOwogCQljb3VudCsrOwogCX0KIAlHVF9SRUdfV1JJVEUoSTJDX0NPTlRST0wsICgweDEgPDwgNCkpOyAvKiBzdG9wICovCiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdWNoYXIKQEAgLTIxMyw5ICsyMDgsOSBAQAogCQljb3VudCsrOwogCQl3aGlsZSAoKHN0YXR1cyAmIDB4ZmYpICE9IDB4MjgpIHsKIAkJCXVkZWxheShJMkNfREVMQVkpOwotCQkJaWYoY291bnQgPiAyMCkgeworCQkJaWYgKGNvdW50ID4gMjApIHsKIAkJCQlHVF9SRUdfV1JJVEUoSTJDX0NPTlRST0wsICgweDEgPDwgNCkpOyAvKnN0b3AqLwotCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCQlyZXR1cm4gc3RhdHVzOwogCQkJfQogCQkJR1RfUkVHX1JFQUQoSTJDX1NUQVRVU19CQVVERV9SQVRFLCAmc3RhdHVzKTsKIAkJCWNvdW50Kys7CkBAIC0yMjcsNyArMjIyLDcgQEAKIAogCXVkZWxheShJMkNfREVMQVkgKiAxMCk7CiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdWNoYXIKQEAgLTI1NCwxOSArMjQ5LDE5IEBACiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogdWNoYXIKLWkyY19yZWFkKHVjaGFyIGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1Y2hhciogZGF0YSwKK2kyY19yZWFkKHVjaGFyIGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1Y2hhciAqZGF0YSwKIAkgaW50IHRlbl9iaXQpCiB7CiAJdWNoYXIgc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBpbnQgaTJjRnJlcSA9IDQwMDAwMDsKKwl1bnNpZ25lZCBpbnQgaTJjZnJlcSA9IDQwMDAwMDsKIAogCURQKHB1dHMoImkyY19yZWFkXG4iKSk7CiAKLQlpMmNfaW5pdChpMmNGcmVxLDApOworCWkyY19pbml0KGkyY2ZyZXEsIDApOwogCiAJc3RhdHVzID0gaTJjX3N0YXJ0KCk7CiAKQEAgLTI4NSw3ICsyODAsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCWkyY19pbml0KGkyY0ZyZXEsMCk7CisJaTJjX2luaXQoaTJjZnJlcSwgMCk7CiAKIAlzdGF0dXMgPSBpMmNfc3RhcnQoKTsKIAlpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9zZHJhbV9pbml0LmMgYi9ib2FyZC9ldmI2NDI2MC9zZHJhbV9pbml0LmMKaW5kZXggZTJmMDc2OS4uNmY3MjVmNiAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvc2RyYW1faW5pdC5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL3NkcmFtX2luaXQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGdhbGlsZW8vcGNpLmg+CiAjaW5jbHVkZSA8Z2FsaWxlby9ndDY0MjYwUi5oPgogI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpbmNsdWRlICJldGguaCIKICNpbmNsdWRlICJtcHNjLmgiCkBAIC0zMzAsNyArMzMxLDggQEAKIHN0YXRpYyBpbnQgc2V0dXBfc2RyYW1fY29tbW9uIChzZHJhbV9pbmZvX3QgaW5mb1syXSkKIHsKIAl1bG9uZyB0bXA7Ci0JaW50IHRwYXIgPSAyLCB0cmFzX2Nsb2NrcyA9IDUsIHJlZ2lzdGVyZWQgPSAxLCBlY2MgPSAyOworCWludCB0cGFyID0gMiwgdHJhc19jbG9ja3MgPSA1LCByZWdpc3RlcmVkID0gMTsKKwlfX21heWJlX3VudXNlZCBpbnQgZWNjID0gMjsKIAogCWlmICghaW5mb1swXS5iYW5rcyAmJiAhaW5mb1sxXS5iYW5rcykKIAkJcmV0dXJuIDA7CkBAIC00MDcsOCArNDA5LDkgQEAKIC8qIHNldHMgdXAgdGhlIEdUIHByb3Blcmx5IHdpdGggaW5mb3JtYXRpb24gcGFzc2VkIGluICovCiBzdGF0aWMgaW50IHNldHVwX3NkcmFtIChzZHJhbV9pbmZvX3QgKiBpbmZvKQogewotCXVsb25nIHRtcCwgY2hlY2s7CisJdWxvbmcgdG1wOwogCXVsb25nICphZGRyID0gMDsKKwlfX21heWJlX3VudXNlZCB1bG9uZyBjaGVjazsKIAlpbnQgaTsKIAogCS8qIHNhbml0eSBjaGVja2luZyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvenVtYV9wYmJfbWJveC5jIGIvYm9hcmQvZXZiNjQyNjAvenVtYV9wYmJfbWJveC5jCmluZGV4IDhlMzgxMDIuLjYyMWM2NGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL3p1bWFfcGJiX21ib3guYworKysgYi9ib2FyZC9ldmI2NDI2MC96dW1hX3BiYl9tYm94LmMKQEAgLTEyLDU3ICsxMiw2MiBAQAogCiBzdGF0aWMgaW50IHp1bWFfbWJveF93cml0ZShzdHJ1Y3QgX3p1bWFfbWJveF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGRhdGEpCiB7Ci0gIHVuc2lnbmVkIGludCBzdGF0dXMsIGNvdW50ID0gMCwgaTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjb3VudCA9IDAsIGk7CiAKLSAgc3RhdHVzID0gKHZvbGF0aWxlIGludClsZTMyX3RvX2NwdShkZXYtPnNpcC0+bWJveF9zdGF0dXMpOworCXN0YXR1cyA9ICh2b2xhdGlsZSBpbnQpIGxlMzJfdG9fY3B1KGRldi0+c2lwLT5tYm94X3N0YXR1cyk7CiAKLSAgd2hpbGUoKHN0YXR1cyAmIE9VVF9QRU5ESU5HKSAmJiBjb3VudCA8IDEwMDApIHsKLSAgICBjb3VudCsrOwotICAgIGZvcihpPTA7aTwxMDAwO2krKyk7Ci0gICAgc3RhdHVzID0gKHZvbGF0aWxlIGludClsZTMyX3RvX2NwdShkZXYtPnNpcC0+bWJveF9zdGF0dXMpOwotICB9Ci0gIGlmKGNvdW50IDwgMTAwMCkgewotICAgIC8qIGlmIFNFVCBpdCBtZWFucyBtc2cgcGVuZGluZyAqLwotICAgIC8qIHByaW50ZigibWJveCByZWFsIHdyaXRlICUwOHhcbiIsZGF0YSk7ICovCi0gICAgZGV2LT5zaXAtPm1ib3hfb3V0ID0gY3B1X3RvX2xlMzIoZGF0YSk7Ci0gICAgcmV0dXJuIDQ7Ci0gIH0KKwl3aGlsZSAoKHN0YXR1cyAmIE9VVF9QRU5ESU5HKSAmJiBjb3VudCA8IDEwMDApIHsKKwkJY291bnQrKzsKKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKwkJCTsKKwkJc3RhdHVzID0gKHZvbGF0aWxlIGludCkgbGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfc3RhdHVzKTsKKwl9CisJaWYgKGNvdW50IDwgMTAwMCkgeworCQkvKiBpZiBTRVQgaXQgbWVhbnMgbXNnIHBlbmRpbmcgKi8KKwkJLyogcHJpbnRmKCJtYm94IHJlYWwgd3JpdGUgJTA4eFxuIixkYXRhKTsgKi8KKwkJZGV2LT5zaXAtPm1ib3hfb3V0ID0gY3B1X3RvX2xlMzIoZGF0YSk7CisJCXJldHVybiA0OworCX0KIAotICBwcmludGYoIm1ib3ggdHggdGltZW91dFxuIik7Ci0gIHJldHVybiAwOworCXByaW50ZigibWJveCB0eCB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB6dW1hX21ib3hfcmVhZChzdHJ1Y3QgX3p1bWFfbWJveF9kZXYgKmRldiwgdW5zaWduZWQgaW50ICpkYXRhKQogewotICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IHN0YXR1cywgY291bnQgPSAwLCBpOwogCi0gIHN0YXR1cyA9ICh2b2xhdGlsZSBpbnQpbGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfc3RhdHVzKTsKKwlzdGF0dXMgPSAodm9sYXRpbGUgaW50KSBsZTMyX3RvX2NwdShkZXYtPnNpcC0+bWJveF9zdGF0dXMpOwogCi0gIHdoaWxlKCEoc3RhdHVzICYgSU5fVkFMSUQpICYmIGNvdW50IDwgMTAwMCkgewotICAgIGNvdW50Kys7Ci0gICAgZm9yKGk9MDtpPDEwMDA7aSsrKTsKLSAgICBzdGF0dXMgPSAodm9sYXRpbGUgaW50KWxlMzJfdG9fY3B1KGRldi0+c2lwLT5tYm94X3N0YXR1cyk7Ci0gIH0KLSAgaWYoY291bnQgPCAxMDAwKSB7Ci0gICAgLyogaWYgU0VUIGl0IG1lYW5zIG1zZyBwZW5kaW5nICovCi0gICAgKmRhdGE9bGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfaW4pOwotICAgIC8qcHJpbnRmKCJtYm94IHJlYWwgcmVhZCAlMDh4XG4iLCAqZGF0YSk7ICovCi0gICAgcmV0dXJuIDQ7Ci0gIH0KLSAgcHJpbnRmKCJtYm94IHJ4IHRpbWVvdXRcbiIpOwotICByZXR1cm4gMDsKKwl3aGlsZSAoIShzdGF0dXMgJiBJTl9WQUxJRCkgJiYgY291bnQgPCAxMDAwKSB7CisJCWNvdW50Kys7CisJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisJCQk7CisJCXN0YXR1cyA9ICh2b2xhdGlsZSBpbnQpIGxlMzJfdG9fY3B1KGRldi0+c2lwLT5tYm94X3N0YXR1cyk7CisJfQorCWlmIChjb3VudCA8IDEwMDApIHsKKwkJLyogaWYgU0VUIGl0IG1lYW5zIG1zZyBwZW5kaW5nICovCisJCSpkYXRhID0gbGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfaW4pOworCQkvKnByaW50ZigibWJveCByZWFsIHJlYWQgJTA4eFxuIiwgKmRhdGEpOyAqLworCQlyZXR1cm4gNDsKKwl9CisJcHJpbnRmKCJtYm94IHJ4IHRpbWVvdXRcbiIpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHp1bWFfbWJveF9kb19vbmVfbWFpbGJveCh1bnNpZ25lZCBpbnQgb3V0LCB1bnNpZ25lZCBpbnQgKmluKQogewotICBpbnQgcmV0OwotICByZXQ9enVtYV9tYm94X3dyaXRlKCZ6dW1hX21ib3hfZGV2LG91dCk7Ci0gIC8qcHJpbnRmKCJ3cml0ZSAweCUwOHggKCVkIGJ5dGVzKVxuIiwgb3V0LCByZXQpOyAqLwotICBpZihyZXQhPTQpIHJldHVybiAtMTsKLSAgcmV0PXp1bWFfbWJveF9yZWFkKCZ6dW1hX21ib3hfZGV2LGluKTsKLSAgLypwcmludGYoInJlYWQgMHglMDh4ICglZCBieXRlcylcbiIsICppbiwgcmV0KTsgKi8KLSAgaWYocmV0IT00KSByZXR1cm4gLTE7Ci0gIHJldHVybiAwOworCWludCByZXQ7CisKKwlyZXQgPSB6dW1hX21ib3hfd3JpdGUoJnp1bWFfbWJveF9kZXYsIG91dCk7CisJLypwcmludGYoIndyaXRlIDB4JTA4eCAoJWQgYnl0ZXMpXG4iLCBvdXQsIHJldCk7ICovCisJaWYgKHJldCAhPSA0KQorCQlyZXR1cm4gLTE7CisJcmV0ID0genVtYV9tYm94X3JlYWQoJnp1bWFfbWJveF9kZXYsIGluKTsKKwkvKnByaW50ZigicmVhZCAweCUwOHggKCVkIGJ5dGVzKVxuIiwgKmluLCByZXQpOyAqLworCWlmIChyZXQgIT0gNCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOwogfQogCiAKQEAgLTcwLDgxICs3NSw5MyBAQAogCiBzdGF0aWMgaW50IHp1bWFfbWJveF9kb19hbGxfbWFpbGJveCh2b2lkKQogewotICB1bnNpZ25lZCBpbnQgZGF0YV9pbjsKLSAgdW5zaWduZWQgc2hvcnQgc2RhdGFfaW47CisJdW5zaWduZWQgaW50IGRhdGFfaW47CisJdW5zaWduZWQgc2hvcnQgc2RhdGFfaW47CiAKLSAgUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX1NUQVJULCAmZGF0YV9pbikpOworCVJFVF9JRl9GQUlMRUQoenVtYV9tYm94X2RvX29uZV9tYWlsYm94KFpVTUFfTUJPWE1TR19TVEFSVCwgJmRhdGFfaW4pKTsKIAotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfTUFDTCwgJmRhdGFfaW4pKTsKLSAgbWVtY3B5KHp1bWFfYWNjX21hYysyLCZkYXRhX2luLDQpOwotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfTUFDSCwgJmRhdGFfaW4pKTsKLSAgc2RhdGFfaW49ZGF0YV9pbiYweGZmZmY7Ci0gIG1lbWNweSh6dW1hX2FjY19tYWMsJnNkYXRhX2luLDIpOworCVJFVF9JRl9GQUlMRUQoenVtYV9tYm94X2RvX29uZV9tYWlsYm94KFpVTUFfTUJPWE1TR19NQUNMLCAmZGF0YV9pbikpOworCW1lbWNweSh6dW1hX2FjY19tYWMgKyAyLCAmZGF0YV9pbiwgNCk7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX01BQ0gsICZkYXRhX2luKSk7CisJc2RhdGFfaW4gPSBkYXRhX2luICYgMHhmZmZmOworCW1lbWNweSh6dW1hX2FjY19tYWMsICZzZGF0YV9pbiwgMik7CiAKLSAgUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0lQLCAmZGF0YV9pbikpOwotICB6dW1hX2lwPWRhdGFfaW47CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0lQLCAmZGF0YV9pbikpOworCXp1bWFfaXAgPSBkYXRhX2luOwogCi0gIFJFVF9JRl9GQUlMRUQoenVtYV9tYm94X2RvX29uZV9tYWlsYm94KFpVTUFfTUJPWE1TR19TTE9ULCAmZGF0YV9pbikpOwotICB6dW1hX3Nsb3RfYmFjPWRhdGFfaW4+PjM7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX1NMT1QsICZkYXRhX2luKSk7CisJenVtYV9zbG90X2JhYyA9IGRhdGFfaW4gPj4gMzsKIAotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfQkFVRCwgJmRhdGFfaW4pKTsKLSAgenVtYV9jb25zb2xlX2JhdWQgPSBkYXRhX2luICYgMHhmZmZmOwotICB6dW1hX2RlYnVnX2JhdWQgICA9IGRhdGFfaW4gPj4gMTY7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0JBVUQsICZkYXRhX2luKSk7CisJenVtYV9jb25zb2xlX2JhdWQgPSBkYXRhX2luICYgMHhmZmZmOworCXp1bWFfZGVidWdfYmF1ZCA9IGRhdGFfaW4gPj4gMTY7CiAKLSAgUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0VOR19QUlZfTUFDTCwgJmRhdGFfaW4pKTsKLSAgbWVtY3B5KHp1bWFfcHJ2X21hYysyLCZkYXRhX2luLDQpOwotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfRU5HX1BSVl9NQUNILCAmZGF0YV9pbikpOwotICBzZGF0YV9pbj1kYXRhX2luJjB4ZmZmZjsKLSAgbWVtY3B5KHp1bWFfcHJ2X21hYywmc2RhdGFfaW4sMik7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3gKKwkJICAgICAgKFpVTUFfTUJPWE1TR19FTkdfUFJWX01BQ0wsICZkYXRhX2luKSk7CisJbWVtY3B5KHp1bWFfcHJ2X21hYyArIDIsICZkYXRhX2luLCA0KTsKKwlSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveAorCQkgICAgICAoWlVNQV9NQk9YTVNHX0VOR19QUlZfTUFDSCwgJmRhdGFfaW4pKTsKKwlzZGF0YV9pbiA9IGRhdGFfaW4gJiAweGZmZmY7CisJbWVtY3B5KHp1bWFfcHJ2X21hYywgJnNkYXRhX2luLCAyKTsKIAotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfRE9ORSwgJmRhdGFfaW4pKTsKKwlSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfRE9ORSwgJmRhdGFfaW4pKTsKIAotICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgdm9pZAotenVtYV9tYm94X2R1bXAodm9pZCkKK3N0YXRpYyB2b2lkIHp1bWFfbWJveF9kdW1wKHZvaWQpCiB7Ci0gIHByaW50ZigiQUNDIE1BQz0lMDR4JTA4eFxuIiwqKHVuc2lnbmVkIHNob3J0ICopKCZ6dW1hX2FjY19tYWMpLCoodW5zaWduZWQgaW50ICopKChjaGFyICopJnp1bWFfYWNjX21hYysyKSk7Ci0gIHByaW50ZigiUFJWIE1BQz0lMDR4JTA4eFxuIiwqKHVuc2lnbmVkIHNob3J0ICopKCZ6dW1hX3Bydl9tYWMpLCoodW5zaWduZWQgaW50ICopKChjaGFyICopJnp1bWFfcHJ2X21hYysyKSk7Ci0gIHByaW50Zigic2xvdDpiYWM9JWQ6JWRcbiIsKHp1bWFfc2xvdF9iYWM+PjIpJjB4ZiwgenVtYV9zbG90X2JhYyAmIDB4Myk7Ci0gIHByaW50ZigiQkFVRDE9JWQgQkFVRDI9JWRcbiIsenVtYV9jb25zb2xlX2JhdWQsenVtYV9kZWJ1Z19iYXVkKTsKKwl1bnNpZ25lZCBzaG9ydCBzOworCXVuc2lnbmVkIGludCBpOworCisJbWVtY3B5KCZzLCAmenVtYV9hY2NfbWFjLCAgICBzaXplb2YocykpOworCW1lbWNweSgmaSwgJnp1bWFfYWNjX21hY1syXSwgc2l6ZW9mKGkpKTsKKwlwcmludGYoIkFDQyBNQUM9JTA0eCUwOHhcbiIsIHMsIGkpOworCisJbWVtY3B5KCZzLCAmenVtYV9wcnZfbWFjLCAgICBzaXplb2YocykpOworCW1lbWNweSgmcywgJnp1bWFfcHJ2X21hY1syXSwgc2l6ZW9mKGkpKTsKKwlwcmludGYoIlBSViBNQUM9JTA0eCUwOHhcbiIsIHMsIGkpOworCisJcHJpbnRmKCJzbG90OmJhYz0lZDolZFxuIiwKKwkJKHp1bWFfc2xvdF9iYWMgPj4gMikgJiAweGYsCisJCXp1bWFfc2xvdF9iYWMgJiAweDMpOworCisJcHJpbnRmKCJCQVVEMT0lZCBCQVVEMj0lZFxuIiwKKwkJenVtYV9jb25zb2xlX2JhdWQsCisJCXp1bWFfZGVidWdfYmF1ZCk7CiB9CiAKIAotc3RhdGljIHZvaWQKLXp1bWFfbWJveF9zZXRlbnYodm9pZCkKK3N0YXRpYyB2b2lkIHp1bWFfbWJveF9zZXRlbnYodm9pZCkKIHsKLSAgY2hhciAqZGF0YSwgYnVmWzMyXTsKLSAgdW5zaWduZWQgY2hhciBzYXZlID0gMDsKKwljaGFyICpkYXRhLCBidWZbMzJdOworCXVuc2lnbmVkIGNoYXIgc2F2ZSA9IDA7CiAKLSAgZGF0YSA9IGdldGVudigiYmF1ZHJhdGUiKTsKKwlkYXRhID0gZ2V0ZW52KCJiYXVkcmF0ZSIpOwogCi0gIGlmKCFkYXRhIHx8ICh6dW1hX2NvbnNvbGVfYmF1ZCAhPSBzaW1wbGVfc3RydG91bChkYXRhLCBOVUxMLCAxMCkpKSB7Ci0gICAgc3ByaW50ZihidWYsICIlNmQiLCB6dW1hX2NvbnNvbGVfYmF1ZCk7Ci0gICAgc2V0ZW52KCJiYXVkcmF0ZSIsIGJ1Zik7Ci0gICAgc2F2ZT0xOwotICAgIHByaW50ZigiYmF1ZHJhdGUgZG9lc24ndCBtYXRjaCBmcm9tIG1ib3hcbiIpOwotICB9CisJaWYgKCFkYXRhIHx8ICh6dW1hX2NvbnNvbGVfYmF1ZCAhPSBzaW1wbGVfc3RydG91bChkYXRhLCBOVUxMLCAxMCkpKSB7CisJCXNwcmludGYoYnVmLCAiJTZkIiwgenVtYV9jb25zb2xlX2JhdWQpOworCQlzZXRlbnYoImJhdWRyYXRlIiwgYnVmKTsKKwkJc2F2ZSA9IDE7CisJCXByaW50ZigiYmF1ZHJhdGUgZG9lc24ndCBtYXRjaCBmcm9tIG1ib3hcbiIpOworCX0KIAotICBpcF90b19zdHJpbmcoenVtYV9pcCwgYnVmKTsKLSAgc2V0ZW52KCJpcGFkZHIiLCBidWYpOworCWlwX3RvX3N0cmluZyh6dW1hX2lwLCBidWYpOworCXNldGVudigiaXBhZGRyIiwgYnVmKTsKIAotICBzcHJpbnRmKGJ1ZiwiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAotCSAgenVtYV9wcnZfbWFjWzBdLAotCSAgenVtYV9wcnZfbWFjWzFdLAotCSAgenVtYV9wcnZfbWFjWzJdLAotCSAgenVtYV9wcnZfbWFjWzNdLAotCSAgenVtYV9wcnZfbWFjWzRdLAotCSAgenVtYV9wcnZfbWFjWzVdKTsKLSAgc2V0ZW52KCJldGhhZGRyIiwgYnVmKTsKKwlzcHJpbnRmKGJ1ZiwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJenVtYV9wcnZfbWFjWzBdLAorCQl6dW1hX3Bydl9tYWNbMV0sCisJCXp1bWFfcHJ2X21hY1syXSwKKwkJenVtYV9wcnZfbWFjWzNdLCB6dW1hX3Bydl9tYWNbNF0sIHp1bWFfcHJ2X21hY1s1XSk7CisJc2V0ZW52KCJldGhhZGRyIiwgYnVmKTsKIAotICBzcHJpbnRmKGJ1ZiwiJTAyeCIsenVtYV9zbG90X2JhYyk7Ci0gIHNldGVudigiYmFjc2xvdCIsIGJ1Zik7CisJc3ByaW50ZihidWYsICIlMDJ4IiwgenVtYV9zbG90X2JhYyk7CisJc2V0ZW52KCJiYWNzbG90IiwgYnVmKTsKIAotICBpZihzYXZlKQotICAgIHNhdmVlbnYoKTsKKwlpZiAoc2F2ZSkKKwkJc2F2ZWVudigpOwogfQogCiAvKioKQEAgLTE1MywzNyArMTcwLDM5IEBACiAKIGludCB6dW1hX21ib3hfaW5pdCh2b2lkKQogewotICB1bnNpZ25lZCBpbnQgaW9iYXNlOwotICBtZW1zZXQoJnp1bWFfbWJveF9kZXYsIDAsIHNpemVvZihzdHJ1Y3QgX3p1bWFfbWJveF9kZXYpKTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlOwogCi0gIHp1bWFfbWJveF9kZXYuZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFZFTkRPUl9JRF9aVU1BLCBERVZJQ0VfSURfWlVNQV9QQkIsIDApOworCW1lbXNldCgmenVtYV9tYm94X2RldiwgMCwgc2l6ZW9mKHN0cnVjdCBfenVtYV9tYm94X2RldikpOwogCi0gIGlmKHp1bWFfbWJveF9kZXYuZGV2ID09IC0xKSB7Ci0gICAgcHJpbnRmKCJubyB6dW1hIHBiYlxuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9CisJenVtYV9tYm94X2Rldi5kZXYgPQorCQlwY2lfZmluZF9kZXZpY2UoVkVORE9SX0lEX1pVTUEsIERFVklDRV9JRF9aVU1BX1BCQiwgMCk7CiAKLSAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHp1bWFfbWJveF9kZXYuZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZpb2Jhc2UpOworCWlmICh6dW1hX21ib3hfZGV2LmRldiA9PSAtMSkgeworCQlwcmludGYoIm5vIHp1bWEgcGJiXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICBpb2Jhc2UgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoenVtYV9tYm94X2Rldi5kZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgJmlvYmFzZSk7CiAKLSAgenVtYV9tYm94X2Rldi5zaXAgPSAoUEJCX0RNQV9SRUdfTUFQICopaW9iYXNlOworCWlvYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwogCi0gIHp1bWFfbWJveF9kZXYuc2lwLT5pbnRfbWFzay53b3JkPTA7CisJenVtYV9tYm94X2Rldi5zaXAgPSAoUEJCX0RNQV9SRUdfTUFQICopIGlvYmFzZTsKIAotICBwcmludGYoInBiYiBAICVwIHYlZC4lZCwgdGltZXN0YW1wICUwOHhcbiIsIHp1bWFfbWJveF9kZXYuc2lwLAotCSB6dW1hX21ib3hfZGV2LnNpcC0+dmVyc2lvbi5wY2lfYml0cy5yZXZfbWFqb3IsCi0JIHp1bWFfbWJveF9kZXYuc2lwLT52ZXJzaW9uLnBjaV9iaXRzLnJldl9taW5vciwKLQkgenVtYV9tYm94X2Rldi5zaXAtPnRpbWVzdGFtcCk7CisJenVtYV9tYm94X2Rldi5zaXAtPmludF9tYXNrLndvcmQgPSAwOwogCi0gIGlmICh6dW1hX21ib3hfZG9fYWxsX21haWxib3goKSA9PSAtMSkgewotCSAgcHJpbnRmKCJtYWlsYm94IGZhaWxlZC4uIG5vIEFDQz9cbiIpOwotCSAgcmV0dXJuIC0xOwotICB9CisJcHJpbnRmKCJwYmIgQCAlcCB2JWQuJWQsIHRpbWVzdGFtcCAlMDh4XG4iLCB6dW1hX21ib3hfZGV2LnNpcCwKKwkgICAgICAgenVtYV9tYm94X2Rldi5zaXAtPnZlcnNpb24ucGNpX2JpdHMucmV2X21ham9yLAorCSAgICAgICB6dW1hX21ib3hfZGV2LnNpcC0+dmVyc2lvbi5wY2lfYml0cy5yZXZfbWlub3IsCisJICAgICAgIHp1bWFfbWJveF9kZXYuc2lwLT50aW1lc3RhbXApOwogCi0gIHp1bWFfbWJveF9kdW1wKCk7CisJaWYgKHp1bWFfbWJveF9kb19hbGxfbWFpbGJveCgpID09IC0xKSB7CisJCXByaW50ZigibWFpbGJveCBmYWlsZWQuLiBubyBBQ0M/XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICB6dW1hX21ib3hfc2V0ZW52KCk7CisJenVtYV9tYm94X2R1bXAoKTsKIAotICByZXR1cm4gMDsKKwl6dW1hX21ib3hfc2V0ZW52KCk7CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vY2RzX3BjaV9mdC5jIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jZHNfcGNpX2Z0LmMKaW5kZXggNmYyMjFhZi4uOGEwOWY5OSAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jZHNfcGNpX2Z0LmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jZHNfcGNpX2Z0LmMKQEAgLTI4LDEzICsyOCwxMiBAQAogI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogc3RhdGljIHZvaWQgY2RzX3BjaV9maXh1cCh2b2lkICpibG9iKQogewotCWludCBub2RlLCB0bXBbMl07CisJaW50IG5vZGU7CiAJY29uc3QgY2hhciAqcGF0aDsKIAlpbnQgbGVuLCBzbG90LCBpOwogCXUzMiAqbWFwID0gTlVMTDsKIAogCW5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoYmxvYiwgIi9hbGlhc2VzIik7Ci0JdG1wWzBdID0gMDsKIAlpZiAobm9kZSA+PSAwKSB7CiAJCXBhdGggPSBmZHRfZ2V0cHJvcChibG9iLCBub2RlLCAicGNpMCIsIE5VTEwpOwogCQlpZiAocGF0aCkgewpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2ljczMwN19jbGsuYwppbmRleCA4OWQ4ODEwLi42YWNiYzM2IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2ljczMwN19jbGsuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2ljczMwN19jbGsuYwpAQCAtMzEsMTIgKzMxLDgxIEBACiAjaW5jbHVkZSAicGl4aXMuaCIKICNlbmRpZgogCisvKiBkZWZpbmUgZm9yIFNZUyBDTEsgb3IgQ0xLMUZyZXF1ZW5jeSAqLworI2RlZmluZSBUVEwJCTEKKyNkZWZpbmUgQ0xLMgkJMAorI2RlZmluZSBDUllTVEFMCQkwCisjZGVmaW5lIE1BWF9WRFcJCSg1MTEgKyA4KQorI2RlZmluZSBNQVhfUkRXCQkoMTI3ICsgMikKKyNkZWZpbmUgTUlOX1ZEVwkJKDQgKyA4KQorI2RlZmluZSBNSU5fUkRXCQkoMSArIDIpCisjZGVmaW5lIE5VTV9PRF9TRVRUSU5HCTgKKy8qCisgKiBUaGVzZSBkZWZpbmVzIGNvdmVyIHRoZSBpbmR1c3RyaWFsIHRlbXBlcmF0dXJlIHJhbmdlIHBhcnQsCisgKiBmb3IgY29tbWVyY2lhbCwgY2hhbmdlIGJlbG93IHRvIDQwMDAwMCBhbmQgNTUwMDAsIHJlc3BlY3RpdmVseQorICovCisjZGVmaW5lIE1BWF9WQ08JCTM2MDAwMAorI2RlZmluZSBNSU5fVkNPCQk2MDAwMAorCiAvKiBkZWNvZGUgU1swLTJdIHRvIE91dHB1dCBEaXZpZGVyIChPRCkgKi8KIHN0YXRpYyB1OCBpY3MzMDdfc190b19vZFtdID0gewogCTEwLCAyLCA4LCA0LCA1LCA3LCAzLCA2CiB9OwogCiAvKgorICogRmluZCBvbmUgc29sdXRpb24gdG8gZ2VuZXJhdGUgcmVxdWlyZWQgZnJlcXVlbmN5IGZvciBTWVNDTEsKKyAqIG91dF9mcmVxOiBLSHosIHJlcXVpcmVkIGZyZXF1ZW5jeSB0byB0aGUgU1lTQ0xLCisgKiB0aGUgcmVzdWx0IHdpbGwgYmUgcmV0dW5lZCB3aXRoIGNvbXBvbmVudCBSRFcsIFZEVywgT0QsIFRUTCwKKyAqIENMSzIgYW5kIGNyeXN0YWwKKyAqLwordW5zaWduZWQgbG9uZyBpY3MzMDdfc3lzY2xrX2NhbGN1bGF0b3IodW5zaWduZWQgbG9uZyBvdXRfZnJlcSkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nIGlucHV0X2ZyZXEgPSBDT05GSUdfSUNTMzA3X1JFRkNMS19IWjsKKwl1bnNpZ25lZCBsb25nIHZkdywgcmR3LCBvZHAsIHNfdmR3ID0gMCwgc19yZHcgPSAwLCBzX29kcCA9IDAsIG9kOworCXVuc2lnbmVkIGxvbmcgdG1wX291dCwgZGlmZiwgcmVzdWx0ID0gMDsKKwlpbnQgZm91bmQgPSAwOworCisJZm9yIChvZHAgPSAwOyBvZHAgPCBOVU1fT0RfU0VUVElORzsgb2RwKyspIHsKKwkJb2QgPSBpY3MzMDdfc190b19vZFtvZHBdOworCQlpZiAob2QgKiBvdXRfZnJlcSA8IE1JTl9WQ08gfHwgb2QgKiBvdXRfZnJlcSA+IE1BWF9WQ08pCisJCQljb250aW51ZTsKKwkJZm9yIChyZHcgPSBNSU5fUkRXOyByZHcgPD0gTUFYX1JEVzsgcmR3KyspIHsKKwkJCS8qIENhbGN1bGF0ZSB0aGUgVkRXICovCisJCQl2ZHcgPSBvdXRfZnJlcSAqIDEwMDAgKiBvZCAqIHJkdyAvIChpbnB1dF9mcmVxICogMik7CisJCQlpZiAodmR3ID4gTUFYX1ZEVykKKwkJCQl2ZHcgPSBNQVhfVkRXOworCQkJaWYgKHZkdyA8IE1JTl9WRFcpCisJCQkJY29udGludWU7CisJCQkvKiBDYWxjdWxhdGUgdGhlIHRlbXAgb3V0IGZyZXF1ZW5jeSAqLworCQkJdG1wX291dCA9IGlucHV0X2ZyZXEgKiAyICogdmR3IC8gKHJkdyAqIG9kICogMTAwMCk7CisJCQlkaWZmID0gTUFYKG91dF9mcmVxLCB0bXBfb3V0KSAtIE1JTihvdXRfZnJlcSwgdG1wX291dCk7CisJCQkvKgorCQkJICogY2FsY3VsYXRlIHRoZSBwZXJjZW50LCB0aGUgcHJlY2lzaW9uIGlzIDEvMTAwMAorCQkJICogSWYgZ3JlYXRlciB0aGFuIDEvMTAwMCwgY29udGludWUKKwkJCSAqIG90aGVyd2lzZSwgd2UgdGhpbmsgdGhlIHNvbHV0aW9uIGlzIHdlIHJlcXVpcmVkCisJCQkgKi8KKwkJCWlmIChkaWZmICogMTAwMCAvIG91dF9mcmVxID4gMSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UgeworCQkJCXNfdmR3ID0gdmR3OworCQkJCXNfcmR3ID0gcmR3OworCQkJCXNfb2RwID0gb2RwOworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmb3VuZCkKKwkJcmVzdWx0ID0gKHNfcmR3IC0gMikgfCAoc192ZHcgLSA4KSA8PCA3IHwgc19vZHAgPDwgMTYgfAorCQkJQ0xLMiA8PCAxOSB8IFRUTCA8PCAyMSB8IENSWVNUQUwgPDwgMjI7CisKKwlkZWJ1ZygiSUNTMzA3LTAyOiBSRFc6ICVsZCwgVkRXOiAlbGQsIE9EOiAlZFxuIiwgc19yZHcgLSAyLCBzX3ZkdyAtIDgsCisJCQlpY3MzMDdfc190b19vZFtzX29kcF0pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCiAgKiBDYWxjdWxhdGUgZnJlcXVlbmN5IGJlaW5nIGdlbmVyYXRlZCBieSBJQ1MzMDctMDIgY2xvY2sgY2hpcCBiYXNlZCB1cG9uCiAgKiB0aGUgY29udHJvbCBieXRlcyBiZWluZyBwcm9ncmFtbWVkIGludG8gaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vaWNzMzA3X2Nsay5oIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmgKaW5kZXggZGIzZGJjNC4uMzc1NzkxMiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmgKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KQEAgLTIzLDggKzIzLDEwIEBACiAjZGVmaW5lIF9fSUNTX0NMS19IXwkxCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9zeXNfY2xrKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX2Rkcl9jbGsodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpY3MzMDdfc3lzY2xrX2NhbGN1bGF0b3IodW5zaWduZWQgbG9uZyBvdXRfZnJlcSk7CiAjZW5kaWYKIAogI2VuZGlmCS8qIF9fSUNTX0NMS19IXyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9uZ3BpeGlzLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL25ncGl4aXMuYwppbmRleCA3NjVmMDM1Li4yNzZhZTNjIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL25ncGl4aXMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL25ncGl4aXMuYwpAQCAtMTU2LDkgKzE1NiwyOSBAQAogfQogI2VuZGlmCiAKK3ZvaWQgcGl4aXNfc3lzY2xrX3NldCh1bnNpZ25lZCBsb25nIHN5c2NsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZyZXFfd29yZDsKKwl1OCBzY2xrMCwgc2NsazEsIHNjbGsyOworCisJZnJlcV93b3JkID0gaWNzMzA3X3N5c2Nsa19jYWxjdWxhdG9yKHN5c2Nsayk7CisJc2NsazIgPSBmcmVxX3dvcmQgJiAweGZmOworCXNjbGsxID0gKGZyZXFfd29yZCA+PiA4KSAmIDB4ZmY7CisJc2NsazAgPSAoZnJlcV93b3JkID4+IDE2KSAmIDB4ZmY7CisKKwkvKiBzZXQgU1lTQ0xLIGVuYWJsZSBiaXQgKi8KKwlQSVhJU19XUklURSh2Y2ZnZW4wLCAweDAxKTsKKworCS8qIFNZU0NMSyB0byByZXF1aXJlZCBmcmVxdWVuY3kgKi8KKwlQSVhJU19XUklURShzY2xrWzBdLCBzY2xrMCk7CisJUElYSVNfV1JJVEUoc2Nsa1sxXSwgc2NsazEpOworCVBJWElTX1dSSVRFKHNjbGtbMl0sIHNjbGsyKTsKK30KKwogaW50IHBpeGlzX3Jlc2V0X2NtZChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBzeXNjbGs7CiAJY2hhciAqcF9hbHRiYW5rID0gTlVMTDsKICNpZmRlZiBERUJVRwogCWNoYXIgKnBfZHVtcCA9IE5VTEw7CkBAIC0xODIsNiArMjAyLDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogI2VuZGlmCisJCWlmIChzdHJjbXAoYXJndltpXSwgInN5c2NsayIpID09IDApIHsKKwkJCXN5c2NsayA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbaSArIDFdLCBOVUxMLCAwKTsKKwkJCWkgKz0gMTsKKwkJCXBpeGlzX3N5c2Nsa19zZXQoc3lzY2xrKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJdW5rbm93bl9wYXJhbSA9IGFyZ3ZbaV07CiAJfQpAQCAtMjE5LDQgKzI0NSw1IEBACiAjaWZkZWYgREVCVUcKIAkicGl4aXNfcmVzZXQgZHVtcCAtIGRpc3BsYXkgdGhlIFBJWElTIHJlZ2lzdGVyc1xuIgogI2VuZGlmCisJInBpeGlzX3Jlc2V0IHN5c2NsayA8U1lTQ0xLX2ZyZXE+IC0gcmVzZXQgd2l0aCBTWVNDTEsgZnJlcXVlbmN5KEtIeilcbiIKIAkpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9waXhpcy5jIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9waXhpcy5jCmluZGV4IGEzNWI1Y2YuLjhkMDcwNjEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vcGl4aXMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL3BpeGlzLmMKQEAgLTM4MCw3ICszODAsNyBAQAogewogCWludCBpLCBqOwogCWludCBtdWxjb25zdDsKLQlpbnQgaW50YXJyX2xlbiwgbm9fZGVjID0gMDsKKwlpbnQgbm9fZGVjID0gMDsKIAl1bnNpZ25lZCBsb25nIGludHZhbCA9IDAsIGRlY3ZhbCA9IDA7CiAJY2hhciBpbnRhcnJbM10sIGRlY2FyclszXTsKIApAQCAtMzk5LDggKzM5OSw2IEBACiAJCWkrKzsKIAl9CiAKLQkvKiBBc3NpZ24gbGVuZ3RoIG9mIGludGVnZXIgcGFydCB0byBpbnRhcnJfbGVuLiAqLwotCWludGFycl9sZW4gPSBpOwogCWludGFycltpXSA9ICdcMCc7CiAKIAlpZiAobm9fZGVjKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfaHlkcmEuYyBiL2JvYXJkL2ZyZWVzY2FsZS9jb3JlbmV0X2RzL2V0aF9oeWRyYS5jCmluZGV4IGE3YTVlMTMuLjk2MmYzODAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9jb3JlbmV0X2RzL2V0aF9oeWRyYS5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9jb3JlbmV0X2RzL2V0aF9oeWRyYS5jCkBAIC0zNzcsNyArMzc3LDYgQEAKIGludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCiB7CiAjaWZkZWYgQ09ORklHX0ZNQU5fRU5FVAotCXN0cnVjdCBkdHNlYyAqdHNlYyA9ICh2b2lkICopQ09ORklHX1NZU19GU0xfRk0xX0RUU0VDMV9BRERSOwogCXN0cnVjdCBmc2xfcHFfbWRpb19pbmZvIGR0c2VjX21kaW9faW5mbzsKIAlzdHJ1Y3QgdGdlY19tZGlvX2luZm8gdGdlY19tZGlvX2luZm87CiAJdW5zaWduZWQgaW50IGksIHNsb3Q7CkBAIC0zODcsMTMgKzM4Niw2IEBACiAKIAlpbml0aWFsaXplX2xhbmVfdG9fc2xvdCgpOwogCi0JLyoKLQkgKiBTZXQgVEJJUEEgb24gRk0xQERUU0VDMS4gIFRoaXMgaXMgbmVlZGVkIGZvciBjb25maWd1cmF0aW9ucwotCSAqIHdoZXJlIEZNMUBEVFNFQzEgaXNuJ3QgdXNlZCBkaXJlY3RseSwgc2luY2UgaXQgcHJvdmlkZXMKLQkgKiBNRElPIGZvciBvdGhlciBwb3J0cy4KLQkgKi8KLQlvdXRfYmUzMigmdHNlYy0+dGJpcGEsIENPTkZJR19TWVNfVEJJUEFfVkFMVUUpOwotCiAJLyogV2Ugd2FudCB0byB1c2UgdGhlIFBJWElTIHRvIGNvbmZpZ3VyZSBNVVggcm91dGluZywgbm90IEdQSU9zLiAqLwogCXNldGJpdHNfOCgmcGl4aXMtPmJyZGNmZzIsIEJSRENGRzJfUkVHX0dQSU9fU0VMKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvcmVuZXRfZHMvZXRoX3A0MDgwLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfcDQwODAuYwppbmRleCA3ZmYwMGQxLi4xZjAwYzE0IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfcDQwODAuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfcDQwODAuYwpAQCAtMzAxLDcgKzMwMSw2IEBACiB7CiAjaWZkZWYgQ09ORklHX0ZNQU5fRU5FVAogCWNjc3JfZ3Bpb190ICpwZ3BpbyA9ICh2b2lkICopKENPTkZJR19TWVNfTVBDODV4eF9HUElPX0FERFIpOwotCXN0cnVjdCBkdHNlYyAqdHNlYyA9ICh2b2lkICopQ09ORklHX1NZU19GU0xfRk0xX0RUU0VDMV9BRERSOwogCWludCBpOwogCXN0cnVjdCBmc2xfcHFfbWRpb19pbmZvIGR0c2VjX21kaW9faW5mbzsKIAlzdHJ1Y3QgdGdlY19tZGlvX2luZm8gdGdlY19tZGlvX2luZm87CkBAIC0zMjcsMTMgKzMyNiw2IEBACiAJCVNMT1Q1LCAvKiAxNyAtIEJhbmsgMzpEICovCiAJfTsKIAotCS8qCi0JICogU2V0IFRCSVBBIG9uIEZNMUBEVFNFQzEuICBUaGlzIGlzIG5lZWRlZCBmb3IgY29uZmlndXJhdGlvbnMKLQkgKiB3aGVyZSBGTTFARFRTRUMxIGlzbid0IHVzZWQgZGlyZWN0bHksIHNpbmNlIGl0IHByb3ZpZGVzCi0JICogTURJTyBmb3Igb3RoZXIgcG9ydHMuCi0JICovCi0Jb3V0X2JlMzIoJnRzZWMtPnRiaXBhLCBDT05GSUdfU1lTX1RCSVBBX1ZBTFVFKTsKLQogCS8qIEluaXRpYWxpemUgdGhlIG1kaW9fbXV4IGFycmF5IHNvIHdlIGNhbiByZWNvZ25pemUgZW1wdHkgZWxlbWVudHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZNX1BPUlRTOyBpKyspCiAJCW1kaW9fbXV4W2ldID0gRU1JX05PTkU7CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODM2MGVtZHMvbXBjODM2MGVtZHMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzYwZW1kcy9tcGM4MzYwZW1kcy5jCmluZGV4IGJlNzY3NzQuLmJkZDEyOTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzYwZW1kcy9tcGM4MzYwZW1kcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzYwZW1kcy9tcGM4MzYwZW1kcy5jCkBAIC0xNzIsMTAgKzE3MiwxMSBAQAogCWlmIChib2FyZF9oYW5kbGVfZXJyYXR1bTIoKSkgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1ZWNfaW5mbyk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWVjX2luZm8pOyBpKyspIHsKIAkJCXVlY19pbmZvW2ldLmVuZXRfaW50ZXJmYWNlX3R5cGUgPQogCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOwogCQkJdWVjX2luZm9baV0uc3BlZWQgPSBTUEVFRF8xMDAwOworCQl9CiAJfQogCXJldHVybiB1ZWNfZXRoX2luaXQoYmQsIHVlY19pbmZvLCBBUlJBWV9TSVpFKHVlY19pbmZvKSk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMKaW5kZXggYThkNTdjZC4uZTU1NjNmNyAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvbXBjODU0OGNkcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ4Y2RzL21wYzg1NDhjZHMuYwpAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUgPG1paXBoeS5oPgogI2luY2x1ZGUgPGxpYmZkdC5oPgogI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8dHNlYy5oPgorI2luY2x1ZGUgPGZzbF9tZGlvLmg+CisjaW5jbHVkZSA8bmV0ZGV2Lmg+CiAKICNpbmNsdWRlICIuLi9jb21tb24vY2FkbXVzLmgiCiAjaW5jbHVkZSAiLi4vY29tbW9uL2VlcHJvbS5oIgpAQCAtODEsMTIgKzg0LDEwIEBACiAJdm9sYXRpbGUgZnNsX2xiY190ICpsYmMgPSBMQkNfQkFTRV9BRERSOwogCiAJdWludCBjbGtkaXY7Ci0JdWludCBsYmNfaHo7CiAJc3lzX2luZm9fdCBzeXNpbmZvOwogCiAJZ2V0X3N5c19pbmZvKCZzeXNpbmZvKTsKIAljbGtkaXYgPSAobGJjLT5sY3JyICYgTENSUl9DTEtESVYpICogMjsKLQlsYmNfaHogPSBzeXNpbmZvLmZyZXFTeXN0ZW1CdXMgLyAxMDAwMDAwIC8gY2xrZGl2OwogCiAJZ3VyLT5sYml1aXBsbGRjcjEgPSAweDAwMDc4MDgwOwogCWlmIChjbGtkaXYgPT0gMTYpIHsKQEAgLTExNSw3ICsxMTYsNiBAQAogCXVpbnQgaWR4OwogCXZvbGF0aWxlIGZzbF9sYmNfdCAqbGJjID0gTEJDX0JBU0VfQUREUjsKIAl1aW50ICpzZHJhbV9hZGRyID0gKHVpbnQgKilDT05GSUdfU1lTX0xCQ19TRFJBTV9CQVNFOwotCXVpbnQgY3B1X2JvYXJkX3JldjsKIAl1aW50IGxzZG1yX2NvbW1vbjsKIAogCXB1dHMoIkxCQyBTRFJBTTogIik7CkBAIC0xMzcsNyArMTM3LDYgQEAKIAkvKgogCSAqIE1QQzg1NDggdXNlcyAibmV3IiAxNS0xNiBzdHlsZSBhZGRyZXNzaW5nLgogCSAqLwotCWNwdV9ib2FyZF9yZXYgPSBnZXRfY3B1X2JvYXJkX3JldmlzaW9uKCk7CiAJbHNkbXJfY29tbW9uID0gQ09ORklHX1NZU19MQkNfTFNETVJfQ09NTU9OOwogCWxzZG1yX2NvbW1vbiB8PSBMU0RNUl9CU01BMTUxNjsKIApAQCAtMjg3LDcgKzI4Niw3IEBACiAJZnNsX3BjaWVfaW5pdF9ib2FyZChmaXJzdF9mcmVlX2J1c25vKTsKIH0KIAotaW50IGxhc3Rfc3RhZ2VfaW5pdCh2b2lkKQordm9pZCBjb25maWd1cmVfcmdtaWkodm9pZCkKIHsKIAl1bnNpZ25lZCBzaG9ydCB0ZW1wOwogCkBAIC0yOTUsMjkgKzI5NCw3NyBAQAogCS8qIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0aGUgUkdNSUkgd29ya2luZyBmb3IgdGhlIDEuMysKIAkgKiBDRFMgY2FyZHMgKi8KIAlpZiAoZ2V0X2JvYXJkX3ZlcnNpb24oKSA9PSAgMHgxMykgewotCQltaWlwaHlfd3JpdGUoQ09ORklHX1RTRUMxX05BTUUsCisJCW1paXBoeV93cml0ZShERUZBVUxUX01JSV9OQU1FLAogCQkJCVRTRUMxX1BIWV9BRERSLCAyOSwgMTgpOwogCi0JCW1paXBoeV9yZWFkKENPTkZJR19UU0VDMV9OQU1FLAorCQltaWlwaHlfcmVhZChERUZBVUxUX01JSV9OQU1FLAogCQkJCVRTRUMxX1BIWV9BRERSLCAzMCwgJnRlbXApOwogCiAJCXRlbXAgPSAodGVtcCAmIDB4ZjAzZik7CiAJCXRlbXAgfD0gMiA8PCA5OwkJLyogMzYgb2htICovCiAJCXRlbXAgfD0gMiA8PCA2OwkJLyogMzkgb2htICovCiAKLQkJbWlpcGh5X3dyaXRlKENPTkZJR19UU0VDMV9OQU1FLAorCQltaWlwaHlfd3JpdGUoREVGQVVMVF9NSUlfTkFNRSwKIAkJCQlUU0VDMV9QSFlfQUREUiwgMzAsIHRlbXApOwogCi0JCW1paXBoeV93cml0ZShDT05GSUdfVFNFQzFfTkFNRSwKKwkJbWlpcGh5X3dyaXRlKERFRkFVTFRfTUlJX05BTUUsCiAJCQkJVFNFQzFfUEhZX0FERFIsIDI5LCAzKTsKIAotCQltaWlwaHlfd3JpdGUoQ09ORklHX1RTRUMxX05BTUUsCisJCW1paXBoeV93cml0ZShERUZBVUxUX01JSV9OQU1FLAogCQkJCVRTRUMxX1BIWV9BRERSLCAzMCwgMHg4MDAwKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm47CiB9CiAKKyNpZmRlZiBDT05GSUdfVFNFQ19FTkVUCitpbnQgYm9hcmRfZXRoX2luaXQoYmRfdCAqYmlzKQoreworCXN0cnVjdCBmc2xfcHFfbWRpb19pbmZvIG1kaW9faW5mbzsKKwlzdHJ1Y3QgdHNlY19pbmZvX3N0cnVjdCB0c2VjX2luZm9bNF07CisJaW50IG51bSA9IDA7CisKKyNpZmRlZiBDT05GSUdfVFNFQzEKKwlTRVRfU1REX1RTRUNfSU5GTyh0c2VjX2luZm9bbnVtXSwgMSk7CisJbnVtKys7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFNFQzIKKwlTRVRfU1REX1RTRUNfSU5GTyh0c2VjX2luZm9bbnVtXSwgMik7CisJbnVtKys7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFNFQzMKKwkvKiBpbml0aWFsaXplIFRTRUMzIG9ubHkgaWYgQ2FycmllciBpcyAxLjMgb3IgYWJvdmUgb24gQ0RTICovCisJaWYgKGdldF9ib2FyZF92ZXJzaW9uKCkgPj0gMHgxMykgeworCQlTRVRfU1REX1RTRUNfSU5GTyh0c2VjX2luZm9bbnVtXSwgMyk7CisJCXRzZWNfaW5mb1tudW1dLmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDsKKwkJbnVtKys7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1RTRUM0CisJLyogaW5pdGlhbGl6ZSBUU0VDNCBvbmx5IGlmIENhcnJpZXIgaXMgMS4zIG9yIGFib3ZlIG9uIENEUyAqLworCWlmIChnZXRfYm9hcmRfdmVyc2lvbigpID49IDB4MTMpIHsKKwkJU0VUX1NURF9UU0VDX0lORk8odHNlY19pbmZvW251bV0sIDQpOworCQl0c2VjX2luZm9bbnVtXS5pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7CisJCW51bSsrOworCX0KKyNlbmRpZgorCisJaWYgKCFudW0pIHsKKwkJcHJpbnRmKCJObyBUU0VDcyBpbml0aWFsaXplZFxuIik7CisKKwkJcmV0dXJuIDA7CisJfQorCisJbWRpb19pbmZvLnJlZ3MgPSAoc3RydWN0IHRzZWNfbWlpX21uZyAqKUNPTkZJR19TWVNfTURJT19CQVNFX0FERFI7CisJbWRpb19pbmZvLm5hbWUgPSBERUZBVUxUX01JSV9OQU1FOworCWZzbF9wcV9tZGlvX2luaXQoYmlzLCAmbWRpb19pbmZvKTsKKworCXRzZWNfZXRoX2luaXQoYmlzLCB0c2VjX2luZm8sIG51bSk7CisJY29uZmlndXJlX3JnbWlpKCk7CisKKwlyZXR1cm4gcGNpX2V0aF9pbml0KGJpcyk7Cit9CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogdm9pZCBmdF9wY2lfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMKaW5kZXggMjI1YzVkOC4uNmUzOTQ1ZSAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjhtZHMvbXBjODU2OG1kcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL21wYzg1NjhtZHMuYwpAQCAtMTQ3LDEyICsxNDcsMTAgQEAKIAl2b2xhdGlsZSBmc2xfbGJjX3QgKmxiYyA9IExCQ19CQVNFX0FERFI7CiAKIAl1aW50IGNsa2RpdjsKLQl1aW50IGxiY19oejsKIAlzeXNfaW5mb190IHN5c2luZm87CiAKIAlnZXRfc3lzX2luZm8oJnN5c2luZm8pOwogCWNsa2RpdiA9IChsYmMtPmxjcnIgJiBMQ1JSX0NMS0RJVikgKiAyOwotCWxiY19oeiA9IHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDEwMDAwMDAgLyBjbGtkaXY7CiAKIAlndXItPmxiaXVpcGxsZGNyMSA9IDB4MDAwNzgwODA7CiAJaWYgKGNsa2RpdiA9PSAxNikgewpAQCAtMzAyLDYgKzMwMCw3IEBACiAJaTJjX3dyaXRlKDB4MjcsIDB4MywgMSwgJnZhbDgsIDEpOwogCiAJYXNtKCJlaWVpbyIpOworCWkyY19zZXRfYnVzX251bShvcmlnX2kyY19idXMpOwogfQogCiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjltZHMvbXBjODU2OW1kcy5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjltZHMvbXBjODU2OW1kcy5jCmluZGV4IDg5NTU3ZDIuLmQxMTljNjUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTY5bWRzL21wYzg1NjltZHMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OW1kcy9tcGM4NTY5bWRzLmMKQEAgLTMwMywxMiArMzAzLDEwIEBACiAJdm9sYXRpbGUgZnNsX2xiY190ICpsYmMgPSBMQkNfQkFTRV9BRERSOwogCiAJdWludCBjbGtkaXY7Ci0JdWludCBsYmNfaHo7CiAJc3lzX2luZm9fdCBzeXNpbmZvOwogCiAJZ2V0X3N5c19pbmZvKCZzeXNpbmZvKTsKIAljbGtkaXYgPSAobGJjLT5sY3JyICYgTENSUl9DTEtESVYpICogMjsKLQlsYmNfaHogPSBzeXNpbmZvLmZyZXFTeXN0ZW1CdXMgLyAxMDAwMDAwIC8gY2xrZGl2OwogCiAJb3V0X2JlMzIoJmd1ci0+bGJpdWlwbGxkY3IxLCAweDAwMDc4MDgwKTsKIAlpZiAoY2xrZGl2ID09IDE2KQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy90bGIuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTcyZHMvdGxiLmMKaW5kZXggNTc1YmRiNS4uNmQ2MDUxMyAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy90bGIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU3MmRzL3RsYi5jCkBAIC01OCw2ICs1OCw3IEBACiAJCSAgICAgIE1BUzNfU1h8TUFTM19TUiwgTUFTMl9XfE1BUzJfRywKIAkJICAgICAgMCwgMiwgQk9PS0VfUEFHRVNaXzI1Nk0sIDEpLAogCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAogCS8qICpJKkcqIC0gUENJICovCiAJU0VUX1RMQl9FTlRSWSgxLCBDT05GSUdfU1lTX1BDSUUzX01FTV9WSVJULCBDT05GSUdfU1lTX1BDSUUzX01FTV9QSFlTLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKQEAgLTc2LDYgKzc3LDcgQEAKIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfUENJRTNfSU9fVklSVCwgQ09ORklHX1NZU19QQ0lFM19JT19QSFlTLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKIAkJICAgICAgMCwgNiwgQk9PS0VfUEFHRVNaXzI1NkssIDEpLAorI2VuZGlmCiAKIAkvKiAqSSpHIC0gTkFORCAqLwogCVNFVF9UTEJfRU5UUlkoMSwgQ09ORklHX1NZU19OQU5EX0JBU0UsIENPTkZJR19TWVNfTkFORF9CQVNFX1BIWVMsCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvcDEwMTByZGIvcDEwMTByZGIuYyBiL2JvYXJkL2ZyZWVzY2FsZS9wMTAxMHJkYi9wMTAxMHJkYi5jCmluZGV4IDAzZTlkYTEuLmI5ZTY2ZjcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMTAxMHJkYi9wMTAxMHJkYi5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9wMTAxMHJkYi9wMTAxMHJkYi5jCkBAIC0yNzUsNyArMjc1LDkgQEAKIAogCWZkdF9maXh1cF9tZW1vcnkoYmxvYiwgKHU2NCliYXNlLCAodTY0KXNpemUpOwogCisjaWYgZGVmaW5lZChDT05GSUdfSEFTX0ZTTF9EUl9VU0IpCiAJZmR0X2ZpeHVwX2RyX3VzYihibG9iLCBiZCk7CisjZW5kaWYKIAogICAgICAgIC8qIFAxMDE0IGFuZCBpdCdzIGRlcml2YXRpdmVzIGRvbid0IHN1cHBvcnQgQ0FOIGFuZCBlVFNFQzMgKi8KIAlpZiAoY3B1LT5zb2NfdmVyID09IFNWUl9QMTAxNCB8fCBjcHUtPnNvY192ZXIgPT0gU1ZSX1AxMDE0X0UpIHsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGIvcDFfcDJfcmRiLmMgYi9ib2FyZC9mcmVlc2NhbGUvcDFfcDJfcmRiL3AxX3AyX3JkYi5jCmluZGV4IDg2NGIzY2UuLmNmYmFlNjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGIvcDFfcDJfcmRiLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYi9wMV9wMl9yZGIuYwpAQCAtMjY0LDcgKzI2NCw5IEBACiAKIAlmZHRfZml4dXBfbWVtb3J5KGJsb2IsICh1NjQpYmFzZSwgKHU2NClzaXplKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hBU19GU0xfRFJfVVNCKQogCWZkdF9maXh1cF9kcl91c2IoYmxvYiwgYmQpOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRENBUkQpIHx8IGRlZmluZWQoQ09ORklHX1NQSUZMQVNIKQogCS8qIERlbGV0ZSBlTEJDIG5vZGUgYXMgaXQgaXMgbXV4ZWQgd2l0aCBVU0IyIGNvbnRyb2xsZXIgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvbGF3LmMgYi9ib2FyZC9mcmVlc2NhbGUvcDFfcDJfcmRiX3BjL2xhdy5jCmluZGV4IDVmZjZlYTYuLjc5Njg5MTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvbGF3LmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYl9wYy9sYXcuYwpAQCAtMjUsMTUgKzI1LDE3IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiBzdHJ1Y3QgbGF3X2VudHJ5IGxhd190YWJsZVtdID0gewotCVNFVF9MQVcoQ09ORklHX1NZU19GTEFTSF9CQVNFX1BIWVMsIExBV19TSVpFXzY0TSwgTEFXX1RSR1RfSUZfTEJDKSwKKyNpZm5kZWYgQ09ORklHX05BTkRfU1BMCiAJU0VUX0xBVyhDT05GSUdfU1lTX0NQTERfQkFTRV9QSFlTLCBMQVdfU0laRV8xTSwgTEFXX1RSR1RfSUZfTEJDKSwKIAlTRVRfTEFXKENPTkZJR19TWVNfUE1DX0JBU0VfUEhZUywgTEFXX1NJWkVfNjRLLCBMQVdfVFJHVF9JRl9MQkMpLAotI2lmZGVmIENPTkZJR19TWVNfTkFORF9CQVNFX1BIWVMKLQlTRVRfTEFXKENPTkZJR19TWVNfTkFORF9CQVNFX1BIWVMsIExBV19TSVpFXzFNLCBMQVdfVFJHVF9JRl9MQkMpLAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1ZTQzczODVfRU5FVAogCVNFVF9MQVcoQ09ORklHX1NZU19WU0M3Mzg1X0JBU0VfUEhZUywgTEFXX1NJWkVfMU0sIExBV19UUkdUX0lGX0xCQyksCiAjZW5kaWYKKyNlbmRpZgorCVNFVF9MQVcoQ09ORklHX1NZU19GTEFTSF9CQVNFX1BIWVMsIExBV19TSVpFXzY0TSwgTEFXX1RSR1RfSUZfTEJDKSwKKyNpZmRlZiBDT05GSUdfU1lTX05BTkRfQkFTRV9QSFlTCisJU0VUX0xBVyhDT05GSUdfU1lTX05BTkRfQkFTRV9QSFlTLCBMQVdfU0laRV8xTSwgTEFXX1RSR1RfSUZfTEJDKSwKKyNlbmRpZgogfTsKIAogaW50IG51bV9sYXdfZW50cmllcyA9IEFSUkFZX1NJWkUobGF3X3RhYmxlKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvcDFfcDJfcmRiX3BjLmMgYi9ib2FyZC9mcmVlc2NhbGUvcDFfcDJfcmRiX3BjL3AxX3AyX3JkYl9wYy5jCmluZGV4IDQ2NzExMjguLmE2MGM1YTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvcDFfcDJfcmRiX3BjLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYl9wYy9wMV9wMl9yZGJfcGMuYwpAQCAtNDQ0LDYgKzQ0NCw5IEBACiAJZmR0X2JvYXJkX2ZpeHVwX3FlX3BpbnMoYmxvYik7CiAjZW5kaWYKICNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSEFTX0ZTTF9EUl9VU0IpCiAJZmR0X2ZpeHVwX2RyX3VzYihibG9iLCBiZCk7CisjZW5kaWYKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3AyMDQxcmRiL2V0aC5jIGIvYm9hcmQvZnJlZXNjYWxlL3AyMDQxcmRiL2V0aC5jCmluZGV4IDBhMWRmYTcuLjRiMGQ1NzcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMjA0MXJkYi9ldGguYworKysgYi9ib2FyZC9mcmVlc2NhbGUvcDIwNDFyZGIvZXRoLmMKQEAgLTEzOSw3ICsxMzksNiBAQAogaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKIHsKICNpZmRlZiBDT05GSUdfRk1BTl9FTkVUCi0Jc3RydWN0IGR0c2VjICp0c2VjID0gKHZvaWQgKilDT05GSUdfU1lTX0ZTTF9GTTFfRFRTRUMxX0FERFI7CiAJc3RydWN0IGZzbF9wcV9tZGlvX2luZm8gZHRzZWNfbWRpb19pbmZvOwogCXN0cnVjdCB0Z2VjX21kaW9faW5mbyB0Z2VjX21kaW9faW5mbzsKIAl1bnNpZ25lZCBpbnQgaSwgc2xvdDsKQEAgLTE0OSwxMyArMTQ4LDYgQEAKIAogCWluaXRpYWxpemVfbGFuZV90b19zbG90KCk7CiAKLQkvKgotCSAqIFNldCBUQklQQSBvbiBGTTFARFRTRUMxLiAgVGhpcyBpcyBuZWVkZWQgZm9yIGNvbmZpZ3VyYXRpb25zCi0JICogd2hlcmUgRk0xQERUU0VDMSBpc24ndCB1c2VkIGRpcmVjdGx5LCBzaW5jZSBpdCBwcm92aWRlcwotCSAqIE1ESU8gZm9yIG90aGVyIHBvcnRzLgotCSAqLwotCW91dF9iZTMyKCZ0c2VjLT50YmlwYSwgQ09ORklHX1NZU19UQklQQV9WQUxVRSk7Ci0KIAlkdHNlY19tZGlvX2luZm8ucmVncyA9CiAJCShzdHJ1Y3QgdHNlY19taWlfbW5nICopQ09ORklHX1NZU19GTTFfRFRTRUMxX01ESU9fQUREUjsKIAlkdHNlY19tZGlvX2luZm8ubmFtZSA9IERFRkFVTFRfRk1fTURJT19OQU1FOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2RzeXMvNDA1ZXAvZGx2aXNpb24tMTBnLmMgYi9ib2FyZC9nZHN5cy80MDVlcC9kbHZpc2lvbi0xMGcuYwppbmRleCBlY2JhNjZlLi5mNTVhZmJkIDEwMDY0NAotLS0gYS9ib2FyZC9nZHN5cy80MDVlcC9kbHZpc2lvbi0xMGcuYworKysgYi9ib2FyZC9nZHN5cy80MDVlcC9kbHZpc2lvbi0xMGcuYwpAQCAtODcsNyArODcsNiBAQAogCXUxNiBmcGdhX2ZlYXR1cmVzID0gaW5fbGUxNigmZnBnYS0+ZnBnYV9mZWF0dXJlcyk7CiAJdW5zaWduZWQgdW5pdF90eXBlOwogCXVuc2lnbmVkIGhhcmR3YXJlX3ZlcnNpb247Ci0JdW5zaWduZWQgZmVhdHVyZV9jb21wcmVzc2lvbjsKIAl1bnNpZ25lZCBmZWF0dXJlX3JzMjMyOwogCXVuc2lnbmVkIGZlYXR1cmVfYXVkaW87CiAJdW5zaWduZWQgZmVhdHVyZV9zeXNjbG9jazsKQEAgLTExMSw3ICsxMTAsNiBAQAogCiAJdW5pdF90eXBlID0gKHZlcnNpb25zID4+IDQpICYgMHgwMDBmOwogCWhhcmR3YXJlX3ZlcnNpb24gPSB2ZXJzaW9ucyAmIDB4MDAwZjsKLQlmZWF0dXJlX2NvbXByZXNzaW9uID0gKGZwZ2FfZmVhdHVyZXMgPj4gMTMpICYgMHgwMDAzOwogCWZlYXR1cmVfcnMyMzIgPSBmcGdhX2ZlYXR1cmVzICYgKDE8PDExKTsKIAlmZWF0dXJlX2F1ZGlvID0gKGZwZ2FfZmVhdHVyZXMgPj4gOSkgJiAweDAwMDM7CiAJZmVhdHVyZV9zeXNjbG9jayA9IChmcGdhX2ZlYXR1cmVzID4+IDcpICYgMHgwMDAzOwpkaWZmIC0tZ2l0IGEvYm9hcmQvaHltb2QvaW5wdXQuYyBiL2JvYXJkL2h5bW9kL2lucHV0LmMKaW5kZXggMWEyYjhkMi4uMGE1ODAxNSAxMDA2NDQKLS0tIGEvYm9hcmQvaHltb2QvaW5wdXQuYworKysgYi9ib2FyZC9oeW1vZC9pbnB1dC5jCkBAIC0yMyw5ICsyMyw2IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KIAotLyogaW1wb3J0cyBmcm9tIGNvbW1vbi9tYWluLmMgKi8KLWV4dGVybiBjaGFyIGNvbnNvbGVfYnVmZmVyW0NPTkZJR19TWVNfQ0JTSVpFXTsKLQogaW50CiBoeW1vZF9nZXRfc2Vybm8gKGNvbnN0IGNoYXIgKnByb21wdCkKIHsKZGlmZiAtLWdpdCBhL2JvYXJkL2lubm9rb20vTWFrZWZpbGUgYi9ib2FyZC9pbm5va29tL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjU4YjdmLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2lubm9rb20vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2Ci0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0jCi0jIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0jIHByb2plY3QuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0jIE1BIDAyMTExLTEzMDcgVVNBCi0jCi0KLWluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawotCi1MSUIJPSAkKG9iailsaWIkKEJPQVJEKS5vCi0KLUNPQkpTCTo9IGlubm9rb20ubyBmbGFzaC5vCi0KLVNSQ1MJOj0gJChDT0JKUzoubz0uYykKLU9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQotCi0kKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQotCSQoY2FsbCBjbWRfbGlua19vX3RhcmdldCwgJChPQkpTKSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKLWluY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawotCi1zaW5jbHVkZSAkKG9iaikuZGVwZW5kCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2lubm9rb20vZmxhc2guYyBiL2JvYXJkL2lubm9rb20vZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0Yjk4Ny4uMDAwMDAwMAotLS0gYS9ib2FyZC9pbm5va29tL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogQXVlcnN3YWxkIEdtYkggJiBDbyBLRywgR2VybWFueQotICogS2FpLVV3ZSBCbG9lbSA8a2FpLXV3ZS5ibG9lbUBhdWVyc3dhbGQuZGU+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0KLS8qIERlYnVnZ2luZyBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAqLwotCi0jdW5kZWYgRkxBU0hfREVCVUcKLQotLyogU29tZSBkZWJ1ZyBtYWNyb3MgKi8KLSNpZiAoRkxBU0hfREVCVUcgPiAyICkKLSNkZWZpbmUgUFJJTlRLMyhhcmdzLi4uKSBwcmludGYoYXJncykKLSNlbHNlCi0jZGVmaW5lIFBSSU5USzMoYXJncy4uLikKLSNlbmRpZgotCi0jaWYgRkxBU0hfREVCVUcgPiAxCi0jZGVmaW5lIFBSSU5USzIoYXJncy4uLikgcHJpbnRmKGFyZ3MpCi0jZWxzZQotI2RlZmluZSBQUklOVEsyKGFyZ3MuLi4pCi0jZW5kaWYKLQotI2lmZGVmIEZMQVNIX0RFQlVHCi0jZGVmaW5lIFBSSU5USyhhcmdzLi4uKSBwcmludGYoYXJncykKLSNlbHNlCi0jZGVmaW5lIFBSSU5USyhhcmdzLi4uKQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBEZXZlbG9wbWVudCBzeXN0ZW06IHdlIGhhdmUgb25seSAxNiBNQiBGbGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBDT05GSUdfTVREX0lOTk9LT01fMTZNQgotI2RlZmluZSBGTEFTSF9CQU5LX1NJWkUgMHgwMTAwMDAwMAkvKiAxNiBNQiAoZHVyaW5nIGRldmVsb3BtZW50KSAgICAgICAqLwotI2RlZmluZSBNQUlOX1NFQ1RfU0laRSAgMHgwMDAyMDAwMAkvKiAxMjhrIHBlciBzZWN0b3IgICAgICAgICAgICAgICAgICAqLwotI2VuZGlmCi0KLS8qIFByb2R1Y3Rpb24gc3lzdGVtOiB3ZSBoYXZlIDY0IE1CIEZsYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIENPTkZJR19NVERfSU5OT0tPTV82NE1CCi0jZGVmaW5lIEZMQVNIX0JBTktfU0laRSAweDA0MDAwMDAwCS8qIDY0IE1CICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE1BSU5fU0VDVF9TSVpFICAweDAwMDIwMDAwCS8qIDEyOGsgcGVyIHNlY3RvciAgICAgICAgICAgICAgICAgICovCi0jZW5kaWYKLQotZmxhc2hfaW5mb190ICAgIGZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOwotCi0vKioKLSAqIGZsYXNoX2luaXQ6IC0gaW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGZsYXNoIGNoaXBzCi0gKgotICogQHJldHVybjogc2l6ZSBvZiB0aGUgZmxhc2gKLSAqLwotCi11bG9uZyBmbGFzaF9pbml0KHZvaWQpCi17Ci0JaW50IGksIGo7Ci0JdWxvbmcgc2l6ZSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1M7IGkrKykgewotCQl1bG9uZyBmbGFzaGJhc2UgPSAwOwotCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0KLQkJCShJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSB8Ci0JCQkoSU5URUxfSURfMjhGMTI4SjMgJiBGTEFTSF9UWVBFTUFTSyk7Ci0JCWZsYXNoX2luZm9baV0uc2l6ZSA9IEZMQVNIX0JBTktfU0laRTsKLQkJZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUOwotCQltZW1zZXQoZmxhc2hfaW5mb1tpXS5wcm90ZWN0LCAwLCBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUKTsKLQotCQlzd2l0Y2ggKGkpIHsKLQkJCWNhc2UgMDoKLQkJCQlmbGFzaGJhc2UgPSBQSFlTX0ZMQVNIXzE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXBhbmljKCJjb25maWd1cmVkIHRvbyBtYW55IGZsYXNoIGJhbmtzIVxuIik7Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJZm9yIChqID0gMDsgaiA8IGZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50OyBqKyspIHsKLQkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBmbGFzaGJhc2UgKyBqKk1BSU5fU0VDVF9TSVpFOwotCQl9Ci0JCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwotCX0KLQotCS8qIFByb3RlY3QgdS1ib290IHNlY3RvcnMgKi8KLQlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCQlDT05GSUdfU1lTX0ZMQVNIX0JBU0UsCi0JCQlDT05GSUdfU1lTX0ZMQVNIX0JBU0UgKyAoMjU2KjEwMjQpIC0gMSwKLQkJCSZmbGFzaF9pbmZvWzBdKTsKLQotI2lmZGVmIENPTkZJR19FTlZfSVNfSU5fRkxBU0gKLQlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCQlDT05GSUdfRU5WX0FERFIsCi0JCQlDT05GSUdfRU5WX0FERFIgKyBDT05GSUdfRU5WX1NJWkUgLSAxLAotCQkJJmZsYXNoX2luZm9bMF0pOwotI2VuZGlmCi0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotCi0vKioKLSAqIGZsYXNoX3ByaW50X2luZm86IC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsYXNoIHNpdHVhdGlvbgotICoKLSAqIEBwYXJhbSBpbmZvOgotICovCi0KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaj0wOyBqPENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyBqKyspIHsKLQotCQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQotCQkJY2FzZSAoSU5URUxfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSyk6Ci0JCQkJcHJpbnRmKCJJbnRlbDogIik7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ZigiVW5rbm93biBWZW5kb3IgIik7Ci0JCQkJYnJlYWs7Ci0JCX0KLQotCQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQotCQkJY2FzZSAoSU5URUxfSURfMjhGMTI4SjMgJiBGTEFTSF9UWVBFTUFTSyk6Ci0JCQkJcHJpbnRmKCIyOEYxMjhKMyAoMTI4TWJpdClcbiIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGYoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlwcmludGYoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0JCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCi0JCXByaW50ZigiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLQkJCWlmICgoaSAlIDUpID09IDApIHByaW50ZiAoIlxuICAgIik7Ci0KLQkJCXByaW50ZiAoIiAlMDhsWCVzIiwgaW5mby0+c3RhcnRbaV0sCi0JCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKLQkJfQotCQlwcmludGYgKCJcbiIpOwotCQlpbmZvKys7Ci0JfQotfQotCi0KLS8qKgotICogZmxhc2hfZXJhc2U6IC0gZXJhc2UgZmxhc2ggc2VjdG9ycwotICoKLSAqLwotCi1pbnQgZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdDsKLQlpbnQgcmMgPSBFUlJfT0s7Ci0JdWxvbmcgc3RhcnQ7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKLQkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJcmV0dXJuIEVSUl9JTlZBTDsKLQl9Ci0KLQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkKLQkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1ZFTkRPUjsKLQotCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgcHJvdCsrOwotCX0KLQotCWlmIChwcm90KSByZXR1cm4gRVJSX1BST1RFQ1RFRDsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dAotCSAqIGhlcmUuIFJlbWVtYmVyIHRoYXQgb3VyIGV4Y2VwdGlvbiB2ZWN0b3JzIGFyZQotCSAqIGF0IGFkZHJlc3MgMCBpbiB0aGUgZmxhc2gsIGFuZCB3ZSBkb24ndCB3YW50IGEKLQkgKiAodGlja2VyKSBleGNlcHRpb24gdG8gaGFwcGVuIHdoaWxlIHRoZSBmbGFzaAotCSAqIGNoaXAgaXMgaW4gcHJvZ3JhbW1pbmcgbW9kZS4KLQkgKi8KLQotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3QgJiYgIWN0cmxjKCk7IHNlY3QrKykgewotCi0JCXByaW50ZigiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0KTsKLQotCQlQUklOVEsoIlxuIik7Ci0KLQkJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KLQkJc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0KLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JCQl1MTYgKiB2b2xhdGlsZSBhZGRyID0gKHUxNiAqIHZvbGF0aWxlKShpbmZvLT5zdGFydFtzZWN0XSk7Ci0KLQkJCVBSSU5USygidW5sb2NraW5nIHNlY3RvclxuIik7Ci0JCQkqYWRkciA9IDB4MDA2MDsKLQkJCSphZGRyID0gMHgwMGQwOwotCQkJKmFkZHIgPSAweDAwZmY7Ci0KLQkJCVBSSU5USygiZXJhc2luZyBzZWN0b3JcbiIpOwotCQkJKmFkZHIgPSAweDAwMjA7Ci0JCQlQUklOVEsoImNvbmZpcm1pbmcgZXJhc2VcbiIpOwotCQkJKmFkZHIgPSAweDAwRDA7Ci0KLQkJCXdoaWxlICgoKmFkZHIgJiAweDAwODApICE9IDB4MDA4MCkgewotCQkJCVBSSU5USygiLiIpOwotCQkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0JCQkJCSphZGRyID0gMHgwMEIwOyAvKiBzdXNwZW5kIGVyYXNlKi8KLQkJCQkJKmFkZHIgPSAweDAwRkY7IC8qIHJlYWQgbW9kZSAgICAqLwotCQkJCQlyYyA9IEVSUl9USU1PVVQ7Ci0JCQkJCWdvdG8gb3V0YWhlcmU7Ci0JCQkJfQotCQkJfQotCi0JCQlQUklOVEsoImNsZWFyaW5nIHN0YXR1cyByZWdpc3RlclxuIik7Ci0JCQkqYWRkciA9IDB4MDA1MDsKLQkJCVBSSU5USygicmVzZXR0aW5nIHRvIHJlYWQgbW9kZSIpOwotCQkJKmFkZHIgPSAweDAwRkY7Ci0JCX0KLQotCQlwcmludGYoIm9rLlxuIik7Ci0JfQotCi0JaWYgKGN0cmxjKCkpIHByaW50ZigiVXNlciBJbnRlcnJ1cHQhXG4iKTsKLQotCW91dGFoZXJlOgotCi0JLyogYWxsb3cgZmxhc2ggdG8gc2V0dGxlIC0gd2FpdCAxMCBtcyAqLwotCXVkZWxheV9tYXNrZWQoMTAwMDApOwotCi0JaWYgKGZsYWcpIGVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQotLyoqCi0gKiB3cml0ZV93b3JkOiAtIGNvcHkgbWVtb3J5IHRvIGZsYXNoCi0gKgotICogQHBhcmFtIGluZm86Ci0gKiBAcGFyYW0gZGVzdDoKLSAqIEBwYXJhbSBkYXRhOgotICogQHJldHVybjoKLSAqLwotCi1zdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdXNob3J0IGRhdGEpCi17Ci0Jdm9sYXRpbGUgdTE2ICphZGRyID0gKHUxNiAqKWRlc3QsIHZhbDsKLQlpbnQgcmMgPSBFUlJfT0s7Ci0JaW50IGZsYWc7Ci0JdWxvbmcgc3RhcnQ7Ci0KLQkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KLQlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgcmV0dXJuIEVSUl9OT1RfRVJBU0VEOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0Ci0JICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCi0JICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQotCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCi0JICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgotCSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciBjb21tYW5kICovCi0JKmFkZHIgPSAweDUwOwotCi0JLyogcHJvZ3JhbSBzZXQtdXAgY29tbWFuZCAqLwotCSphZGRyID0gMHg0MDsKLQotCS8qIGxhdGNoIGFkZHJlc3MvZGF0YSAqLwotCSphZGRyID0gZGF0YTsKLQotCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCi0Jc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0KLQkvKiB3YWl0IHdoaWxlIHBvbGxpbmcgdGhlIHN0YXR1cyByZWdpc3RlciAqLwotCXdoaWxlKCgodmFsID0gKmFkZHIpICYgMHg4MCkgIT0gMHg4MCkgewotCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkgewotCQkJcmMgPSBFUlJfVElNT1VUOwotCQkJKmFkZHIgPSAweEIwOyAvKiBzdXNwZW5kIHByb2dyYW0gY29tbWFuZCAqLwotCQkJZ290byBvdXRhaGVyZTsKLQkJfQotCX0KLQotCWlmKHZhbCAmIDB4MUEpIHsJLyogY2hlY2sgZm9yIGVycm9yICovCi0JCXByaW50ZigiXG5GbGFzaCB3cml0ZSBlcnJvciAlMDJ4IGF0IGFkZHJlc3MgJTA4bHhcbiIsCi0JCQkoaW50KXZhbCwgKHVuc2lnbmVkIGxvbmcpZGVzdCk7Ci0JCWlmKHZhbCAmICgxPDwzKSkgewotCQkJcHJpbnRmKCJWb2x0YWdlIHJhbmdlIGVycm9yLlxuIik7Ci0JCQlyYyA9IEVSUl9QUk9HX0VSUk9SOwotCQkJZ290byBvdXRhaGVyZTsKLQkJfQotCQlpZih2YWwgJiAoMTw8MSkpIHsKLQkJCXByaW50ZigiRGV2aWNlIHByb3RlY3QgZXJyb3IuXG4iKTsKLQkJCXJjID0gRVJSX1BST1RFQ1RFRDsKLQkJCWdvdG8gb3V0YWhlcmU7Ci0JCX0KLQkJaWYodmFsICYgKDE8PDQpKSB7Ci0JCQlwcmludGYoIlByb2dyYW1taW5nIGVycm9yLlxuIik7Ci0JCQlyYyA9IEVSUl9QUk9HX0VSUk9SOwotCQkJZ290byBvdXRhaGVyZTsKLQkJfQotCQlyYyA9IEVSUl9QUk9HX0VSUk9SOwotCQlnb3RvIG91dGFoZXJlOwotCX0KLQotCW91dGFoZXJlOgotCi0JKmFkZHIgPSAweEZGOyAvKiByZWFkIGFycmF5IGNvbW1hbmQgKi8KLQlpZiAoZmxhZykgZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCXJldHVybiByYzsKLX0KLQotCi0vKioKLSAqIHdyaXRlX2J1ZjogLSBDb3B5IG1lbW9yeSB0byBmbGFzaC4KLSAqCi0gKiBAcGFyYW0gaW5mbzoKLSAqIEBwYXJhbSBzcmM6CXNvdXJjZSBvZiBjb3B5IHRyYW5zYWN0aW9uCi0gKiBAcGFyYW0gYWRkcjoJd2hlcmUgdG8gY29weSB0bwotICogQHBhcmFtIGNudDoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqCi0gKiBAcmV0dXJuCWVycm9yIGNvZGUKLSAqLwotCi1pbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgY3AsIHdwOwotCXVzaG9ydCBkYXRhOwotCWludCBsOwotCWludCBpLCByYzsKLQotCXdwID0gKGFkZHIgJiB+MSk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKWNwIDw8IDgpOwotCQl9Ci0JCWZvciAoOyBpPDIgJiYgY250PjA7ICsraSkgewotCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCA4KTsKLQkJCS0tY250OwotCQkJKytjcDsKLQkJfQotCQlmb3IgKDsgY250PT0wICYmIGk8MjsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKWNwIDw8IDgpOwotCQl9Ci0KLQkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0JCQlyZXR1cm4gKHJjKTsKLQkJfQotCQl3cCArPSAyOwotCX0KLQotCS8qCi0JICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0Ci0JICovCi0Jd2hpbGUgKGNudCA+PSAyKSB7Ci0JCS8qIGRhdGEgPSAqKCh2dXNob3J0KilzcmMpOyAqLwotCQlkYXRhID0gKigodXNob3J0KilzcmMpOwotCQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCXJldHVybiAocmMpOwotCQl9Ci0JCXNyYyArPSAyOwotCQl3cCAgKz0gMjsKLQkJY250IC09IDI7Ci0JfQotCi0JaWYgKGNudCA9PSAwKSByZXR1cm4gRVJSX09LOwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKLQkgKi8KLQlkYXRhID0gMDsKLQlmb3IgKGk9MCwgY3A9d3A7IGk8MiAmJiBjbnQ+MDsgKytpLCArK2NwKSB7Ci0JCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqc3JjKysgPDwgOCk7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaTwyOyArK2ksICsrY3ApIHsKLQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKiljcCA8PCA4KTsKLQl9Ci0KLQlyZXR1cm4gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9pbm5va29tL2lubm9rb20uYyBiL2JvYXJkL2lubm9rb20vaW5ub2tvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmRlN2UzLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2lubm9rb20vaW5ub2tvbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgsIHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGUKLSAqIEt5bGUgSGFycmlzLCBOZXh1cyBUZWNobm9sb2dpZXMsIEluYy4sIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKLSAqIE1hcml1cyBHcm9lZ2VyLCBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zIEdtYkgsIG1ncm9lZ2VyQHN5c2dvLmRlCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG5ldGRldi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KLSNpZmRlZiBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCi0jIGRlZmluZSBTSE9XX0JPT1RfUFJPR1JFU1MoYXJnKSAgICAgICAgc2hvd19ib290X3Byb2dyZXNzKGFyZykKLSNlbHNlCi0jIGRlZmluZSBTSE9XX0JPT1RfUFJPR1JFU1MoYXJnKQotI2VuZGlmCi0KLS8qKgotICogaTJjX2luaXRfYm9hcmQgLSByZXNldCBpMmMgYnVzLiBXaGVuIHRoZSBib2FyZCBpcyBwb3dlcmN5Y2xlZCBkdXJpbmcgYQotICogYnVzIHRyYW5zZmVyIGl0IG1pZ2h0IGhhbmc7IGZvciBkZXRhaWxzIHNlZSBkb2MvSTJDX0VkZ2VfQ29uZGl0aW9ucy4KLSAqIFRoZSBJbm5va29tIGJvYXJkIGhhcyBHUElPNzAgY29ubmVjdGVkIHRvIFNDTEsgd2hpY2ggY2FuIGJlIHRvZ2dsZWQKLSAqIHVudGlsIGFsbCBjaGlwcyB0aGluayB0aGF0IHRoZWlyIGN1cnJlbnQgY3ljbGVzIGFyZSBmaW5pc2hlZC4KLSAqLwotaW50IGkyY19pbml0X2JvYXJkKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBzZXQgZ3BpbyBwaW4gbG93IF9iZWZvcmVfIHdlIGNoYW5nZSBkaXJlY3Rpb24gdG8gb3V0cHV0ICAgICAgICAgICovCi0Jd3JpdGVsKEdQSU9fYml0KDcwKSwgR1BDUig3MCkpOwotCi0JLyogbm93IHRvZ2dsZSBiZXR3ZWVuIG91dHB1dD1sb3cgYW5kIGhpZ2gtaW1wZWRhbmNlICAgICAgICAgICAgICAgICAqLwotCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7Ci0JCXdyaXRlbChyZWFkbChHUERSKDcwKSkgfCBHUElPX2JpdCg3MCksIEdQRFIoNzApKTsgIC8qIG91dHB1dCAqLwotCQl1ZGVsYXkoMTApOwotCQl3cml0ZWwocmVhZGwoR1BEUig3MCkpICYgfkdQSU9fYml0KDcwKSwgR1BEUig3MCkpOyAvKiBpbnB1dCAgKi8KLQkJdWRlbGF5KDEwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIG1pc2NfaW5pdF9yOiAtIG1pc2MgaW5pdGlhbGlzYXRpb24gcm91dGluZXMKLSAqLwotCi1pbnQgbWlzY19pbml0X3Iodm9pZCkKLXsKLQljaGFyICpzdHI7Ci0KLQkvKiBkZXRlcm1pbmUgaWYgdGhlIHNvZnR3YXJlIHVwZGF0ZSBrZXkgaXMgcHJlc3NlZCBkdXJpbmcgc3RhcnR1cCAgICovCi0JaWYgKHJlYWRsKEdQTFIwKSAmIDB4MDAwMDA4MDApIHsKLQkJcHJpbnRmKCJ1c2luZyBib290Y21kX25vcm1hbCAoc3ctdXBkYXRlIGJ1dHRvbiBub3QgcHJlc3NlZClcbiIpOwotCQlzdHIgPSBnZXRlbnYoImJvb3RjbWRfbm9ybWFsIik7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmKCJ1c2luZyBib290Y21kX3VwZGF0ZSAoc3ctdXBkYXRlIGJ1dHRvbiBwcmVzc2VkKVxuIik7Ci0JCXN0ciA9IGdldGVudigiYm9vdGNtZF91cGRhdGUiKTsKLQl9Ci0KLQlzZXRlbnYoImJvb3RjbWQiLHN0cik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIGJvYXJkX2luaXQ6IC0gc2V0dXAgc29tZSBkYXRhIHN0cnVjdHVyZXMKLSAqCi0gKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2VzcwotICovCi0KLWludCBib2FyZF9pbml0ICh2b2lkKQotewotCS8qIFdlIGhhdmUgUkFNLCBkaXNhYmxlIGNhY2hlICovCi0JZGNhY2hlX2Rpc2FibGUoKTsKLQlpY2FjaGVfZGlzYWJsZSgpOwotCi0JZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9JTk5PS09NOwotCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweGEwMDAwMTAwOwotCWdkLT5iZC0+YmlfYmF1ZHJhdGUgPSBDT05GSUdfQkFVRFJBVEU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotZXh0ZXJuIHZvaWQgcHhhX2RyYW1faW5pdCh2b2lkKTsKLWludCBkcmFtX2luaXQodm9pZCkKLXsKLQlweGFfZHJhbV9pbml0KCk7Ci0JZ2QtPnJhbV9zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHJhbV9pbml0X2JhbmtzaXplKHZvaWQpCi17Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOwotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci19Ci0KLS8qKgotICogaW5ub2tvbV9zZXRfbGVkOiAtIHN3aXRjaCBMRURzIG9uIG9yIG9mZgotICoKLSAqIEBwYXJhbSBsZWQ6ICAgTEVEIHRvIHN3aXRjaCAoMCwxLDIpCi0gKiBAcGFyYW0gc3RhdGU6IHN3aXRjaCBvbiAoMSkgb3Igb2ZmICgwKQotICovCi0KLXZvaWQgaW5ub2tvbV9zZXRfbGVkKGludCBsZWQsIGludCBzdGF0ZSkKLXsKLQlzd2l0Y2gobGVkKSB7Ci0vKgotCQljYXNlIDA6IGlmIChzdGF0ZT09MSkgewotCQkJCUdQQ1IwIHw9IENTQjIyNl9VU0VSX0xFRDA7Ci0JCQl9IGVsc2UgaWYgKHN0YXRlPT0wKSB7Ci0JCQkJR1BTUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMDsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgMTogaWYgKHN0YXRlPT0xKSB7Ci0JCQkJR1BDUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMTsKLQkJCX0gZWxzZSBpZiAoc3RhdGU9PTApIHsKLQkJCQlHUFNSMCB8PSBDU0IyMjZfVVNFUl9MRUQxOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAyOiBpZiAoc3RhdGU9PTEpIHsKLQkJCQlHUENSMCB8PSBDU0IyMjZfVVNFUl9MRUQyOwotCQkJfSBlbHNlIGlmIChzdGF0ZT09MCkgewotCQkJCUdQU1IwIHw9IENTQjIyNl9VU0VSX0xFRDI7Ci0JCQl9Ci0JCQlicmVhazsKLSovCi0JfQotCi0JcmV0dXJuOwotfQotCi0KLS8qKgotICogc2hvd19ib290X3Byb2dyZXNzOiAtIGluZGljYXRlIHN0YXRlIG9mIHRoZSBib290IHByb2Nlc3MKLSAqCi0gKiBAcGFyYW0gc3RhdHVzOiBTdGF0dXMgbnVtYmVyIC0gc2VlIFJFQURNRSBmb3IgZGV0YWlscy4KLSAqCi0gKiBUaGUgQ1NCMjI2IGRvZXMgb25seSBoYXZlIDMgTEVEcywgc28gd2Ugc3dpdGNoIHRoZW0gb24gYXQgdGhlIG1vc3QKLSAqIGltcG9ydGFudCBzdGF0ZXMgKDEsIDUsIDE1KS4KLSAqLwotCi12b2lkIHNob3dfYm9vdF9wcm9ncmVzcyAoaW50IHN0YXR1cykKLXsKLQlzd2l0Y2goc3RhdHVzKSB7Ci0vKgotCQljYXNlICAxOiBjc2IyMjZfc2V0X2xlZCgwLDEpOyBicmVhazsKLQkJY2FzZSAgNTogY3NiMjI2X3NldF9sZWQoMSwxKTsgYnJlYWs7Ci0JCWNhc2UgMTU6IGNzYjIyNl9zZXRfbGVkKDIsMSk7IGJyZWFrOwotKi8KLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLSNpZmRlZiBDT05GSUdfQ01EX05FVAotaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19TTUM5MTExMQotCXJjID0gc21jOTExMTFfaW5pdGlhbGl6ZSgwLCBDT05GSUdfU01DOTExMTFfQkFTRSk7Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2tleW1pbGUva204M3h4L2ttODN4eF9pMmMuYyBiL2JvYXJkL2tleW1pbGUva204M3h4L2ttODN4eF9pMmMuYwppbmRleCBiZTE3Nzc1Li44ZGY5MmQ4IDEwMDY0NAotLS0gYS9ib2FyZC9rZXltaWxlL2ttODN4eC9rbTgzeHhfaTJjLmMKKysrIGIvYm9hcmQva2V5bWlsZS9rbTgzeHgva204M3h4X2kyYy5jCkBAIC00MSw3ICs0MSw2IEBACiB7CiAJc3RydWN0IGZzbF9pMmMgKmRldjsKIAlkZXYgPSAoc3RydWN0IGZzbF9pMmMgKikgKENPTkZJR19TWVNfSU1NUiArIENPTkZJR19TWVNfSTJDX09GRlNFVCk7Ci0JdWNoYXIJZHVtbXk7CiAJdWNoYXIgICBsYXN0OwogCWludCAgICAgbmJyX3JlYWQgPSAwOwogCWludCAgICAgaSA9IDA7CkBAIC01Miw3ICs1MSw3IEBACiAJdWRlbGF5KERFTEFZX0FCT1JUX1NFUSk7CiAJb3V0XzgoJmRldi0+Y3IsIChJMkNfQ1JfTUVOIHwgSTJDX0NSX01TVEEpKTsKIAl1ZGVsYXkoREVMQVlfQUJPUlRfU0VRKTsKLQlkdW1teSA9IGluXzgoJmRldi0+ZHIpOworCWluXzgoJmRldi0+ZHIpOwogCXVkZWxheShERUxBWV9BQk9SVF9TRVEpOwogCWxhc3QgPSBpbl84KCZkZXYtPmRyKTsKIAluYnJfcmVhZCsrOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL2xjZC5jIGIvYm9hcmQvbWNjMjAwL2xjZC5jCmluZGV4IDcyNjM2NmQuLmQ4Zjc1NGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL21jYzIwMC9sY2QuYworKysgYi9ib2FyZC9tY2MyMDAvbGNkLmMKQEAgLTU1LDYgKzU1LDkgQEAKICNkZWZpbmUgUFNPQ19SRVRSSUVTCTEwCS8qIGVhY2ggb2YgUFNPQ19XQUlUX1RJTUUgKi8KICNkZWZpbmUgUFNPQ19XQUlUX1RJTUUJMTAJLyogdXNlYyAqLwogCisjaW5jbHVkZSA8dmlkZW9fZm9udC5oPgorI2RlZmluZSBGT05UX1dJRFRICVZJREVPX0ZPTlRfV0lEVEgKKwogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKIC8qCkBAIC0xODUsNyArMTg4LDYgQEAKIH0KICNpZmRlZiBDT05GSUdfUFJPR1JFU1NCQVIKIAotI2RlZmluZSBGT05UX1dJRFRIICAgICAgOCAvKiB0aGUgc2FtZSBhcyBWSURFT19GT05UX1dJRFRIIGluIHZpZGVvX2ZvbnQuaCAqLwogdm9pZCBzaG93X3Byb2dyZXNzIChpbnQgc2l6ZSwgaW50IHRvdCkKIHsKIAlpbnQgY250OwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYyBiL2JvYXJkL21wbC9taXA0MDUvbWlwNDA1LmMKaW5kZXggZTkzZDk5NC4uOWQwZGI2NCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYworKysgYi9ib2FyZC9tcGwvbWlwNDA1L21pcDQwNS5jCkBAIC0yNDYsOCArMjQ2LDcgQEAKIAl1bnNpZ25lZCBjaGFyCXRycF9jbG9ja3MsCiAJCQl0cmNkX2Nsb2NrcywKIAkJCXRyYXNfY2xvY2tzLAotCQkJdHJjX2Nsb2NrcywKLQkJCXRjdHBfY2xvY2tzOworCQkJdHJjX2Nsb2NrczsKIAl1bnNpZ25lZCBjaGFyCWNhbF92YWw7CiAJdW5zaWduZWQgY2hhcgliYzsKIAl1bnNpZ25lZCBsb25nCXNkcmFtX3RpbSwgc2RyYW1fYmFuazsKQEAgLTM0NSw3ICszNDQsNiBAQAogCXRyY2RfY2xvY2tzID0gc2RyYW1fdGFibGVbaV0udHJjZDsJLyogMjBucyAvNy41IG5zIChkYXRhaW5bMjldKSAqLwogCXRyYXNfY2xvY2tzID0gc2RyYW1fdGFibGVbaV0udHJhczsJLyogNDRucyAvNy41IG5zICAoZGF0YWluWzMwXSkgKi8KIAkvKiBjdHAgPSAoKHRycCArIHRyYXMpIC0gdHJwIC0gdHJjZCkgPT4gdHJhcyAtIHRyY2QgKi8KLQl0Y3RwX2Nsb2NrcyA9IHNkcmFtX3RhYmxlW2ldLnRjdHA7CS8qIDQ0IC0gMjBucyA9IDI0bnMgKi8KIAkvKiB0cmNfY2xvY2tzIGlzIHN1bSBvZiB0cnBfY2xvY2tzICsgdHJhc19jbG9ja3MgKi8KIAl0cmNfY2xvY2tzID0gdHJwX2Nsb2NrcyArIHRyYXNfY2xvY2tzOwogCS8qIGdldCBTRFJBTSB0aW1pbmcgcmVnaXN0ZXIgKi8KQEAgLTYyNiwxMCArNjI0LDkgQEAKIHsKIAogCXVuc2lnbmVkIGxvbmcgYmFua19yZWdbNF0sIHRtcCwgYmFua19zaXplOwotCWludCBpLCBkczsKKwlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIFRvdGFsU2l6ZTsKIAotCWRzID0gMDsKIAkvKiBzaW5jZSB0aGUgRFJBTSBjb250cm9sbGVyIGlzIGFsbHJlYWR5IHNldCB1cCwgY2FsY3VsYXRlIHRoZSBzaXplIHdpdGggdGhlCiAJICAgYmFuayByZWdpc3RlcnMgICAgKi8KIAltdGRjciAoU0RSQU0wX0NGR0FERFIsIFNEUkFNMF9CMENSKTsKQEAgLTY0Niw4ICs2NDMsNyBAQAogCQkJdG1wID0gKGJhbmtfcmVnW2ldID4+IDE3KSAmIDB4NzsKIAkJCWJhbmtfc2l6ZSA9IDQgPDwgdG1wOwogCQkJVG90YWxTaXplICs9IGJhbmtfc2l6ZTsKLQkJfSBlbHNlCi0JCQlkcyA9IDE7CisJCX0KIAl9CiAJbXRkY3IgKFNEUkFNMF9DRkdBRERSLCBTRFJBTTBfRUNDQ0ZHKTsKIAl0bXAgPSBtZmRjciAoU0RSQU0wX0NGR0RBVEEpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3BpcDQwNS9waXA0MDUuYyBiL2JvYXJkL21wbC9waXA0MDUvcGlwNDA1LmMKaW5kZXggN2I0OGMwNi4uYTFmMGI2NSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3BpcDQwNS9waXA0MDUuYworKysgYi9ib2FyZC9tcGwvcGlwNDA1L3BpcDQwNS5jCkBAIC0xNzksNyArMTc5LDYgQEAKIAogaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKIHsKLQl1bnNpZ25lZCBjaGFyIGRhdGFvdXRbMV07CiAJdW5zaWduZWQgY2hhciBkYXRhaW5bMTI4XTsKIAl1bnNpZ25lZCBsb25nIHNkcmFtX3NpemUgPSAwOwogCVNEUkFNX1NFVFVQICp0ID0gKFNEUkFNX1NFVFVQICopIHNkcmFtX3NldHVwX3RhYmxlOwpAQCAtMTg5LDkgKzE4OCwxMyBAQAogCXVuc2lnbmVkIHNob3J0IGk7CiAJdW5zaWduZWQgY2hhciByb3dzLCBjb2xzLCBiYW5rcywgc2RyYW1fYmFua3MsIGRlbnNpdHk7CiAJdW5zaWduZWQgY2hhciBzdXBwb3J0ZWRfY2FsLCB0cnBfY2xvY2tzLCB0cmNkX2Nsb2NrcywgdHJhc19jbG9ja3MsCi0JCQl0cmNfY2xvY2tzLCB0Y3RwX2Nsb2NrczsKKwkJdHJjX2Nsb2NrczsKIAl1bnNpZ25lZCBjaGFyIGNhbF9pbmRleCwgY2FsX3ZhbCwgc3BkX3ZlcnNpb24sIHNwZF9jaGtzdW07CiAJdW5zaWduZWQgY2hhciBidWZbOF07CisjaWZkZWYgU0RSQU1fREVCVUcKKwl1bnNpZ25lZCBjaGFyIHRjdHBfY2xvY2tzOworI2VuZGlmCisKIAkvKiBzZXQgdXAgdGhlIGNvbmZpZyBwb3J0ICovCiAJbXRkY3IgKEVCQzBfQ0ZHQUREUiwgUEI3QVApOwogCW10ZGNyIChFQkMwX0NGR0RBVEEsIENPTkZJR19QT1JUX0FQKTsKQEAgLTIxMCw3ICsyMTMsNiBAQAogCiAJLyogUmVhZCBTZXJpYWwgUHJlc2VuY2UgRGV0ZWN0IEluZm9ybWF0aW9uICovCiAJaTJjX2luaXQgKENPTkZJR19TWVNfSTJDX1NQRUVELCBDT05GSUdfU1lTX0kyQ19TTEFWRSk7Ci0JZGF0YW91dFswXSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQogCQlkYXRhaW5baV0gPSAxMjc7CiAJaTJjX3JlYWQoU1BEX0VFUFJPTV9BRERSRVNTLDAsMSxkYXRhaW4sMTI4KTsKQEAgLTMwNywxMiArMzA5LDEzIEBACiAKIAkvKiB0cmNfY2xvY2tzIGlzIHN1bSBvZiB0cnBfY2xvY2tzICsgdHJhc19jbG9ja3MgKi8KIAl0cmNfY2xvY2tzID0gdHJwX2Nsb2NrcyArIHRyYXNfY2xvY2tzOworCisjaWZkZWYgU0RSQU1fREVCVUcKIAkvKiBjdHAgPSAoKHRycCArIHRyYXMpIC0gdHJwIC0gdHJjZCkgPT4gdHJhcyAtIHRyY2QgKi8KIAl0Y3RwX2Nsb2NrcyA9CiAJCQkoKE5TdG8xMFBTIChkYXRhaW5bMzBdKSAtIE5TdG8xMFBTIChkYXRhaW5bMjldKSkgKwogCQkJICh0bWVtY2xrIC0gMSkpIC8gdG1lbWNsazsKIAotI2lmZGVmIFNEUkFNX0RFQlVHCiAJc2VyaWFsX3B1dHMgKCJjX1JQOiAiKTsKIAl3cml0ZV9oZXggKHRycF9jbG9ja3MpOwogCXNlcmlhbF9wdXRzICgiXG5jX1JDRDogIik7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuYyBiL2JvYXJkL21wbC92Y21hOS92Y21hOS5jCmluZGV4IGU2MzYyNWIuLjlmMjU5YzIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC92Y21hOS92Y21hOS5jCisrKyBiL2JvYXJkL21wbC92Y21hOS92Y21hOS5jCkBAIC03Miw5ICs3Miw2IEBACiAKIGludCBib2FyZF9pbml0KHZvaWQpCiB7Ci0JLyogYXJjaCBudW1iZXIgb2YgVkNNQTktQm9hcmQgKi8KLQlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX01QTF9WQ01BOTsKLQogCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KIAlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gMHgzMDAwMDEwMDsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvcm9uZXRpeC9wbTkyNjEvcG05MjYxLmMgYi9ib2FyZC9yb25ldGl4L3BtOTI2MS9wbTkyNjEuYwppbmRleCA4NzFiOTRhLi5iMjZlMzNhIDEwMDY0NAotLS0gYS9ib2FyZC9yb25ldGl4L3BtOTI2MS9wbTkyNjEuYworKysgYi9ib2FyZC9yb25ldGl4L3BtOTI2MS9wbTkyNjEuYwpAQCAtMjQ4LDkgKzI0OCw2IEBACiAJCTEgPDwgQVRNRUxfSURfUElPQywKIAkJJnBtYy0+cGNlcik7CiAKLQkvKiBhcmNoIG51bWJlciBvZiBQTTkyNjEtQm9hcmQgKi8KLQlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX1BNOTI2MTsKLQogCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KIAlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gUEhZU19TRFJBTSArIDB4MTAwOwogCmRpZmYgLS1naXQgYS9ib2FyZC9yb25ldGl4L3BtOTI2My9wbTkyNjMuYyBiL2JvYXJkL3JvbmV0aXgvcG05MjYzL3BtOTI2My5jCmluZGV4IDRiNmZkNjYuLjMzNWVmYmEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3JvbmV0aXgvcG05MjYzL3BtOTI2My5jCisrKyBiL2JvYXJkL3JvbmV0aXgvcG05MjYzL3BtOTI2My5jCkBAIC0zNDgsOSArMzQ4LDYgQEAKIAkJKDEgPDwgQVRNRUxfSURfUElPQiksCiAJCSZwbWMtPnBjZXIpOwogCi0JLyogYXJjaCBudW1iZXIgb2YgQVQ5MVNBTTkyNjNFSy1Cb2FyZCAqLwotCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfUE05MjYzOwotCiAJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLwogCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBQSFlTX1NEUkFNICsgMHgxMDA7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL3JvbmV0aXgvcG05ZzQ1L3BtOWc0NS5jIGIvYm9hcmQvcm9uZXRpeC9wbTlnNDUvcG05ZzQ1LmMKaW5kZXggZjMzNzRhNC4uOTYxZDE5MyAxMDA2NDQKLS0tIGEvYm9hcmQvcm9uZXRpeC9wbTlnNDUvcG05ZzQ1LmMKKysrIGIvYm9hcmQvcm9uZXRpeC9wbTlnNDUvcG05ZzQ1LmMKQEAgLTEzOSw4ICsxMzksNiBAQAogCQkoMSA8PCBBVE1FTF9JRF9QSU9DKSB8CiAJCSgxIDw8IEFUTUVMX0lEX1BJT0RFKSwgJnBtYy0+cGNlcik7CiAKLQkvKiBhcmNoIG51bWJlciBvZiBBVDkxU0FNOU0xMEc0NUVLLUJvYXJkICovCi0JZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9QTTlHNDU7CiAJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLwogCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBQSFlTX1NEUkFNICsgMHgxMDA7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzg1NDgvc2JjODU0OC5jIGIvYm9hcmQvc2JjODU0OC9zYmM4NTQ4LmMKaW5kZXggZTFhM2VhMy4uMjYwOTVhNSAxMDA2NDQKLS0tIGEvYm9hcmQvc2JjODU0OC9zYmM4NTQ4LmMKKysrIGIvYm9hcmQvc2JjODU0OC9zYmM4NTQ4LmMKQEAgLTc3LDEyICs3NywxMCBAQAogCXZvbGF0aWxlIGZzbF9sYmNfdCAqbGJjID0gTEJDX0JBU0VfQUREUjsKIAogCXVpbnQgY2xrZGl2OwotCXVpbnQgbGJjX2h6OwogCXN5c19pbmZvX3Qgc3lzaW5mbzsKIAogCWdldF9zeXNfaW5mbygmc3lzaW5mbyk7CiAJY2xrZGl2ID0gKGluX2JlMzIoJmxiYy0+bGNycikgJiBMQ1JSX0NMS0RJVikgKiAyOwotCWxiY19oeiA9IHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDEwMDAwMDAgLyBjbGtkaXY7CiAKIAlvdXRfYmUzMigmZ3VyLT5sYml1aXBsbGRjcjEsIDB4MDAwNzgwODApOwogCWlmIChjbGtkaXYgPT0gMTYpIHsKZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzg1NjAvc2JjODU2MC5jIGIvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMKaW5kZXggYzVmZTkyZS4uOThiYzdkZiAxMDA2NDQKLS0tIGEvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMKKysrIGIvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogdm9pZAogZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCiB7Ci0JaW50IG5vZGUsIHRtcFsyXTsKKwlpbnQgbm9kZTsKICNpZmRlZiBDT05GSUdfUENJCiAJY29uc3QgY2hhciAqcGF0aDsKICNlbmRpZgpAQCAtMzU2LDcgKzM1Niw2IEBACiAJZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKIAogCW5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoYmxvYiwgIi9hbGlhc2VzIik7Ci0JdG1wWzBdID0gMDsKIAlpZiAobm9kZSA+PSAwKSB7CiAjaWZkZWYgQ09ORklHX1BDSQogCQlwYXRoID0gZmR0X2dldHByb3AoYmxvYiwgbm9kZSwgInBjaTAiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2JvYXJkL3N5dGVjby96bXgyNS96bXgyNS5jIGIvYm9hcmQvc3l0ZWNvL3pteDI1L3pteDI1LmMKaW5kZXggYTg5ZWUxYS4uYzU2YjE5NSAxMDA2NDQKLS0tIGEvYm9hcmQvc3l0ZWNvL3pteDI1L3pteDI1LmMKKysrIGIvYm9hcmQvc3l0ZWNvL3pteDI1L3pteDI1LmMKQEAgLTEyOCw3ICsxMjgsNiBAQAogCiAjaWZkZWYgQ09ORklHX0ZFQ19NWEMKIAlzdHJ1Y3QgaW9tdXhjX211eF9jdGwgKm11eGN0bDsKLQlzdHJ1Y3QgaW9tdXhjX3BhZF9jdGwgKnBhZGN0bDsKIAl1MzIgZ3Bpb19tdXhfbW9kZTIgPSBNWDI1X1BJTl9NVVhfTU9ERSgyKTsKIAl1MzIgZ3Bpb19tdXhfbW9kZTUgPSBNWDI1X1BJTl9NVVhfTU9ERSg1KTsKIApAQCAtMTQ0LDcgKzE0Myw2IEBACiAJICogRkVDX1JYX0VSUjogRkVDX1JYX0VSUiBpcyBBTFQgMiBtb2RlIG9mIHBpbiBSMgogCSAqLwogCW11eGN0bCA9IChzdHJ1Y3QgaW9tdXhjX211eF9jdGwgKilJTVhfSU9QQURNVVhfQkFTRTsKLQlwYWRjdGwgPSAoc3RydWN0IGlvbXV4Y19wYWRfY3RsICopSU1YX0lPUEFEQ1RMX0JBU0U7CiAKIAl3cml0ZWwoZ3Bpb19tdXhfbW9kZTUsICZtdXhjdGwtPnBhZF91cGxsX2J5cGNsayk7CiAJd3JpdGVsKGdwaW9fbXV4X21vZGUyLCAmbXV4Y3RsLT5wYWRfdWFydDJfY3RzKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZSBiL2JvYXJkL3RpL29tYXA1X2V2bS9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDg1JQpjb3B5IGZyb20gYm9hcmQvY3NiMjI2L01ha2VmaWxlCmNvcHkgdG8gYm9hcmQvdGkvb21hcDVfZXZtL01ha2VmaWxlCmluZGV4IDZmZTliZWMuLmZhODFkNjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZQorKysgYi9ib2FyZC90aS9vbWFwNV9ldm0vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CisjIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTI1LDcgKzI1LDcgQEAKIAogTElCCT0gJChvYmopbGliJChCT0FSRCkubwogCi1DT0JKUwk6PSBjc2IyMjYubyBmbGFzaC5vCitDT0JKUwk6PSBldm0ubwogCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKQEAgLTMzLDYgKzMzLDEyIEBACiAkKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoY2FsbCBjbWRfbGlua19vX3RhcmdldCwgJChPQkpTKSkKIAorY2xlYW46CisJcm0gLWYgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldApkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvb21hcDVfZXZtL2V2bS5jIGIvYm9hcmQvdGkvb21hcDVfZXZtL2V2bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMGNiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC90aS9vbWFwNV9ldm0vZXZtLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCwgPHd3dy50aS5jb20+CisgKiBBbmVlc2ggViAgICAgICA8YW5lZXNoQHRpLmNvbT4KKyAqIFN0ZXZlIFNha29tYW4gIDxzdGV2ZUBzYWtvbWFuLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8dHdsNjAzMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tY19ob3N0X2RlZi5oPgorCisjaW5jbHVkZSAibXV4X2RhdGEuaCIKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK2NvbnN0IHN0cnVjdCBvbWFwX3N5c2luZm8gc3lzaW5mbyA9IHsKKwkiQm9hcmQ6IE9NQVA1NDMwIEVWTVxuIgorfTsKKworLyoqCisgKiBAYnJpZWYgYm9hcmRfaW5pdAorICoKKyAqIEByZXR1cm4gMAorICovCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCWdwbWNfaW5pdCgpOworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfT01BUDVfU0VWTTsKKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gKDB4ODAwMDAwMDAgKyAweDEwMCk7IC8qIGJvb3QgcGFyYW0gYWRkciAqLworCisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQGJyaWVmIG1pc2NfaW5pdF9yIC0gQ29uZmlndXJlIEVWTSBib2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucworICogc3VjaCBhcyBwb3dlciBjb25maWd1cmF0aW9ucywgZXRoZXJuZXQgaW5pdGlhbGl6YXRpb24gYXMgcGhhc2UyIG9mCisgKiBib290IHNlcXVlbmNlCisgKgorICogQHJldHVybiAwCisgKi8KK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworI2lmZGVmIENPTkZJR19UV0w2MDMwX1BPV0VSCisJdHdsNjAzMF9pbml0X2JhdHRlcnlfY2hhcmdpbmcoKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCit2b2lkIHNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKHZvaWQpCit7CisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KKwkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOworCisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KKwkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOworfQorCit2b2lkIHNldF9tdXhjb25mX3JlZ3Nfbm9uX2Vzc2VudGlhbCh2b2lkKQoreworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX0NPUkUsIGNvcmVfcGFkY29uZl9hcnJheV9ub25fZXNzZW50aWFsLAorCQkgICBzaXplb2YoY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwpIC8KKwkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOworCisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwgd2t1cF9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwsCisJCSAgIHNpemVvZih3a3VwX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCkgLworCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7Cit9CisKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BMX0JVSUxEKSAmJiBkZWZpbmVkKENPTkZJR19HRU5FUklDX01NQykKK2ludCBib2FyZF9tbWNfaW5pdChiZF90ICpiaXMpCit7CisJb21hcF9tbWNfaW5pdCgwKTsKKwlvbWFwX21tY19pbml0KDEpOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC90aS9vbWFwNV9ldm0vbXV4X2RhdGEuaCBiL2JvYXJkL3RpL29tYXA1X2V2bS9tdXhfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZjQ3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC90aS9vbWFwNV9ldm0vbXV4X2RhdGEuaApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkLCA8d3d3LnRpLmNvbT4KKyAqCisgKglCYWxhamkgS3Jpc2huYW1vb3J0aHkJPGJhbGFqaXRrQHRpLmNvbT4KKyAqCUFuZWVzaCBWCQk8YW5lZXNoQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9FVk01NDMwX01VWF9EQVRBX0gKKyNkZWZpbmUgX0VWTTU0MzBfTVVYX0RBVEFfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4X29tYXA1Lmg+CisKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsW10gPSB7CisKK3tHUE1DX0FEMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQwICovCit7R1BNQ19BRDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MSAqLwore0dQTUNfQUQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDIgKi8KK3tHUE1DX0FEMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQzICovCit7R1BNQ19BRDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NCAqLwore0dQTUNfQUQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDUgKi8KK3tHUE1DX0FENiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ2ICovCit7R1BNQ19BRDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NyAqLwore0dQTUNfTk9FLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMSl9LAkgLyogc2RtbWMyX2NsayAqLwore0dQTUNfTldFLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2NtZCAqLwore1NETU1DMV9DTEssIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCSAvKiBzZG1tYzFfY2xrICovCit7U0RNTUMxX0NNRCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9jbWQgKi8KK3tTRE1NQzFfREFUMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQwICovCit7U0RNTUMxX0RBVDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MSAqLwore1NETU1DMV9EQVQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDIgKi8KK3tTRE1NQzFfREFUMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQzICovCit7U0RNTUMxX0RBVDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NCAqLwore1NETU1DMV9EQVQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDUgKi8KK3tTRE1NQzFfREFUNiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ2ICovCit7U0RNTUMxX0RBVDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NyAqLwore1VBUlQzX0NUU19SQ1RYLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkvKiB1YXJ0M190eCAqLwore1VBUlQzX1JUU19TRCwgKE0wKX0sCQkJCQkvKiB1YXJ0M19ydHNfc2QgKi8KK3tVQVJUM19SWF9JUlJYLCAoSUVOIHwgTTApfSwJCQkJLyogdWFydDNfcnggKi8KK3tVQVJUM19UWF9JUlRYLCAoTTApfQkJCQkJLyogdWFydDNfdHggKi8KKworfTsKKworY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxbXSA9IHsKKwore1BBRDFfU1JfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwgLyogc3Jfc2NsICovCit7UEFEMF9TUl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LCAvKiBzcl9zZGEgKi8KK3tQQUQxX1NZU18zMkssIChJRU4gfCBNMCl9CSAvKiBzeXNfMzJrICovCisKK307CisKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb3JlX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbFtdID0geworCXtHUE1DX0FEOCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0zKX0sCS8qIGdwaW9fMzIgKi8KKwl7R1BNQ19BRDksIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18zMyAqLworCXtHUE1DX0FEMTAsIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18zNCAqLworCXtHUE1DX0FEMTEsIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18zNSAqLworCXtHUE1DX0FEMTIsIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18zNiAqLworCXtHUE1DX0FEMTMsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0zKX0sCS8qIGdwaW9fMzcgKi8KKwl7R1BNQ19BRDE0LCAoUFREIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMyl9LAkvKiBncGlvXzM4ICovCisJe0dQTUNfQUQxNSwgKFBURCB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9PVVRfUFREIHwgTTMpfSwJLyogZ3Bpb18zOSAqLworCXtHUE1DX0ExNiwgKE0zKX0sCQkJCQkJLyogZ3Bpb180MCAqLworCXtHUE1DX0ExNywgKFBURCB8IE0zKX0sCQkJCQkJLyogZ3Bpb180MSAqLworCXtHUE1DX0ExOCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIGtwZF9yb3c2ICovCisJe0dQTUNfQTE5LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzcgKi8KKwl7R1BNQ19BMjAsIChJRU4gfCBNMyl9LAkJCQkJCS8qIGdwaW9fNDQgKi8KKwl7R1BNQ19BMjEsIChNMyl9LAkJCQkJCS8qIGdwaW9fNDUgKi8KKwl7R1BNQ19BMjIsIChPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkJCS8qIGtwZF9jb2w2ICovCisJe0dQTUNfQTIzLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sNyAqLworCXtHUE1DX0EyNCwgKFBURCB8IE0zKX0sCQkJCQkJLyogZ3Bpb180OCAqLworCXtHUE1DX0EyNSwgKFBURCB8IE0zKX0sCQkJCQkJLyogZ3Bpb180OSAqLworCXtHUE1DX05DUzAsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTAgKi8KKwl7R1BNQ19OQ1MxLCAoSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fNTEgKi8KKwl7R1BNQ19OQ1MyLCAoSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fNTIgKi8KKwl7R1BNQ19OQ1MzLCAoSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fNTMgKi8KKwl7R1BNQ19OV1AsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTQgKi8KKwl7R1BNQ19DTEssIChQVEQgfCBNMyl9LAkJCQkJCS8qIGdwaW9fNTUgKi8KKwl7R1BNQ19OQURWX0FMRSwgKE0zKX0sCQkJCQkJLyogZ3Bpb181NiAqLworCXtHUE1DX05CRTBfQ0xFLCAoTTMpfSwJCQkJCQkvKiBncGlvXzU5ICovCisJe0dQTUNfTkJFMSwgKFBURCB8IE0zKX0sCQkJCQkvKiBncGlvXzYwICovCisJe0dQTUNfV0FJVDAsIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb182MSAqLworCXtHUE1DX1dBSVQxLCAoSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fNjIgKi8KKwl7QzJDX0RBVEExMSwgKFBURCB8IE0zKX0sCQkJCQkvKiBncGlvXzEwMCAqLworCXtDMkNfREFUQTEyLCAoTTEpfSwJCQkJCQkvKiBkc2kxX3RlMCAqLworCXtDMkNfREFUQTEzLCAoUFREIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTAyICovCisJe0MyQ19EQVRBMTQsIChNMSl9LAkJCQkJCS8qIGRzaTJfdGUwICovCisJe0MyQ19EQVRBMTUsIChQVEQgfCBNMyl9LAkJCQkJLyogZ3Bpb18xMDQgKi8KKwl7SERNSV9IUEQsIChNMCl9LAkJCQkJCS8qIGhkbWlfaHBkICovCisJe0hETUlfQ0VDLCAoTTApfSwJCQkJCQkvKiBoZG1pX2NlYyAqLworCXtIRE1JX0REQ19TQ0wsIChQVFUgfCBNMCl9LAkJCQkJLyogaGRtaV9kZGNfc2NsICovCisJe0hETUlfRERDX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGhkbWlfZGRjX3NkYSAqLworCXtDU0kyMV9EWDAsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjFfZHgwICovCisJe0NTSTIxX0RZMCwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMV9keTAgKi8KKwl7Q1NJMjFfRFgxLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIxX2R4MSAqLworCXtDU0kyMV9EWTEsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjFfZHkxICovCisJe0NTSTIxX0RYMiwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMV9keDIgKi8KKwl7Q1NJMjFfRFkyLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIxX2R5MiAqLworCXtDU0kyMV9EWDMsIChQVEQgfCBNNyl9LAkJCQkJLyogY3NpMjFfZHgzICovCisJe0NTSTIxX0RZMywgKFBURCB8IE03KX0sCQkJCQkvKiBjc2kyMV9keTMgKi8KKwl7Q1NJMjFfRFg0LCAoUFREIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTcpfSwJCS8qIGNzaTIxX2R4NCAqLworCXtDU0kyMV9EWTQsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNyl9LAkJLyogY3NpMjFfZHk0ICovCisJe0NTSTIyX0RYMCwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMl9keDAgKi8KKwl7Q1NJMjJfRFkwLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIyX2R5MCAqLworCXtDU0kyMl9EWDEsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjJfZHgxICovCisJe0NTSTIyX0RZMSwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMl9keTEgKi8KKwl7Q0FNX1NIVVRURVIsIChPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBjYW1fc2h1dHRlciAqLworCXtDQU1fU1RST0JFLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogY2FtX3N0cm9iZSAqLworCXtDQU1fR0xPQkFMUkVTRVQsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0zKX0sCS8qIGdwaW9fODMgKi8KKwl7VVNCQjFfVUxQSVRMTF9DTEssIChJRU4gfCBPRkZfRU4gfCBPRkZfSU4gfCBNMSl9LAkJLyogaHNpMV9jYXdha2UgKi8KKwl7VVNCQjFfVUxQSVRMTF9TVFAsIChJRU4gfCBPRkZfRU4gfCBPRkZfSU4gfCBNMSl9LAkJLyogaHNpMV9jYWRhdGEgKi8KKwl7VVNCQjFfVUxQSVRMTF9ESVIsIChJRU4gfCBPRkZfRU4gfCBPRkZfSU4gfCBNMSl9LAkJLyogaHNpMV9jYWZsYWcgKi8KKwl7VVNCQjFfVUxQSVRMTF9OWFQsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2FjcmVhZHkgKi8KKwl7VVNCQjFfVUxQSVRMTF9EQVQwLCAoT0ZGX0VOIHwgTTEpfSwJCQkJLyogaHNpMV9hY3dha2UgKi8KKwl7VVNCQjFfVUxQSVRMTF9EQVQxLCAoT0ZGX0VOIHwgTTEpfSwJCQkJLyogaHNpMV9hY2RhdGEgKi8KKwl7VVNCQjFfVUxQSVRMTF9EQVQyLCAoT0ZGX0VOIHwgTTEpfSwJCQkJLyogaHNpMV9hY2ZsYWcgKi8KKwl7VVNCQjFfVUxQSVRMTF9EQVQzLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX0lOIHwgTTEpfSwJCS8qIGhzaTFfY2FyZWFkeSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDQsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDQgKi8KKwl7VVNCQjFfVUxQSVRMTF9EQVQ1LCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQ1ICovCisJe1VTQkIxX1VMUElUTExfREFUNiwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0NiAqLworCXtVU0JCMV9VTFBJVExMX0RBVDcsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDcgKi8KKwl7VVNCQjFfSFNJQ19EQVRBLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogdXNiYjFfaHNpY19kYXRhICovCisJe1VTQkIxX0hTSUNfU1RST0JFLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogdXNiYjFfaHNpY19zdHJvYmUgKi8KKwl7VVNCQzFfSUNVU0JfRFAsIChJRU4gfCBNMCl9LAkJCQkJLyogdXNiYzFfaWN1c2JfZHAgKi8KKwl7VVNCQzFfSUNVU0JfRE0sIChJRU4gfCBNMCl9LAkJCQkJLyogdXNiYzFfaWN1c2JfZG0gKi8KKwl7QUJFX01DQlNQMl9DTEtYLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX21jYnNwMl9jbGt4ICovCisJe0FCRV9NQ0JTUDJfRFIsIChJRU4gfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBhYmVfbWNic3AyX2RyICovCisJe0FCRV9NQ0JTUDJfRFgsIChPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkJLyogYWJlX21jYnNwMl9keCAqLworCXtBQkVfTUNCU1AyX0ZTWCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9tY2JzcDJfZnN4ICovCisJe0FCRV9NQ0JTUDFfQ0xLWCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9tY2JzcDFfY2xreCAqLworCXtBQkVfTUNCU1AxX0RSLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogYWJlX21jYnNwMV9kciAqLworCXtBQkVfTUNCU1AxX0RYLCAoT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJCS8qIGFiZV9tY2JzcDFfZHggKi8KKwl7QUJFX01DQlNQMV9GU1gsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfbWNic3AxX2ZzeCAqLworCXtBQkVfUERNX1VMX0RBVEEsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX3VsX2RhdGEgKi8KKwl7QUJFX1BETV9ETF9EQVRBLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX3BkbV9kbF9kYXRhICovCisJe0FCRV9QRE1fRlJBTUUsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX2ZyYW1lICovCisJe0FCRV9QRE1fTEJfQ0xLLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX3BkbV9sYl9jbGsgKi8KKwl7QUJFX0NMS1MsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfY2xrcyAqLworCXtBQkVfRE1JQ19DTEsxLCAoTTApfSwJCQkJCQkvKiBhYmVfZG1pY19jbGsxICovCisJe0FCRV9ETUlDX0RJTjEsIChJRU4gfCBNMCl9LAkJCQkJLyogYWJlX2RtaWNfZGluMSAqLworCXtBQkVfRE1JQ19ESU4yLCAoSUVOIHwgTTApfSwJCQkJCS8qIGFiZV9kbWljX2RpbjIgKi8KKwl7QUJFX0RNSUNfRElOMywgKElFTiB8IE0wKX0sCQkJCQkvKiBhYmVfZG1pY19kaW4zICovCisJe1VBUlQyX0NUUywgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiB1YXJ0Ml9jdHMgKi8KKwl7VUFSVDJfUlRTLCAoTTApfSwJCQkJCQkvKiB1YXJ0Ml9ydHMgKi8KKwl7VUFSVDJfUlgsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogdWFydDJfcnggKi8KKwl7VUFSVDJfVFgsIChNMCl9LAkJCQkJCS8qIHVhcnQyX3R4ICovCisJe0hEUV9TSU8sIChNMyl9LAkJCQkJCS8qIGdwaW9fMTI3ICovCisJe01DU1BJMV9DTEssIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogbWNzcGkxX2NsayAqLworCXtNQ1NQSTFfU09NSSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfc29taSAqLworCXtNQ1NQSTFfU0lNTywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfc2ltbyAqLworCXtNQ1NQSTFfQ1MwLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogbWNzcGkxX2NzMCAqLworCXtNQ1NQSTFfQ1MxLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTMpfSwJLyogbWNzcGkxX2NzMSAqLworCXtNQ1NQSTFfQ1MyLCAoUFRVIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVFUgfCBNMyl9LAkJLyogZ3Bpb18xMzkgKi8KKwl7TUNTUEkxX0NTMywgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE0MCAqLworCXtTRE1NQzVfQ0xLLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogc2RtbWM1X2NsayAqLworCXtTRE1NQzVfQ01ELCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWM1X2NtZCAqLworCXtTRE1NQzVfREFUMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jNV9kYXQwICovCisJe1NETU1DNV9EQVQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWM1X2RhdDEgKi8KKwl7U0RNTUM1X0RBVDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzVfZGF0MiAqLworCXtTRE1NQzVfREFUMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jNV9kYXQzICovCisJe01DU1BJNF9DTEssIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogbWNzcGk0X2NsayAqLworCXtNQ1NQSTRfU0lNTywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTRfc2ltbyAqLworCXtNQ1NQSTRfU09NSSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTRfc29taSAqLworCXtNQ1NQSTRfQ1MwLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogbWNzcGk0X2NzMCAqLworCXtVQVJUNF9SWCwgKElFTiB8IE0wKX0sCQkJCQkJLyogdWFydDRfcnggKi8KKwl7VUFSVDRfVFgsIChNMCl9LAkJCQkJCS8qIHVhcnQ0X3R4ICovCisJe1VTQkIyX1VMUElUTExfQ0xLLCAoUFREIHwgSUVOIHwgTTMpfSwJCQkJLyogZ3Bpb18xNTcgKi8KKwl7VVNCQjJfVUxQSVRMTF9TVFAsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTIzICovCisJe1VTQkIyX1VMUElUTExfRElSLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGEyMiAqLworCXtVU0JCMl9VTFBJVExMX05YVCwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMjEgKi8KKwl7VVNCQjJfVUxQSVRMTF9EQVQwLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGEyMCAqLworCXtVU0JCMl9VTFBJVExMX0RBVDEsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTE5ICovCisJe1VTQkIyX1VMUElUTExfREFUMiwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMTggKi8KKwl7VVNCQjJfVUxQSVRMTF9EQVQzLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGExNSAqLworCXtVU0JCMl9VTFBJVExMX0RBVDQsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTE0ICovCisJe1VTQkIyX1VMUElUTExfREFUNSwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMTMgKi8KKwl7VVNCQjJfVUxQSVRMTF9EQVQ2LCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGExMiAqLworCXtVU0JCMl9VTFBJVExMX0RBVDcsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTExICovCisJe1VTQkIyX0hTSUNfREFUQSwgKFBURCB8IE9GRl9FTiB8IE9GRl9PVVRfUFRVIHwgTTMpfSwJCS8qIGdwaW9fMTY5ICovCisJe1VTQkIyX0hTSUNfU1RST0JFLCAoUFREIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVFUgfCBNMyl9LAkJLyogZ3Bpb18xNzAgKi8KKwl7VU5JUFJPX1RYMCwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDAgKi8KKwl7VU5JUFJPX1RZMCwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDEgKi8KKwl7VU5JUFJPX1RYMSwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDIgKi8KKwl7VU5JUFJPX1RZMSwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDMgKi8KKwl7VU5JUFJPX1RYMiwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDQgKi8KKwl7VU5JUFJPX1RZMiwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDUgKi8KKwl7VU5JUFJPX1JYMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIGtwZF9yb3cwICovCisJe1VOSVBST19SWTAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93MSAqLworCXtVTklQUk9fUlgxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzIgKi8KKwl7VU5JUFJPX1JZMSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIGtwZF9yb3czICovCisJe1VOSVBST19SWDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93NCAqLworCXtVTklQUk9fUlkyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzUgKi8KKwl7VVNCQTBfT1RHX0NFLCAoUFREIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkvKiB1c2JhMF9vdGdfY2UgKi8KKwl7VVNCQTBfT1RHX0RQLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJCS8qIHVzYmEwX290Z19kcCAqLworCXtVU0JBMF9PVEdfRE0sIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogdXNiYTBfb3RnX2RtICovCisJe0ZSRUZfQ0xLMV9PVVQsIChNMCl9LAkJCQkJCS8qIGZyZWZfY2xrMV9vdXQgKi8KKwl7RlJFRl9DTEsyX09VVCwgKE0wKX0sCQkJCQkJLyogZnJlZl9jbGsyX291dCAqLworCXtTWVNfTklSUTEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogc3lzX25pcnExICovCisJe1NZU19OSVJRMiwgKE03KX0sCQkJCQkJLyogc3lzX25pcnEyICovCisJe1NZU19CT09UMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NCAqLworCXtTWVNfQk9PVDEsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg1ICovCisJe1NZU19CT09UMiwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NiAqLworCXtTWVNfQk9PVDMsIChQVEQgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18xODcgKi8KKwl7U1lTX0JPT1Q0LCAoTTMpfSwJCQkJCQkvKiBncGlvXzE4OCAqLworCXtTWVNfQk9PVDUsIChQVEQgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18xODkgKi8KKwl7RFBNX0VNVTAsIChJRU4gfCBNMCl9LAkJCQkJCS8qIGRwbV9lbXUwICovCisJe0RQTV9FTVUxLCAoSUVOIHwgTTApfSwJCQkJCQkvKiBkcG1fZW11MSAqLworCXtEUE1fRU1VMiwgKElFTiB8IE0wKX0sCQkJCQkJLyogZHBtX2VtdTIgKi8KKwl7RFBNX0VNVTMsIChJRU4gfCBNNSl9LAkJCQkJCS8qIGRpc3BjMl9kYXRhMTAgKi8KKwl7RFBNX0VNVTQsIChJRU4gfCBNNSl9LAkJCQkJCS8qIGRpc3BjMl9kYXRhOSAqLworCXtEUE1fRU1VNSwgKElFTiB8IE01KX0sCQkJCQkJLyogZGlzcGMyX2RhdGExNiAqLworCXtEUE1fRU1VNiwgKElFTiB8IE01KX0sCQkJCQkJLyogZGlzcGMyX2RhdGExNyAqLworCXtEUE1fRU1VNywgKElFTiB8IE01KX0sCQkJCQkJLyogZGlzcGMyX2hzeW5jICovCisJe0RQTV9FTVU4LCAoSUVOIHwgTTUpfSwJCQkJCQkvKiBkaXNwYzJfcGNsayAqLworCXtEUE1fRU1VOSwgKElFTiB8IE01KX0sCQkJCQkJLyogZGlzcGMyX3ZzeW5jICovCisJe0RQTV9FTVUxMCwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGUgKi8KKwl7RFBNX0VNVTExLCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhOCAqLworCXtEUE1fRU1VMTIsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGE3ICovCisJe0RQTV9FTVUxMywgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTYgKi8KKwl7RFBNX0VNVTE0LCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhNSAqLworCXtEUE1fRU1VMTUsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGE0ICovCisJe0RQTV9FTVUxNiwgKE0zKX0sCQkJCQkJLyogZ3Bpb18yNyAqLworCXtEUE1fRU1VMTcsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGEyICovCisJe0RQTV9FTVUxOCwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTEgKi8KKwl7RFBNX0VNVTE5LCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhMCAqLworCXtJMkMxX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzFfc2NsICovCisJe0kyQzFfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMV9zZGEgKi8KKwl7STJDMl9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMyX3NjbCAqLworCXtJMkMyX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzJfc2RhICovCisJe0kyQzNfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjM19zY2wgKi8KKwl7STJDM19TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMzX3NkYSAqLworCXtJMkM0X1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzRfc2NsICovCisJe0kyQzRfU0RBLCAoUFRVIHwgSUVOIHwgTTApfQkJCQkvKiBpMmM0X3NkYSAqLworfTsKKworY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IHdrdXBfcGFkY29uZl9hcnJheV9ub25fZXNzZW50aWFsW10gPSB7CisJe1BBRDBfU0lNX0lPLCAoSUVOIHwgTTApfSwJCS8qIHNpbV9pbyAqLworCXtQQUQxX1NJTV9DTEssIChNMCl9LAkJCS8qIHNpbV9jbGsgKi8KKwl7UEFEMF9TSU1fUkVTRVQsIChNMCl9LAkJCS8qIHNpbV9yZXNldCAqLworCXtQQUQxX1NJTV9DRCwgKFBUVSB8IElFTiB8IE0wKX0sCS8qIHNpbV9jZCAqLworCXtQQUQwX1NJTV9QV1JDVFJMLCAoTTApfSwJCS8qIHNpbV9wd3JjdHJsICovCisJe1BBRDFfRlJFRl9YVEFMX0lOLCAoTTApfSwJCS8qICMgKi8KKwl7UEFEMF9GUkVGX1NMSUNFUl9JTiwgKE0wKX0sCQkvKiBmcmVmX3NsaWNlcl9pbiAqLworCXtQQUQxX0ZSRUZfQ0xLX0lPUkVRLCAoTTApfSwJCS8qIGZyZWZfY2xrX2lvcmVxICovCisJe1BBRDBfRlJFRl9DTEswX09VVCwgKE0yKX0sCQkvKiBzeXNfZHJtX21zZWN1cmUgKi8KKwl7UEFEMV9GUkVGX0NMSzNfUkVRLCAoUFRVIHwgSUVOIHwgTTApfSwJLyogIyAqLworCXtQQUQwX0ZSRUZfQ0xLM19PVVQsIChNMCl9LAkJLyogZnJlZl9jbGszX291dCAqLworCXtQQUQxX0ZSRUZfQ0xLNF9SRVEsIChQVFUgfCBJRU4gfCBNMCl9LAkvKiAjICovCisJe1BBRDBfRlJFRl9DTEs0X09VVCwgKE0wKX0sCQkvKiAjICovCisJe1BBRDBfU1lTX05SRVNQV1JPTiwgKE0wKX0sCQkvKiBzeXNfbnJlc3B3cm9uICovCisJe1BBRDFfU1lTX05SRVNXQVJNLCAoTTApfSwJCS8qIHN5c19ucmVzd2FybSAqLworCXtQQUQwX1NZU19QV1JfUkVRLCAoUFRVIHwgTTApfSwJCS8qIHN5c19wd3JfcmVxICovCisJe1BBRDFfU1lTX1BXUk9OX1JFU0VULCAoTTMpfSwJCS8qIGdwaW9fd2syOSAqLworCXtQQUQwX1NZU19CT09UNiwgKElFTiB8IE0zKX0sCQkvKiBncGlvX3drOSAqLworCXtQQUQxX1NZU19CT09UNywgKElFTiB8IE0zKX0sCQkvKiBncGlvX3drMTAgKi8KKwl7UEFEMV9GUkVGX0NMSzNfUkVRLCAoTTMpfSwJCS8qIGdwaW9fd2szMCAqLworCXtQQUQxX0ZSRUZfQ0xLNF9SRVEsIChNMyl9LAkJLyogZ3Bpb193azcgKi8KKwl7UEFEMF9GUkVGX0NMSzRfT1VULCAoTTMpfSwJCS8qIGdwaW9fd2s4ICovCit9OworCisjZW5kaWYgLyogX0VWTTQ0MzBfTVVYX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvcGFuZGEvTWFrZWZpbGUgYi9ib2FyZC90aS9wYW5kYS9NYWtlZmlsZQppbmRleCBlYzQ5M2Y1Li5iMjk5ZTJmIDEwMDY0NAotLS0gYS9ib2FyZC90aS9wYW5kYS9NYWtlZmlsZQorKysgYi9ib2FyZC90aS9wYW5kYS9NYWtlZmlsZQpAQCAtMjUsOSArMjUsNyBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5vCiAKLWlmbmRlZiBDT05GSUdfU1BMX0JVSUxECiBDT0JKUwk6PSBwYW5kYS5vCi1lbmRpZgogCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKZGlmZiAtLWdpdCBhL2JvYXJkL3RpL3BhbmRhL3BhbmRhLmMgYi9ib2FyZC90aS9wYW5kYS9wYW5kYS5jCmluZGV4IDk3MzIwY2IuLmI0MjcxZmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3BhbmRhL3BhbmRhLmMKKysrIGIvYm9hcmQvdGkvcGFuZGEvcGFuZGEuYwpAQCAtNjUsNiArNjUsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBzZXRfbXV4Y29uZl9yZWdzX2Vzc2VudGlhbCh2b2lkKQoreworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX0NPUkUsIGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwsCisJCSAgIHNpemVvZihjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsKSAvCisJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKKworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX1dLVVAsIHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwsCisJCSAgIHNpemVvZih3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsKSAvCisJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKKworCWlmIChvbWFwX3JldmlzaW9uKCkgPj0gT01BUDQ0NjBfRVMxXzApCisJCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX1dLVVAsCisJCQkJIHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxfNDQ2MCwKKwkJCQkgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxfNDQ2MCkgLworCQkJCSBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7Cit9CisKIHZvaWQgc2V0X211eGNvbmZfcmVnc19ub25fZXNzZW50aWFsKHZvaWQpCiB7CiAJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwsCkBAIC05MywxMCArMTEwLDE4IEBACiAJCQkJc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOwogfQogCi0jaWZkZWYgQ09ORklHX0dFTkVSSUNfTU1DCisjaWYgIWRlZmluZWQoQ09ORklHX1NQTF9CVUlMRCkgJiYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19NTUMpCiBpbnQgYm9hcmRfbW1jX2luaXQoYmRfdCAqYmlzKQogewogCW9tYXBfbW1jX2luaXQoMCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKKworLyoKKyAqIGdldF9ib2FyZF9yZXYoKSAtIGdldCBib2FyZCByZXZpc2lvbgorICovCit1MzIgZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXJldHVybiAweDIwOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvcGFuZGEvcGFuZGFfbXV4X2RhdGEuaCBiL2JvYXJkL3RpL3BhbmRhL3BhbmRhX211eF9kYXRhLmgKaW5kZXggODNkMGMzZi4uYzA1MTcwZSAxMDA2NDQKLS0tIGEvYm9hcmQvdGkvcGFuZGEvcGFuZGFfbXV4X2RhdGEuaAorKysgYi9ib2FyZC90aS9wYW5kYS9wYW5kYV9tdXhfZGF0YS5oCkBAIC0yOCw2ICsyOCw1OCBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4X29tYXA0Lmg+CiAKKworY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxbXSA9IHsKKwore0dQTUNfQUQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDAgKi8KK3tHUE1DX0FEMSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQxICovCit7R1BNQ19BRDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MiAqLwore0dQTUNfQUQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDMgKi8KK3tHUE1DX0FENCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ0ICovCit7R1BNQ19BRDUsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NSAqLwore0dQTUNfQUQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDYgKi8KK3tHUE1DX0FENywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ3ICovCit7R1BNQ19OT0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0xKX0sCSAvKiBzZG1tYzJfY2xrICovCit7R1BNQ19OV0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfY21kICovCit7U0RNTUMxX0NMSywgKFBUVSB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJIC8qIHNkbW1jMV9jbGsgKi8KK3tTRE1NQzFfQ01ELCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2NtZCAqLwore1NETU1DMV9EQVQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDAgKi8KK3tTRE1NQzFfREFUMSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQxICovCit7U0RNTUMxX0RBVDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MiAqLwore1NETU1DMV9EQVQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDMgKi8KK3tTRE1NQzFfREFUNCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ0ICovCit7U0RNTUMxX0RBVDUsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NSAqLwore1NETU1DMV9EQVQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDYgKi8KK3tTRE1NQzFfREFUNywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ3ICovCit7STJDMV9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMxX3NjbCAqLwore0kyQzFfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMV9zZGEgKi8KK3tJMkMyX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzJfc2NsICovCit7STJDMl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMyX3NkYSAqLwore0kyQzNfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjM19zY2wgKi8KK3tJMkMzX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzNfc2RhICovCit7STJDNF9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmM0X3NjbCAqLwore0kyQzRfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjNF9zZGEgKi8KK3tVQVJUM19DVFNfUkNUWCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJLyogdWFydDNfdHggKi8KK3tVQVJUM19SVFNfU0QsIChNMCl9LAkJCQkJLyogdWFydDNfcnRzX3NkICovCit7VUFSVDNfUlhfSVJSWCwgKElFTiB8IE0wKX0sCQkJCS8qIHVhcnQzX3J4ICovCit7VUFSVDNfVFhfSVJUWCwgKE0wKX0JCQkJCS8qIHVhcnQzX3R4ICovCisKK307CisKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsW10gPSB7CisKK3tQQUQxX1NSX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sIC8qIHNyX3NjbCAqLwore1BBRDBfU1JfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwgLyogc3Jfc2RhICovCit7UEFEMV9TWVNfMzJLLCAoSUVOIHwgTTApfQkgLyogc3lzXzMyayAqLworCit9OworCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwW10gPSB7CisKK3tQQUQxX0ZSRUZfQ0xLNF9SRVEsIChNMyl9LAkgLyogZ3Bpb193azcsIFRQUyAqLworCit9OworCiBjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWxbXSA9IHsKIAl7R1BNQ19BRDgsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMyl9LAkvKiBncGlvXzMyICovCiAJe0dQTUNfQUQ5LCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMzMgKi8KQEAgLTIxOSw3ICsyNzEsNyBAQAogCXtQQUQwX0ZSRUZfU0xJQ0VSX0lOLCAoTTApfSwJCS8qIGZyZWZfc2xpY2VyX2luICovCiAJe1BBRDFfRlJFRl9DTEtfSU9SRVEsIChNMCl9LAkJLyogZnJlZl9jbGtfaW9yZXEgKi8KIAl7UEFEMF9GUkVGX0NMSzBfT1VULCAoTTIpfSwJCS8qIHN5c19kcm1fbXNlY3VyZSAqLwotCXtQQUQxX0ZSRUZfQ0xLM19SRVEsIE03fSwJCQkJCS8qIHNhZmUgbW9kZSAqLworCXtQQUQxX0ZSRUZfQ0xLM19SRVEsIE03fSwJCS8qIHNhZmUgbW9kZSAqLwogCXtQQUQwX0ZSRUZfQ0xLM19PVVQsIChNMCl9LAkJLyogZnJlZl9jbGszX291dCAqLwogCXtQQUQwX0ZSRUZfQ0xLNF9PVVQsIChQVFUgfCBNMyl9LAkvKiBsZWQgc3RhdHVzXzIgKi8KIAl7UEFEMF9TWVNfTlJFU1BXUk9OLCAoTTApfSwJCS8qIHN5c19ucmVzcHdyb24gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3RpL3NkcDQ0MzAvTWFrZWZpbGUgYi9ib2FyZC90aS9zZHA0NDMwL01ha2VmaWxlCmluZGV4IDgwNmZkZjQuLjcyYWQzZWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3NkcDQ0MzAvTWFrZWZpbGUKKysrIGIvYm9hcmQvdGkvc2RwNDQzMC9NYWtlZmlsZQpAQCAtMjUsOCArMjUsMTAgQEAKIAogTElCCT0gJChvYmopbGliJChCT0FSRCkubwogCitDT0JKUwk6PSBzZHAubworCiBpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAotQ09CSlMJOj0gc2RwLm8gY21kX2JhdC5vCitDT0JKUwkrPSBjbWRfYmF0Lm8KIGVuZGlmCiAKIFNSQ1MJOj0gJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2JvYXJkL3RpL3NkcDQ0MzAvc2RwLmMgYi9ib2FyZC90aS9zZHA0NDMwL3NkcC5jCmluZGV4IGE1ZWE2ODIuLmUxYjg1M2MgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3NkcDQ0MzAvc2RwLmMKKysrIGIvYm9hcmQvdGkvc2RwNDQzMC9zZHAuYwpAQCAtNzAsNiArNzAsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBzZXRfbXV4Y29uZl9yZWdzX2Vzc2VudGlhbCh2b2lkKQoreworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX0NPUkUsIGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwsCisJCSAgIHNpemVvZihjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsKSAvCisJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKKworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX1dLVVAsIHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwsCisJCSAgIHNpemVvZih3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsKSAvCisJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKKworCWlmIChvbWFwX3JldmlzaW9uKCkgPj0gT01BUDQ0NjBfRVMxXzApCisJCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX1dLVVAsCisJCQkJIHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxfNDQ2MCwKKwkJCQkgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxfNDQ2MCkgLworCQkJCSBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7Cit9CisKIHZvaWQgc2V0X211eGNvbmZfcmVnc19ub25fZXNzZW50aWFsKHZvaWQpCiB7CiAJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwsCkBAIC04MSw3ICs5OCw3IEBACiAJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKIH0KIAotI2lmZGVmIENPTkZJR19HRU5FUklDX01NQworI2lmICFkZWZpbmVkKENPTkZJR19TUExfQlVJTEQpICYmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfTU1DKQogaW50IGJvYXJkX21tY19pbml0KGJkX3QgKmJpcykKIHsKIAlvbWFwX21tY19pbml0KDApOwpAQCAtODksMyArMTA2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKKworLyoKKyAqIGdldF9ib2FyZF9yZXYoKSAtIGdldCBib2FyZCByZXZpc2lvbgorICovCit1MzIgZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXJldHVybiAweDIwOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvc2RwNDQzMC9zZHA0NDMwX211eF9kYXRhLmggYi9ib2FyZC90aS9zZHA0NDMwL3NkcDQ0MzBfbXV4X2RhdGEuaAppbmRleCAwNmVmYWVhLi4xYzZlMGVlIDEwMDY0NAotLS0gYS9ib2FyZC90aS9zZHA0NDMwL3NkcDQ0MzBfbXV4X2RhdGEuaAorKysgYi9ib2FyZC90aS9zZHA0NDMwL3NkcDQ0MzBfbXV4X2RhdGEuaApAQCAtMjgsNiArMjgsNDkgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL211eF9vbWFwNC5oPgogCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbFtdID0geworCit7R1BNQ19BRDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MCAqLwore0dQTUNfQUQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDEgKi8KK3tHUE1DX0FEMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQyICovCit7R1BNQ19BRDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MyAqLwore0dQTUNfQUQ0LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDQgKi8KK3tHUE1DX0FENSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ1ICovCit7R1BNQ19BRDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NiAqLwore0dQTUNfQUQ3LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDcgKi8KK3tHUE1DX05PRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTEpfSwJIC8qIHNkbW1jMl9jbGsgKi8KK3tHUE1DX05XRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9jbWQgKi8KK3tTRE1NQzFfQ0xLLCAoUFRVIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkgLyogc2RtbWMxX2NsayAqLwore1NETU1DMV9DTUQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfY21kICovCit7U0RNTUMxX0RBVDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MCAqLwore1NETU1DMV9EQVQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDEgKi8KK3tTRE1NQzFfREFUMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQyICovCit7U0RNTUMxX0RBVDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MyAqLwore1NETU1DMV9EQVQ0LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDQgKi8KK3tTRE1NQzFfREFUNSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ1ICovCit7U0RNTUMxX0RBVDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NiAqLwore1NETU1DMV9EQVQ3LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDcgKi8KK3tVQVJUM19DVFNfUkNUWCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJLyogdWFydDNfdHggKi8KK3tVQVJUM19SVFNfU0QsIChNMCl9LAkJCQkJLyogdWFydDNfcnRzX3NkICovCit7VUFSVDNfUlhfSVJSWCwgKElFTiB8IE0wKX0sCQkJCS8qIHVhcnQzX3J4ICovCit7VUFSVDNfVFhfSVJUWCwgKE0wKX0JCQkJCS8qIHVhcnQzX3R4ICovCisKK307CisKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsW10gPSB7CisKK3tQQUQxX1NSX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sIC8qIHNyX3NjbCAqLwore1BBRDBfU1JfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwgLyogc3Jfc2RhICovCit7UEFEMV9TWVNfMzJLLCAoSUVOIHwgTTApfQkgLyogc3lzXzMyayAqLworCit9OworCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwW10gPSB7CisKK3tQQUQxX0ZSRUZfQ0xLNF9SRVEsIChNMyl9LAkgLyogZ3Bpb193azcsIFRQUyAqLworCit9OworCiBjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWxbXSA9IHsKIAl7R1BNQ19BRDgsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMyl9LAkvKiBncGlvXzMyICovCiAJe0dQTUNfQUQ5LCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMzMgKi8KQEAgLTIwMCw2ICsyNDMsMTUgQEAKIAl7RFBNX0VNVTE3LCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhMiAqLwogCXtEUE1fRU1VMTgsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGExICovCiAJe0RQTV9FTVUxOSwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTAgKi8KKwl7STJDMV9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMV9zY2wgKi8KKwl7STJDMV9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMV9zZGEgKi8KKwl7STJDMl9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMl9zY2wgKi8KKwl7STJDMl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMl9zZGEgKi8KKwl7STJDM19TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjM19zY2wgKi8KKwl7STJDM19TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjM19zZGEgKi8KKwl7STJDNF9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjNF9zY2wgKi8KKwl7STJDNF9TREEsIChQVFUgfCBJRU4gfCBNMCl9CQkJCQkvKiBpMmM0X3NkYSAqLworCiB9OwogCiBjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgd2t1cF9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWxbXSA9IHsKQEAgLTIxNCw3ICsyNjYsNiBAQAogCXtQQUQwX0ZSRUZfQ0xLMF9PVVQsIChNMil9LAkJLyogc3lzX2RybV9tc2VjdXJlICovCiAJe1BBRDFfRlJFRl9DTEszX1JFUSwgKE0zKX0sCQkvKiBncGlvX3drMzAgLSBEZWJ1ZyBsZWQtMSAqLwogCXtQQUQwX0ZSRUZfQ0xLM19PVVQsIChNMCl9LAkJLyogZnJlZl9jbGszX291dCAqLwotCXtQQUQxX0ZSRUZfQ0xLNF9SRVEsIChNMyl9LAkJLyogZ3Bpb193azcgLSBEZWJ1ZyBsZWQtMiAqLwogCXtQQUQwX0ZSRUZfQ0xLNF9PVVQsIChNMyl9LAkJLyogZ3Bpb193azggLSBEZWJ1ZyBsZWQtMyAqLwogCXtQQUQwX1NZU19OUkVTUFdST04sIChNMCl9LAkJLyogc3lzX25yZXNwd3JvbiAqLwogCXtQQUQxX1NZU19OUkVTV0FSTSwgKE0wKX0sCQkvKiBzeXNfbnJlc3dhcm0gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3ZwYWMyNzAvdnBhYzI3MC5jIGIvYm9hcmQvdnBhYzI3MC92cGFjMjcwLmMKaW5kZXggNDNiYmRmZi4uY2Y4ZTdiNiAxMDA2NDQKLS0tIGEvYm9hcmQvdnBhYzI3MC92cGFjMjcwLmMKKysrIGIvYm9hcmQvdnBhYzI3MC92cGFjMjcwLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1tbWMuaD4KICNpbmNsdWRlIDxuZXRkZXYuaD4KICNpbmNsdWRlIDxzZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTcyLDYgKzczLDE0IEBACiAjZW5kaWYKIH0KIAorI2lmZGVmCUNPTkZJR19DTURfTU1DCitpbnQgYm9hcmRfbW1jX2luaXQoYmRfdCAqYmlzKQoreworCXB4YV9tbWNfcmVnaXN0ZXIoMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogI2lmZGVmCUNPTkZJR19DTURfVVNCCiBpbnQgdXNiX2JvYXJkX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2JvYXJkL3pldXMvemV1cy5jIGIvYm9hcmQvemV1cy96ZXVzLmMKaW5kZXggMThjYjg1Zi4uMjcyZTU5YiAxMDA2NDQKLS0tIGEvYm9hcmQvemV1cy96ZXVzLmMKKysrIGIvYm9hcmQvemV1cy96ZXVzLmMKQEAgLTQwLDcgKzQwLDYgQEAKIAogZXh0ZXJuIGZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTXTsgLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMJKi8KIGV4dGVybiBlbnZfdCAqZW52X3B0cjsKLWV4dGVybiB1Y2hhciBkZWZhdWx0X2Vudmlyb25tZW50W107CiAKIHVsb25nIGZsYXNoX2dldF9zaXplKHVsb25nIGJhc2UsIGludCBiYW5rbnVtKTsKIHZvaWQgZW52X2NyY191cGRhdGUodm9pZCk7CmRpZmYgLS1naXQgYS9ib2FyZHMuY2ZnIGIvYm9hcmRzLmNmZwppbmRleCA4YjdhMDNiLi5jODNkODYxIDEwMDY0NAotLS0gYS9ib2FyZHMuY2ZnCisrKyBiL2JvYXJkcy5jZmcKQEAgLTM1LDcgKzM1LDcgQEAKICMgVGFyZ2V0ICAgICAgICAgICAgICAgICAgICAgQVJDSCAgICAgICAgQ1BVICAgICAgICAgQm9hcmQgbmFtZSAgICAgICAgICBWZW5kb3IJICAgICAgICBTb0MgICAgICAgICBPcHRpb25zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1pbnRlZ3JhdG9yY3BfY20xMTM2ICAgICAgICAgIGFybSAgICAgICAgIGFybTExMzYgICAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmNwCitpbnRlZ3JhdG9yY3BfY20xMTM2ICAgICAgICAgIGFybSAgICAgICAgIGFybTExMzYgICAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmNwOkNNMTEzNgogcW9uZyAgICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm0xMTM2ICAgICAtICAgICAgICAgICAgICAgICAgIGRhdmVkZW54ICAgICAgIG14MzEKIG14MzFhZHMgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtMTEzNiAgICAgLSAgICAgICAgICAgICAgICAgICBmcmVlc2NhbGUgICAgICBteDMxCiBpbXgzMV9saXRla2l0ICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTExMzYgICAgIC0gICAgICAgICAgICAgICAgICAgbG9naWNwZCAgICAgICAgbXgzMQpAQCAtNDcsOSArNDcsOSBAQAogbXgzNXBkayAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm0xMTM2ICAgICAtICAgICAgICAgICAgICAgICAgIGZyZWVzY2FsZSAgICAgIG14MzUKIG9tYXAyNDIwaDQgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtMTEzNiAgICAgLSAgICAgICAgICAgICAgICAgICB0aSAgICAgICAgICAgICBvbWFwMjR4eAogdG5ldHYxMDd4X2V2bSAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm0xMTc2ICAgICB0bmV0djEwN3hldm0gICAgICAgIHRpICAgICAgICAgICAgIHRuZXR2MTA3eAotaW50ZWdyYXRvcmFwX2NtNzIwdCAgICAgICAgICBhcm0gICAgICAgICBhcm03MjB0ICAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JhcAotaW50ZWdyYXRvcmFwX2NtOTIwdCAgICAgICAgICBhcm0gICAgICAgICBhcm05MjB0ICAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JhcAotaW50ZWdyYXRvcmNwX2NtOTIwdCAgICAgICAgICBhcm0gICAgICAgICBhcm05MjB0ICAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JjcAoraW50ZWdyYXRvcmFwX2NtNzIwdCAgICAgICAgICBhcm0gICAgICAgICBhcm03MjB0ICAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JhcDpDTTcyMFQKK2ludGVncmF0b3JhcF9jbTkyMHQgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yYXA6Q005MjBUCitpbnRlZ3JhdG9yY3BfY205MjB0ICAgICAgICAgIGFybSAgICAgICAgIGFybTkyMHQgICAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmNwOkNNOTIwVAogYTMyMGV2YiAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjB0ICAgICAtICAgICAgICAgICAgICAgICAgIGZhcmFkYXkgICAgICAgIGEzMjAKIGF0OTFybTkyMDBlayAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgYXQ5MXJtOTIwMGVrICAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxcm05MjAwZWsKIGF0OTFybTkyMDBla19yYW0gICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgYXQ5MXJtOTIwMGVrICAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxcm05MjAwZWs6UkFNQk9PVApAQCAtNjMsOCArNjMsOCBAQAogVkNNQTkgICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjB0ICAgICB2Y21hOSAgICAgICAgICAgICAgIG1wbCAgICAgICAgICAgIHMzYzI0eDAKIHNtZGsyNDEwICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgLSAgICAgICAgICAgICAgICAgICBzYW1zdW5nICAgICAgICBzM2MyNHgwCiBvbWFwMTUxMGlubiAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNXQgICAgIC0gICAgICAgICAgICAgICAgICAgdGkKLWludGVncmF0b3JhcF9jbTkyNmVqcyAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yYXAKLWludGVncmF0b3JjcF9jbTkyNmVqcyAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yY3AKK2ludGVncmF0b3JhcF9jbTkyNmVqcyAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yYXA6Q005MjZFSl9TCitpbnRlZ3JhdG9yY3BfY205MjZlanMgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmNwOkNNOTI0RUpfUwogdmVyc2F0aWxlcWVtdSAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICB2ZXJzYXRpbGUgICAgICAgICAgIGFybWx0ZCAgICAgICAgIHZlcnNhdGlsZSAgIHZlcnNhdGlsZTpBUkNIX1ZFUlNBVElMRV9RRU1VLEFSQ0hfVkVSU0FUSUxFX1BCCiB2ZXJzYXRpbGVwYiAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIHZlcnNhdGlsZSAgICAgICAgICAgYXJtbHRkICAgICAgICAgdmVyc2F0aWxlICAgdmVyc2F0aWxlOkFSQ0hfVkVSU0FUSUxFX1BCCiB2ZXJzYXRpbGVhYiAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIHZlcnNhdGlsZSAgICAgICAgICAgYXJtbHRkICAgICAgICAgdmVyc2F0aWxlICAgdmVyc2F0aWxlOkFSQ0hfVkVSU0FUSUxFX0FCCkBAIC0xMjEsNiArMTIxLDcgQEAKIHBtOWc0NSAgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgcG05ZzQ1ICAgICAgICAgICAgICByb25ldGl4ICAgICAgICBhdDkxICAgICAgICBwbTlnNDU6QVQ5MVNBTTlHNDUKIGRhODMwZXZtICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZGE4eHhldm0gICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCiBkYTg1MGV2bSAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGRhOHh4ZXZtICAgICAgICAgICAgZGF2aW5jaSAgICAgICAgZGF2aW5jaQorZGE4NTBfYW0xOHh4ZXZtICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBkYTh4eGV2bSAgICAgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKIGNhbV9lbmNfNHh4ICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgY2FtX2VuY180eHggICAgICAgICBhaXQgICAgICAgICAgICBkYXZpbmNpICAgICBjYW1fZW5jXzR4eAogaGF3a2JvYXJkICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBkYTh4eGV2bSAgICAgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKIGhhd2tib2FyZF9uYW5kICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZGE4eHhldm0gICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpICAgICBoYXdrYm9hcmQ6TkFORF9VX0JPT1QKQEAgLTEzMCw2ICsxMzEsNyBAQAogZGF2aW5jaV9kbTM1NWxlb3BhcmQgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBkbTM1NWxlb3BhcmQgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKIGRhdmluY2lfZG0zNjVldm0gICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZG0zNjVldm0gICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCiBkYXZpbmNpX2RtNjQ2N2V2bSAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGRtNjQ2N2V2bSAgICAgICAgICAgZGF2aW5jaSAgICAgICAgZGF2aW5jaQorZGF2aW5jaV9kbTY0NjdUZXZtICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBkbTY0Njdldm0gICAgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKIGRhdmluY2lfZHZldm0gICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZHZldm0gICAgICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCiBkYXZpbmNpX3NjaG1vb2dpZSAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIHNjaG1vb2dpZSAgICAgICAgICAgZGF2aW5jaSAgICAgICAgZGF2aW5jaQogZGF2aW5jaV9zZmZzZHIgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBzZmZzZHIgICAgICAgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKQEAgLTE1NiwxMyArMTU4LDE0IEBACiB6bXgyNSAgICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIHpteDI1ICAgICAgICAgICAgICAgc3l0ZWNvICAgICAgICAgbXgyNQogaW14MjdsaXRlICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBpbXgyN2xpdGUgICAgICAgICAgIGxvZ2ljcGQgICAgICAgIG14MjcKIG1hZ25lc2l1bSAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgaW14MjdsaXRlICAgICAgICAgICBsb2dpY3BkICAgICAgICBteDI3CittMjhldmsgICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIC0gICAgICAgICAgICAgICAgICAgZGVueCAgICAgICAgICAgbXgyOAogbmhrODgxNSAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBuaGs4ODE1ICAgICAgICAgICAgIHN0ICAgICAgICAgICAgIG5vbWFkaWsKIG5oazg4MTVfb25lbmFuZCAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgbmhrODgxNSAgICAgICAgICAgICBzdCAgICAgICAgICAgICBub21hZGlrICAgICAgIG5oazg4MTU6Qk9PVF9PTkVOQU5ECiBvbWFwNTkxMm9zayAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIC0gICAgICAgICAgICAgICAgICAgdGkgICAgICAgICAgICAgb21hcAogZWRtaW5pdjIgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICAtICAgICAgICAgICAgICAgICAgIExhQ2llICAgICAgICAgIG9yaW9uNXgKIGRrYgkJCSAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgLSAgICAgICAgICAgICAgICAgICBNYXJ2ZWxsICAgICAgICBwYW50aGVvbgotaW50ZWdyYXRvcmFwX2NtOTQ2ZXMgICAgICAgICBhcm0gICAgICAgICBhcm05NDZlcyAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgICAgICBpbnRlZ3JhdG9yYXAKLWludGVncmF0b3JjcF9jbTk0NmVzICAgICAgICAgYXJtICAgICAgICAgYXJtOTQ2ZXMgICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICAgICAgaW50ZWdyYXRvcmNwCitpbnRlZ3JhdG9yYXBfY205NDZlcyAgICAgICAgIGFybSAgICAgICAgIGFybTk0NmVzICAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgICAgIGludGVncmF0b3JhcDpDTTk0NkVTCitpbnRlZ3JhdG9yY3BfY205NDZlcyAgICAgICAgIGFybSAgICAgICAgIGFybTk0NmVzICAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgICAgIGludGVncmF0b3JjcDpDTTk0NkVTCiBjYTl4NF9jdF92eHAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybXY3ICAgICAgIHZleHByZXNzICAgICAgICAgICAgYXJtbHRkCiBoaWdoYmFuayAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybXY3ICAgICAgIGhpZ2hiYW5rICAgICAgICAgICAgLSAgICAgICAgICAgICAgaGlnaGJhbmsKIGFtMzM1eF9ldm0gICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtdjcgICAgICAgYW0zMzV4ICAgICAgICAgICAgICB0aSAgICAgICAgICAgICBhbTMzeHgKQEAgLTE5Myw2ICsxOTYsNyBAQAogZGV2a2l0ODAwMCAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm12NyAgICAgICBkZXZraXQ4MDAwICAgICAgICAgIHRpbWxsICAgICAgICAgIG9tYXAzCiBvbWFwNF9wYW5kYSAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybXY3ICAgICAgIHBhbmRhICAgICAgICAgICAgICAgdGkgICAgICAgICAgICAgb21hcDQKIG9tYXA0X3NkcDQ0MzAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtdjcgICAgICAgc2RwNDQzMCAgICAgICAgICAgICB0aSAgICAgICAgICAgICBvbWFwNAorb21hcDVfZXZtICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm12NyAgICAgICBvbWFwNV9ldm0gICAgICAgICAgIHRpCQlvbWFwNQogczVwX2dvbmkgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm12NyAgICAgICBnb25pICAgICAgICAgICAgICAgIHNhbXN1bmcgICAgICAgIHM1cGMxeHgKIHNtZGtjMTAwICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtdjcgICAgICAgc21ka2MxMDAgICAgICAgICAgICBzYW1zdW5nICAgICAgICBzNXBjMXh4CiBvcmlnZW4JCQkgICAgIGFybQkgYXJtdjcJICAgICBvcmlnZW4JCSBzYW1zdW5nCXM1cGMyeHgKQEAgLTIxMyw4ICsyMTcsNiBAQAogY2VyZjI1MCAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBweGEKIGNvbGlicmlfcHhhMjcwICAgICAgICAgICAgICAgYXJtICAgICAgICAgcHhhCiBjcmFkbGUgICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIHB4YQotY3NiMjI2ICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBweGEKLWlubm9rb20gICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgcHhhCiBsdWJib2NrICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIHB4YQogcGFsbWxkICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBweGEKIHBhbG10YyAgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgcHhhCkBAIC0zNDYsNiArMzQ4LDcgQEAKIHFpX2xiNjAgICAgICAgICAgICAgICAgICAgICAgbWlwcyAgICAgICAgeGJ1cnN0ICAgICAgcWlfbGI2MCAgICAgICAgICAgICBxaQogbmlvczItZ2VuZXJpYyAgICAgICAgICAgICAgICBuaW9zMiAgICAgICBuaW9zMiAgICAgICBuaW9zMi1nZW5lcmljICAgICAgIGFsdGVyYQogYWRwLWFnMTAxICAgICAgICAgICAgICAgICAgICBuZHMzMiAgICAgICBuMTIxMyAgICAgICBhZHAtYWcxMDEgICAgICAgICAgIEFuZGVzVGVjaCAgICAgIGFnMTAxCithZHAtYWcxMDFwICAgICAgICAgICAgICAgICAgIG5kczMyICAgICAgIG4xMjEzICAgICAgIGFkcC1hZzEwMXAgICAgICAgICAgQW5kZXNUZWNoICAgICAgYWcxMDEKIFBDSTU0NDEgICAgICAgICAgICAgICAgICAgICAgbmlvczIgICAgICAgbmlvczIgICAgICAgcGNpNTQ0MSAgICAgICAgICAgICBwc3llbnQKIFBLMUMyMCAgICAgICAgICAgICAgICAgICAgICAgbmlvczIgICAgICAgbmlvczIgICAgICAgcGsxYzIwICAgICAgICAgICAgICBwc3llbnQKIEVWQjY0MjYwICAgICAgICAgICAgICAgICAgICAgcG93ZXJwYyAgICAgNzR4eF83eHggICAgZXZiNjQyNjAgICAgICAgICAgICAtICAgICAgICAgICAgICAtICAgICAgICAgICBFVkI2NDI2MApkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9iZWRidWcuYyBiL2NvbW1vbi9jbWRfYmVkYnVnLmMKaW5kZXggMmJkNjJlMi4uODdiMTA4ZiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9iZWRidWcuYworKysgYi9jb21tb24vY21kX2JlZGJ1Zy5jCkBAIC0xNSw3ICsxNSw2IEBACiAKIGV4dGVybiB2b2lkIHNob3dfcmVncyBfX1AgKChzdHJ1Y3QgcHRfcmVncyAqKSk7CiBleHRlcm4gaW50IHJ1bl9jb21tYW5kIF9fUCAoKGNvbnN0IGNoYXIgKiwgaW50KSk7Ci1leHRlcm4gY2hhciBjb25zb2xlX2J1ZmZlcltdOwogCiB1bG9uZyBkaXNfbGFzdF9hZGRyID0gMDsJLyogTGFzdCBhZGRyZXNzIGRpc2Fzc2VtYmxlZCAgICovCiB1bG9uZyBkaXNfbGFzdF9sZW4gPSAyMDsJLyogRGVmYXVsdCBkaXNhc3NlbWJsZXIgbGVuZ3RoICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2JtcC5jIGIvY29tbW9uL2NtZF9ibXAuYwppbmRleCAyM2ZjODJmLi42ODJmMzk1IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2JtcC5jCisrKyBiL2NvbW1vbi9jbWRfYm1wLmMKQEAgLTIzNyw5ICsyMzcsNyBAQAogCX0KIAogI2lmIGRlZmluZWQoQ09ORklHX0xDRCkKLQlleHRlcm4gaW50IGxjZF9kaXNwbGF5X2JpdG1hcCAodWxvbmcsIGludCwgaW50KTsKLQotCXJldCA9IGxjZF9kaXNwbGF5X2JpdG1hcCAoKHVuc2lnbmVkIGxvbmcpYm1wLCB4LCB5KTsKKwlyZXQgPSBsY2RfZGlzcGxheV9iaXRtYXAoKHVsb25nKWJtcCwgeCwgeSk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19WSURFTykKIAlleHRlcm4gaW50IHZpZGVvX2Rpc3BsYXlfYml0bWFwICh1bG9uZywgaW50LCBpbnQpOwogCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2Rjci5jIGIvY29tbW9uL2NtZF9kY3IuYwppbmRleCA0NWZlNjZhLi41NjhlMjI2IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Rjci5jCisrKyBiL2NvbW1vbi9jbWRfZGNyLmMKQEAgLTY4LDcgKzY4LDYgQEAKIAogCS8qIERDUidzIHZhbHVlICovCiAJaW50IG5ieXRlczsKLQlleHRlcm4gY2hhciBjb25zb2xlX2J1ZmZlcltdOwogCiAJLyogVmFsaWRhdGUgYXJndW1lbnRzICovCiAJaWYgKGFyZ2MgPCAyKQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9mZGMuYyBiL2NvbW1vbi9jbWRfZmRjLmMKaW5kZXggNDBkMTJmNi4uNGZlNDEwZCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mZGMuYworKysgYi9jb21tb24vY21kX2ZkYy5jCkBAIC00MjgsOCArNDI4LDggQEAKIGludCBmZGNfcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBibG9ja3MsRkRDX0NPTU1BTkRfU1RSVUNUICpwQ01ELCBGRF9HRU9fU1RSVUNUICpwRkcpCiB7CiAgIC8qIGZpcnN0IHNlZWsgdG8gc3RhcnQgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgbGVuLGxhc3RibGsscmVhZGJsayxpLHRpbWVvdXQsaWksb2Zmc2V0OwotCXVuc2lnbmVkIGNoYXIgcGNuLGMscmV0cmllc3J3LHJldHJpZXNjYWw7CisJdW5zaWduZWQgbG9uZyBsZW4scmVhZGJsayxpLHRpbWVvdXQsaWksb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIgYyxyZXRyaWVzcncscmV0cmllc2NhbDsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXJ3OyAvKiB3b3JraW5nIGJ1ZmZlciAqLwogCWludCBzZWN0X3NpemU7CiAJaW50IGZsYWdzOwpAQCAtNDQyLDE4ICs0NDIsMTkgQEAKIAlvZmZzZXQ9MDsKIAlpZihmZGNfc2VlayhwQ01ELHBGRyk9PUZBTFNFKSB7CiAJCXN0b3BfZmRjX2RyaXZlKHBDTUQpOwotCQllbmFibGVfaW50ZXJydXB0cygpOworCQlpZiAoZmxhZ3MpCisJCQllbmFibGVfaW50ZXJydXB0cygpOwogCQlyZXR1cm4gRkFMU0U7CiAJfQogCWlmKChwQ01ELT5yZXN1bHRbU1RBVFVTXzBdJjB4MjApIT0weDIwKSB7CiAJCXByaW50ZigiU2VlayBlcnJvciBTdGF0dXM6ICUwMlhcbiIscENNRC0+cmVzdWx0W1NUQVRVU18wXSk7CiAJCXN0b3BfZmRjX2RyaXZlKHBDTUQpOwotCQllbmFibGVfaW50ZXJydXB0cygpOworCQlpZiAoZmxhZ3MpCisJCQllbmFibGVfaW50ZXJydXB0cygpOwogCQlyZXR1cm4gRkFMU0U7CiAJfQotCXBjbj1wQ01ELT5yZXN1bHRbU1RBVFVTX1BDTl07IC8qIGN1cnJlbnQgdHJhY2sgKi8KIAkvKiBub3cgZGV0ZXJtaW5lIHRoZSBuZXh0IHNlZWsgcG9pbnQgKi8KLQlsYXN0YmxrPXBDTUQtPmJsbnIgKyBibG9ja3M7CisJLyoJbGFzdGJsaz1wQ01ELT5ibG5yICsgYmxvY2tzOyAqLwogCS8qCXJlYWRibGs9KHBGRy0+aGVhZCpwRkctPnNlY3QpLShwQ01ELT5ibG5yJShwRkctPmhlYWQqcEZHLT5zZWN0KSk7ICovCiAJcmVhZGJsaz1wRkctPnNlY3QtKHBDTUQtPmJsbnIlcEZHLT5zZWN0KTsKIAlQUklOVEYoIjFzdCBuciBvZiBibG9jayBwb3NzaWJsZSByZWFkICVsZCBzdGFydCAlbGRcbiIscmVhZGJsayxwQ01ELT5ibG5yKTsKQEAgLTQ2Nyw3ICs0NjgsOCBAQAogCQlwQ01ELT5jbWRbQ09NTUFORF09RkRDX0NNRF9SRUFEOwogCQlpZihmZGNfaXNzdWVfY21kKHBDTUQscEZHKT09RkFMU0UpIHsKIAkJCXN0b3BfZmRjX2RyaXZlKHBDTUQpOwotCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJCWlmIChmbGFncykKKwkJCQllbmFibGVfaW50ZXJydXB0cygpOwogCQkJcmV0dXJuIEZBTFNFOwogCQl9CiAJCWZvciAoaT0wO2k8bGVuO2krKykgewpAQCAtNDg4LDE0ICs0OTAsMTYgQEAKIAkJCQkJaWYocmV0cmllc3J3Kys+RkRDX1JXX1JFVFJJRVMpIHsKIAkJCQkJCWlmIChyZXRyaWVzY2FsKys+RkRDX0NBTF9SRVRSSUVTKSB7CiAJCQkJCQkJc3RvcF9mZGNfZHJpdmUocENNRCk7Ci0JCQkJCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJCQkJCQlpZiAoZmxhZ3MpCisJCQkJCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAJCQkJCQkJcmV0dXJuIEZBTFNFOwogCQkJCQkJfQogCQkJCQkJZWxzZSB7CiAJCQkJCQkJUFJJTlRGKCIgdHJ5aW5nIHRvIHJlY2FsaWJyYXRlIFRyeSAlZFxuIixyZXRyaWVzY2FsKTsKIAkJCQkJCQlpZihmZGNfcmVjYWxpYnJhdGUocENNRCxwRkcpPT1GQUxTRSkgewogCQkJCQkJCQlzdG9wX2ZkY19kcml2ZShwQ01EKTsKLQkJCQkJCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJCQkJCQkJaWYgKGZsYWdzKQorCQkJCQkJCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAkJCQkJCQkJcmV0dXJuIEZBTFNFOwogCQkJCQkJCX0KIAkJCQkJCQlyZXRyaWVzcnc9MDsKQEAgLTUyOCw3ICs1MzIsOCBAQAogCQkvKiBhIHNlZWsgaXMgbmVjZXNzYXJ5ICovCiAJCWlmKGZkY19zZWVrKHBDTUQscEZHKT09RkFMU0UpIHsKIAkJCXN0b3BfZmRjX2RyaXZlKHBDTUQpOwotCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJCWlmIChmbGFncykKKwkJCQllbmFibGVfaW50ZXJydXB0cygpOwogCQkJcmV0dXJuIEZBTFNFOwogCQl9CiAJCWlmKChwQ01ELT5yZXN1bHRbU1RBVFVTXzBdJjB4MjApIT0weDIwKSB7CkBAIC01MzYsMTAgKzU0MSwxMCBAQAogCQkJc3RvcF9mZGNfZHJpdmUocENNRCk7CiAJCQlyZXR1cm4gRkFMU0U7CiAJCX0KLQkJcGNuPXBDTUQtPnJlc3VsdFtTVEFUVVNfUENOXTsgLyogY3VycmVudCB0cmFjayAqLwogCX13aGlsZShUUlVFKTsgLyogc3RhcnQgb3ZlciAqLwogCXN0b3BfZmRjX2RyaXZlKHBDTUQpOyAvKiBzd2l0Y2ggb2ZmIGRyaXZlICovCi0JZW5hYmxlX2ludGVycnVwdHMoKTsKKwlpZiAoZmxhZ3MpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAJcmV0dXJuIFRSVUU7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfaTJjLmMgYi9jb21tb24vY21kX2kyYy5jCmluZGV4IGEwYzUyOTEuLmU3OTUxMzkgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfaTJjLmMKKysrIGIvY29tbW9uL2NtZF9pMmMuYwpAQCAtNDQ5LDcgKzQ0OSw2IEBACiAJdWxvbmcJZGF0YTsKIAlpbnQJc2l6ZSA9IDE7CiAJaW50CW5ieXRlczsKLQlleHRlcm4gY2hhciBjb25zb2xlX2J1ZmZlcltdOwogCiAJaWYgKGFyZ2MgIT0gMykKIAkJcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX21lbS5jIGIvY29tbW9uL2NtZF9tZW0uYwppbmRleCA0NjFlZTE5Li5mN2U3NmQ2IDEwMDY0NAotLS0gYS9jb21tb24vY21kX21lbS5jCisrKyBiL2NvbW1vbi9jbWRfbWVtLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxkYXRhZmxhc2guaD4KICNlbmRpZgogI2luY2x1ZGUgPHdhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpZmRlZglDTURfTUVNX0RFQlVHCiAjZGVmaW5lCVBSSU5URihmbXQsYXJncy4uLikJcHJpbnRmIChmbXQgLCMjYXJncykKQEAgLTE0MiwxMyArMTQxLDkgQEAKICMgZW5kaWYKIAogCXsKLQkJdWxvbmcgYnl0ZXMgPSBzaXplICogbGVuZ3RoOwotCQl2b2lkICpidWYgPSBtYXBfcGh5c21lbShhZGRyLCBieXRlcywgTUFQX1dSQkFDSyk7Ci0KIAkJLyogUHJpbnQgdGhlIGxpbmVzLiAqLwotCQlwcmludF9idWZmZXIoYWRkciwgYnVmLCBzaXplLCBsZW5ndGgsIERJU1BfTElORV9MRU4gLyBzaXplKTsKLQkJYWRkciArPSBieXRlczsKLQkJdW5tYXBfcGh5c21lbShidWYsIGJ5dGVzKTsKKwkJcHJpbnRfYnVmZmVyKGFkZHIsICh2b2lkKilhZGRyLCBzaXplLCBsZW5ndGgsIERJU1BfTElORV9MRU4vc2l6ZSk7CisJCWFkZHIgKz0gc2l6ZSpsZW5ndGg7CiAJfQogI2VuZGlmCiAKQEAgLTk4Miw3ICs5NzcsNiBAQAogewogCXVsb25nCWFkZHIsIGk7CiAJaW50CW5ieXRlcywgc2l6ZTsKLQlleHRlcm4gY2hhciBjb25zb2xlX2J1ZmZlcltdOwogCiAJaWYgKGFyZ2MgIT0gMikKIAkJcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX252ZWRpdC5jIGIvY29tbW9uL2NtZF9udmVkaXQuYwppbmRleCAzOTZhMTcxLi43NDA5YTM2IDEwMDY0NAotLS0gYS9jb21tb24vY21kX252ZWRpdC5jCisrKyBiL2NvbW1vbi9jbWRfbnZlZGl0LmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCX0KIAogCS8qIHByaW50IHdob2xlIGxpc3QgKi8KLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXG4nLCAmcmVzLCAwKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXG4nLCAmcmVzLCAwLCAwLCBOVUxMKTsKIAogCWlmIChsZW4gPiAwKSB7CiAJCXB1dHMocmVzKTsKQEAgLTE2NSw3ICsxNjUsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0NNRF9HUkVQRU5WCi1zdGF0aWMgaW50IGRvX2Vudl9ncmVwIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCitzdGF0aWMgaW50IGRvX2Vudl9ncmVwKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLAorCQkgICAgICAgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCiB7CiAJRU5UUlkgKm1hdGNoOwogCXVuc2lnbmVkIGNoYXIgbWF0Y2hlZFtlbnZfaHRhYi5zaXplIC8gOF07CkBAIC0xNzgsNyArMTc5LDcgQEAKIAogCXdoaWxlIChhcmcgPD0gYXJnYykgewogCQlpZHggPSAwOwotCQl3aGlsZSAoKGlkeCA9IGhzdHJzdHJfcihhcmd2W2FyZ10sIGlkeCwgJm1hdGNoLCAmZW52X2h0YWIpKSkgeworCQl3aGlsZSAoaWR4ID0gaHN0cnN0cl9yKGFyZ3ZbYXJnXSwgaWR4LCAmbWF0Y2gsICZlbnZfaHRhYikpIHsKIAkJCWlmICghKG1hdGNoZWRbaWR4IC8gOF0gJiAoMSA8PCAoaWR4ICYgNykpKSkgewogCQkJCXB1dHMobWF0Y2gtPmtleSk7CiAJCQkJcHV0cygiPSIpOwpAQCAtMTk5LDggKzIwMCw3IEBACiAgKiBTZXQgYSBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGUsCiAgKiBvciByZXBsYWNlIG9yIGRlbGV0ZSBhbiBleGlzdGluZyBvbmUuCiAgKi8KLQotaW50IF9kb19lbnZfc2V0IChpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCitpbnQgX2RvX2Vudl9zZXQoaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQogewogCWJkX3QgICpiZCA9IGdkLT5iZDsKIAlpbnQgICBpLCBsZW47CkBAIC0yMTEsNyArMjExLDggQEAKIAluYW1lID0gYXJndlsxXTsKIAogCWlmIChzdHJjaHIobmFtZSwgJz0nKSkgewotCQlwcmludGYoIiMjIEVycm9yOiBpbGxlZ2FsIGNoYXJhY3RlciAnPScgaW4gdmFyaWFibGUgbmFtZSBcIiVzXCJcbiIsIG5hbWUpOworCQlwcmludGYoIiMjIEVycm9yOiBpbGxlZ2FsIGNoYXJhY3RlciAnPScgaW4gdmFyaWFibGUgbmFtZSIKKwkJICAgICAgICJcIiVzXCJcbiIsIG5hbWUpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTI1OSwxMiArMjYwLDEyIEBACiAJICovCiAJaWYgKGVwKSB7CQkvKiB2YXJpYWJsZSBleGlzdHMgKi8KICNpZm5kZWYgQ09ORklHX0VOVl9PVkVSV1JJVEUKLQkJaWYgKChzdHJjbXAobmFtZSwgInNlcmlhbCMiKSA9PSAwKSB8fAotCQkgICAgKChzdHJjbXAobmFtZSwgImV0aGFkZHIiKSA9PSAwKQorCQlpZiAoc3RyY21wKG5hbWUsICJzZXJpYWwjIikgPT0gMCB8fAorCQkgICAgKHN0cmNtcChuYW1lLCAiZXRoYWRkciIpID09IDAKICNpZiBkZWZpbmVkKENPTkZJR19PVkVSV1JJVEVfRVRIQUREUl9PTkNFKSAmJiBkZWZpbmVkKENPTkZJR19FVEhBRERSKQotCQkgICAgICYmIChzdHJjbXAoZXAtPmRhdGEsIE1LX1NUUihDT05GSUdfRVRIQUREUikpICE9IDApCisJCSAgICAgJiYgc3RyY21wKGVwLT5kYXRhLCBNS19TVFIoQ09ORklHX0VUSEFERFIpKSAhPSAwCiAjZW5kaWYJLyogQ09ORklHX09WRVJXUklURV9FVEhBRERSX09OQ0UgJiYgQ09ORklHX0VUSEFERFIgKi8KLQkJICAgICkgKSB7CisJCQkpKSB7CiAJCQlwcmludGYoIkNhbid0IG92ZXJ3cml0ZSBcIiVzXCJcbiIsIG5hbWUpOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTI4NCw4ICsyODUsOCBAQAogCQkJCQliYXVkcmF0ZSk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9Ci0JCQlwcmludGYgKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCBwcmVzcyBFTlRFUiAuLi5cbiIsCi0JCQkJYmF1ZHJhdGUpOworCQkJcHJpbnRmKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCIKKwkJCSAgICAgICAicHJlc3MgRU5URVIgLi4uXG4iLCBiYXVkcmF0ZSk7CiAJCQl1ZGVsYXkoNTAwMDApOwogCQkJZ2QtPmJhdWRyYXRlID0gYmF1ZHJhdGU7CiAjaWYgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19NQ0Y1MngyKQpAQCAtMjk0LDE1ICsyOTUsMTMgQEAKIAogCQkJc2VyaWFsX3NldGJyZygpOwogCQkJdWRlbGF5KDUwMDAwKTsKLQkJCWZvciAoOzspIHsKLQkJCQlpZiAoZ2V0YygpID09ICdccicpCi0JCQkJCWJyZWFrOwotCQkJfQorCQkJd2hpbGUgKGdldGMoKSAhPSAnXHInKQorCQkJCTsKIAkJfQogCX0KIAogCS8qIERlbGV0ZSBvbmx5ID8gKi8KLQlpZiAoKGFyZ2MgPCAzKSB8fCBhcmd2WzJdID09IE5VTEwpIHsKKwlpZiAoYXJnYyA8IDMgfHwgYXJndlsyXSA9PSBOVUxMKSB7CiAJCWludCByYyA9IGhkZWxldGVfcihuYW1lLCAmZW52X2h0YWIpOwogCQlyZXR1cm4gIXJjOwogCX0KQEAgLTMyMywxMyArMzIyLDEzIEBACiAKIAkJd2hpbGUgKCgqcysrID0gKnYrKykgIT0gJ1wwJykKIAkJCTsKLQkJKihzLTEpID0gJyAnOworCQkqKHMgLSAxKSA9ICcgJzsKIAl9CiAJaWYgKHMgIT0gdmFsdWUpCiAJCSotLXMgPSAnXDAnOwogCi0JZS5rZXkgID0gbmFtZTsKLQllLmRhdGEgPSB2YWx1ZTsKKwllLmtleQk9IG5hbWU7CisJZS5kYXRhCT0gdmFsdWU7CiAJaHNlYXJjaF9yKGUsIEVOVEVSLCAmZXAsICZlbnZfaHRhYik7CiAJZnJlZSh2YWx1ZSk7CiAJaWYgKCFlcCkgewpAQCAtMzQyLDcgKzM0MSw2IEBACiAJICogU29tZSB2YXJpYWJsZXMgc2hvdWxkIGJlIHVwZGF0ZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZwogCSAqIGVudHJ5IGluIHRoZSBlbnZpcm9ubWVudCBpcyBjaGFuZ2VkCiAJICovCi0KIAlpZiAoc3RyY21wKG5hbWUsICJpcGFkZHIiKSA9PSAwKSB7CiAJCWNoYXIgKnMgPSBhcmd2WzJdOwkvKiBhbHdheXMgdXNlIG9ubHkgb25lIGFyZyAqLwogCQljaGFyICplOwpAQCAtMzUxLDggKzM0OSw5IEBACiAJCWZvciAoYWRkciA9IDAsIGkgPSAwOyBpIDwgNDsgKytpKSB7CiAJCQl1bG9uZyB2YWwgPSBzID8gc2ltcGxlX3N0cnRvdWwocywgJmUsIDEwKSA6IDA7CiAJCQlhZGRyIDw8PSA4OwotCQkJYWRkciAgfD0gKHZhbCAmIDB4RkYpOwotCQkJaWYgKHMpIHMgPSAoKmUpID8gZSsxIDogZTsKKwkJCWFkZHIgIHw9IHZhbCAmIDB4RkY7CisJCQlpZiAocykKKwkJCQlzID0gKmUgPyBlICsgMSA6IGU7CiAJCX0KIAkJYmQtPmJpX2lwX2FkZHIgPSBodG9ubChhZGRyKTsKIAkJcmV0dXJuIDA7CkBAIC0zNzMsNyArMzcyLDcgQEAKIHsKIAljb25zdCBjaGFyICogY29uc3QgYXJndls0XSA9IHsgInNldGVudiIsIHZhcm5hbWUsIHZhcnZhbHVlLCBOVUxMIH07CiAKLQlpZiAoKHZhcnZhbHVlID09IE5VTEwpIHx8ICh2YXJ2YWx1ZVswXSA9PSAnXDAnKSkKKwlpZiAodmFydmFsdWUgPT0gTlVMTCB8fCB2YXJ2YWx1ZVswXSA9PSAnXDAnKQogCQlyZXR1cm4gX2RvX2Vudl9zZXQoMCwgMiwgKGNoYXIgKiBjb25zdCAqKWFyZ3YpOwogCWVsc2UKIAkJcmV0dXJuIF9kb19lbnZfc2V0KDAsIDMsIChjaGFyICogY29uc3QgKilhcmd2KTsKQEAgLTQwNSw3ICs0MDQsNyBAQAogewogCWNoYXIgc3RyWzE3XTsKIAotCXNwcmludGYoc3RyLCAiJXgiLCAodWludHB0cl90KWFkZHIpOworCXNwcmludGYoc3RyLCAiJWx4IiwgKHVpbnRwdHJfdClhZGRyKTsKIAlyZXR1cm4gc2V0ZW52KHZhcm5hbWUsIHN0cik7CiB9CiAKQEAgLTQyMyw3ICs0MjIsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9BU0tFTlYpCiBpbnQgZG9fZW52X2FzayhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCiB7Ci0JZXh0ZXJuIGNoYXIgY29uc29sZV9idWZmZXJbQ09ORklHX1NZU19DQlNJWkVdOwogCWNoYXIgbWVzc2FnZVtDT05GSUdfU1lTX0NCU0laRV07CiAJaW50IHNpemUgPSBDT05GSUdfU1lTX0NCU0laRSAtIDE7CiAJaW50IGksIGxlbiwgcG9zOwpAQCAtNDUzLDkgKzQ1MSwxMCBAQAogCQkJaWYgKHBvcykKIAkJCQltZXNzYWdlW3BvcysrXSA9ICcgJzsKIAotCQkJc3RyY3B5KG1lc3NhZ2UrcG9zLCBhcmd2W2ldKTsKKwkJCXN0cmNweShtZXNzYWdlICsgcG9zLCBhcmd2W2ldKTsKIAkJCXBvcyArPSBzdHJsZW4oYXJndltpXSk7CiAJCX0KKwogCQltZXNzYWdlW3Bvc10gPSAnXDAnOwogCQlzaXplID0gc2ltcGxlX3N0cnRvdWwoYXJndlthcmdjIC0gMV0sIE5VTEwsIDEwKTsKIAkJYnJlYWs7CkBAIC01MTYsMjAgKzUxNSwxOSBAQAogICovCiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAoZ2QtPmZsYWdzICYgR0RfRkxHX0VOVl9SRUFEWSkgewkvKiBhZnRlciBpbXBvcnQgaW50byBoYXNodGFibGUgKi8KKwlpZiAoZ2QtPmZsYWdzICYgR0RfRkxHX0VOVl9SRUFEWSkgeyAvKiBhZnRlciBpbXBvcnQgaW50byBoYXNodGFibGUgKi8KIAkJRU5UUlkgZSwgKmVwOwogCiAJCVdBVENIRE9HX1JFU0VUKCk7CiAKLQkJZS5rZXkgID0gbmFtZTsKLQkJZS5kYXRhID0gTlVMTDsKKwkJZS5rZXkJPSBuYW1lOworCQllLmRhdGEJPSBOVUxMOwogCQloc2VhcmNoX3IoZSwgRklORCwgJmVwLCAmZW52X2h0YWIpOwogCiAJCXJldHVybiBlcCA/IGVwLT5kYXRhIDogTlVMTDsKIAl9CiAKIAkvKiByZXN0cmljdGVkIGNhcGFiaWxpdGllcyBiZWZvcmUgaW1wb3J0ICovCi0KIAlpZiAoZ2V0ZW52X2YobmFtZSwgKGNoYXIgKikoZ2QtPmVudl9idWYpLCBzaXplb2YoZ2QtPmVudl9idWYpKSA+IDApCiAJCXJldHVybiAoY2hhciAqKShnZC0+ZW52X2J1Zik7CiAKQEAgLTU0Myw3ICs1NDEsNyBAQAogewogCWludCBpLCBueHQ7CiAKLQlmb3IgKGkgPSAwOyBlbnZfZ2V0X2NoYXIoaSkgIT0gJ1wwJzsgaSA9IG54dCsxKSB7CisJZm9yIChpID0gMDsgZW52X2dldF9jaGFyKGkpICE9ICdcMCc7IGkgPSBueHQgKyAxKSB7CiAJCWludCB2YWwsIG47CiAKIAkJZm9yIChueHQgPSBpOyBlbnZfZ2V0X2NoYXIobnh0KSAhPSAnXDAnOyArK254dCkgewpAQCAtNTU3LDcgKzU1NSw4IEBACiAKIAkJLyogZm91bmQ7IGNvcHkgb3V0ICovCiAJCWZvciAobiA9IDA7IG4gPCBsZW47ICsrbiwgKytidWYpIHsKLQkJCWlmICgoKmJ1ZiA9IGVudl9nZXRfY2hhcih2YWwrKykpID09ICdcMCcpCisJCQkqYnVmID0gZW52X2dldF9jaGFyKHZhbCsrKTsKKwkJCWlmICgqYnVmID09ICdcMCcpCiAJCQkJcmV0dXJuIG47CiAJCX0KIApAQCAtNTY5LDYgKzU2OCw3IEBACiAKIAkJcmV0dXJuIG47CiAJfQorCiAJcmV0dXJuIC0xOwogfQogCkBAIC01OTMsMTEgKzU5Myw4IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19DTURfU0FWRUVOVikgJiYgIWRlZmluZWQoQ09ORklHX0VOVl9JU19OT1dIRVJFKQotCiBpbnQgZG9fZW52X3NhdmUoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQogewotCWV4dGVybiBjaGFyICplbnZfbmFtZV9zcGVjOwotCiAJcHJpbnRmKCJTYXZpbmcgRW52aXJvbm1lbnQgdG8gJXMuLi5cbiIsIGVudl9uYW1lX3NwZWMpOwogCiAJcmV0dXJuIHNhdmVlbnYoKSA/IDEgOiAwOwpAQCAtNjA4LDcgKzYwNSw2IEBACiAJInNhdmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBlcnNpc3RlbnQgc3RvcmFnZSIsCiAJIiIKICk7Ci0KICNlbmRpZgogCiAKQEAgLTYxNywyOSArNjEzLDMyIEBACiAgKgogICogczEgaXMgZWl0aGVyIGEgc2ltcGxlICduYW1lJywgb3IgYSAnbmFtZT12YWx1ZScgcGFpci4KICAqIGkyIGlzIHRoZSBlbnZpcm9ubWVudCBpbmRleCBmb3IgYSAnbmFtZTI9dmFsdWUyJyBwYWlyLgotICogSWYgdGhlIG5hbWVzIG1hdGNoLCByZXR1cm4gdGhlIGluZGV4IGZvciB0aGUgdmFsdWUyLCBlbHNlIE5VTEwuCisgKiBJZiB0aGUgbmFtZXMgbWF0Y2gsIHJldHVybiB0aGUgaW5kZXggZm9yIHRoZSB2YWx1ZTIsIGVsc2UgLTEuCiAgKi8KLQogaW50IGVudm1hdGNoKHVjaGFyICpzMSwgaW50IGkyKQogewogCXdoaWxlICgqczEgPT0gZW52X2dldF9jaGFyKGkyKyspKQogCQlpZiAoKnMxKysgPT0gJz0nKQogCQkJcmV0dXJuIGkyOworCiAJaWYgKCpzMSA9PSAnXDAnICYmIGVudl9nZXRfY2hhcihpMi0xKSA9PSAnPScpCiAJCXJldHVybiBpMjsKKwogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBkb19lbnZfZGVmYXVsdChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCitzdGF0aWMgaW50IGRvX2Vudl9kZWZhdWx0KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLAorCQkJICBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKIHsKLQlpZiAoKGFyZ2MgIT0gMikgfHwgKHN0cmNtcChhcmd2WzFdLCAiLWYiKSAhPSAwKSkKKwlpZiAoYXJnYyAhPSAyIHx8IHN0cmNtcChhcmd2WzFdLCAiLWYiKSAhPSAwKQogCQlyZXR1cm4gY21kX3VzYWdlKGNtZHRwKTsKIAogCXNldF9kZWZhdWx0X2VudigiIyMgUmVzZXR0aW5nIHRvIGRlZmF1bHQgZW52aXJvbm1lbnRcbiIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX2Vudl9kZWxldGUoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQorc3RhdGljIGludCBkb19lbnZfZGVsZXRlKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLAorCQkJIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQogewogCXByaW50ZigiTm90IGltcGxlbWVudGVkIHlldFxuIik7CiAJcmV0dXJuIDA7CkBAIC02NDcsNyArNjQ2LDcgQEAKIAogI2lmZGVmIENPTkZJR19DTURfRVhQT1JURU5WCiAvKgotICogZW52IGV4cG9ydCBbLXQgfCAtYiB8IC1jXSBhZGRyIFtzaXplXQorICogZW52IGV4cG9ydCBbLXQgfCAtYiB8IC1jXSBbLXMgc2l6ZV0gYWRkciBbdmFyIC4uLl0KICAqCS10OglleHBvcnQgYXMgdGV4dCBmb3JtYXQ7IGlmIHNpemUgaXMgZ2l2ZW4sIGRhdGEgd2lsbCBiZQogICoJCXBhZGRlZCB3aXRoICdcMCcgYnl0ZXM7IGlmIG5vdCwgb25lIHRlcm1pbmF0aW5nICdcMCcKICAqCQl3aWxsIGJlIGFkZGVkICh3aGljaCBpcyBpbmNsdWRlZCBpbiB0aGUgImZpbGVzaXplIgpAQCAtNjU3LDggKzY1NiwxMiBAQAogICoJCSdcMCcsIGxpc3QgZW5kIG1hcmtlZCBieSBkb3VibGUgIlwwXDAiKQogICoJLWM6CWV4cG9ydCBhcyBjaGVja3N1bSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQgZm9ybWF0IGFzCiAgKgkJdXNlZCBmb3IgZXhhbXBsZSBieSAic2F2ZWVudiIgY29tbWFuZAorICoJLXMgc2l6ZToKKyAqCQlzaXplIG9mIG91dHB1dCBidWZmZXIKICAqCWFkZHI6CW1lbW9yeSBhZGRyZXNzIHdoZXJlIGVudmlyb25tZW50IGdldHMgc3RvcmVkCi0gKglzaXplOglzaXplIG9mIG91dHB1dCBidWZmZXIKKyAqCXZhci4uLglMaXN0IG9mIHZhcmlhYmxlIG5hbWVzIHRoYXQgZ2V0IGluY2x1ZGVkIGludG8gdGhlCisgKgkJZXhwb3J0LiBXaXRob3V0IGFyZ3VtZW50cywgdGhlIHdob2xlIGVudmlyb25tZW50IGdldHMKKyAqCQlleHBvcnRlZC4KICAqCiAgKiBXaXRoICItYyIgYW5kIHNpemUgaXMgTk9UIGdpdmVuLCB0aGVuIHRoZSBleHBvcnQgY29tbWFuZCB3aWxsCiAgKiBmb3JtYXQgdGhlIGRhdGEgYXMgY3VycmVudGx5IHVzZWQgZm9yIHRoZSBwZXJzaXN0ZW50IHN0b3JhZ2UsCkBAIC02ODcsMTEgKzY5MCwxMiBAQAogICoKICAqCT0+IGVudiBpbXBvcnQgLWQgLXQgJHtiYWNrdXBfYWRkcn0KICAqLwotc3RhdGljIGludCBkb19lbnZfZXhwb3J0KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKK3N0YXRpYyBpbnQgZG9fZW52X2V4cG9ydChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywKKwkJCSBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKIHsKIAljaGFyCWJ1ZlszMl07CiAJY2hhcgkqYWRkciwgKmNtZCwgKnJlczsKLQlzaXplX3QJc2l6ZTsKKwlzaXplX3QJc2l6ZSA9IDA7CiAJc3NpemVfdAlsZW47CiAJZW52X3QJKmVudnA7CiAJY2hhcglzZXAgPSAnXG4nOwpAQCAtNzE1LDYgKzcxOSwxMSBAQAogCQkJCXNlcCA9ICdcMCc7CiAJCQkJY2hrID0gMTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgkJLyogc2l6ZSBnaXZlbiAqLworCQkJCWlmICgtLWFyZ2MgPD0gMCkKKwkJCQkJcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7CisJCQkJc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsKCorK2FyZ3YsIE5VTEwsIDE2KTsKKwkJCQlnb3RvIE5YVEFSRzsKIAkJCWNhc2UgJ3QnOgkJLyogdGV4dCBmb3JtYXQgKi8KIAkJCQlpZiAoZm10KyspCiAJCQkJCWdvdG8gc2VwX2VycjsKQEAgLTcyNCw2ICs3MzMsNyBAQAogCQkJCXJldHVybiBjbWRfdXNhZ2UoY21kdHApOwogCQkJfQogCQl9CitOWFRBUkc6CQk7CiAJfQogCiAJaWYgKGFyZ2MgPCAxKQpAQCAtNzMxLDE4ICs3NDEsMTYgQEAKIAogCWFkZHIgPSAoY2hhciAqKXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMF0sIE5VTEwsIDE2KTsKIAotCWlmIChhcmdjID09IDIpIHsKLQkJc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKKwlpZiAoc2l6ZSkKIAkJbWVtc2V0KGFkZHIsICdcMCcsIHNpemUpOwotCX0gZWxzZSB7Ci0JCXNpemUgPSAwOwotCX0KKworCWFyZ2MtLTsKKwlhcmd2Kys7CiAKIAlpZiAoc2VwKSB7CQkvKiBleHBvcnQgYXMgdGV4dCBmaWxlICovCi0JCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsIHNlcCwgJmFkZHIsIHNpemUpOworCQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCBzZXAsICZhZGRyLCBzaXplLCBhcmdjLCBhcmd2KTsKIAkJaWYgKGxlbiA8IDApIHsKLQkJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLAotCQkJCWVycm5vKTsKKwkJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlzcHJpbnRmKGJ1ZiwgIiV6WCIsIChzaXplX3QpbGVuKTsKQEAgLTc1OCwxNSArNzY2LDE0IEBACiAJZWxzZQkJCS8qIGV4cG9ydCBhcyByYXcgYmluYXJ5IGRhdGEgKi8KIAkJcmVzID0gYWRkcjsKIAotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgYXJnYywgYXJndik7CiAJaWYgKGxlbiA8IDApIHsKLQkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsCi0JCQllcnJubyk7CisJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmIChjaGspIHsKLQkJZW52cC0+Y3JjICAgPSBjcmMzMigwLCBlbnZwLT5kYXRhLCBFTlZfU0laRSk7CisJCWVudnAtPmNyYyA9IGNyYzMyKDAsIGVudnAtPmRhdGEsIEVOVl9TSVpFKTsKICNpZmRlZiBDT05GSUdfRU5WX0FERFJfUkVEVU5ECiAJCWVudnAtPmZsYWdzID0gQUNUSVZFX0ZMQUc7CiAjZW5kaWYKQEAgLTc3Nyw4ICs3ODQsNyBAQAogCXJldHVybiAwOwogCiBzZXBfZXJyOgotCXByaW50ZigiIyMgJXM6IG9ubHkgb25lIG9mIFwiLWJcIiwgXCItY1wiIG9yIFwiLXRcIiBhbGxvd2VkXG4iLAotCQljbWQpOworCXByaW50ZigiIyMgJXM6IG9ubHkgb25lIG9mIFwiLWJcIiwgXCItY1wiIG9yIFwiLXRcIiBhbGxvd2VkXG4iLAljbWQpOwogCXJldHVybiAxOwogfQogI2VuZGlmCkBAIC03OTYsNyArODAyLDggQEAKICAqCXNpemU6CWxlbmd0aCBvZiBpbnB1dCBkYXRhOyBpZiBtaXNzaW5nLCBwcm9wZXIgJ1wwJwogICoJCXRlcm1pbmF0aW9uIGlzIG1hbmRhdG9yeQogICovCi1zdGF0aWMgaW50IGRvX2Vudl9pbXBvcnQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQorc3RhdGljIGludCBkb19lbnZfaW1wb3J0KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLAorCQkJIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQogewogCWNoYXIJKmNtZCwgKmFkZHI7CiAJY2hhcglzZXAgPSAnXG4nOwpAQCAtODYyLDcgKzg2OSw3IEBACiAJCQkJIiAtIHRydW5jYXRlZFxuIiwgTUFYX0VOVl9TSVpFKTsKIAkJfQogCQkrK3NpemU7Ci0JCXByaW50ZigiIyMgSW5mbzogaW5wdXQgZGF0YSBzaXplID0gJXpkID0gMHglelhcbiIsIHNpemUsIHNpemUpOworCQlwcmludGYoIiMjIEluZm86IGlucHV0IGRhdGEgc2l6ZSA9ICV6dSA9IDB4JXpYXG4iLCBzaXplLCBzaXplKTsKIAl9CiAKIAlpZiAoY2hrKSB7CkBAIC04OTQsMTAgKzkwMSw2IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9SVU4pCi1leHRlcm4gaW50IGRvX3J1bihjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pOwotI2VuZGlmCi0KIC8qCiAgKiBOZXcgY29tbWFuZCBsaW5lIGludGVyZmFjZTogImVudiIgY29tbWFuZCB3aXRoIHN1YmNvbW1hbmRzCiAgKi8KQEAgLTk2NSw3ICs5NjgsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9FRElURU5WKQogCSJlbnYgZWRpdCBuYW1lIC0gZWRpdCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIgogI2VuZGlmCi0JImVudiBleHBvcnQgWy10IHwgLWIgfCAtY10gYWRkciBbc2l6ZV0gLSBleHBvcnQgZW52aXJvbm1lbnRcbiIKKwkiZW52IGV4cG9ydCBbLXQgfCAtYiB8IC1jXSBbLXMgc2l6ZV0gYWRkciBbdmFyIC4uLl0gLSBleHBvcnQgZW52aXJvbm1lbnRcbiIKICNpZiBkZWZpbmVkKENPTkZJR19DTURfR1JFUEVOVikKIAkiZW52IGdyZXAgc3RyaW5nIFsuLi5dIC0gc2VhcmNoIGVudmlyb25tZW50XG4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfcGNpLmMgYi9jb21tb24vY21kX3BjaS5jCmluZGV4IDkyNjMxZWEuLjFlNDc3YmMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfcGNpLmMKKysrIGIvY29tbW9uL2NtZF9wY2kuYwpAQCAtMzQxLDcgKzM0MSw2IEBACiB7CiAJdWxvbmcJaTsKIAlpbnQJbmJ5dGVzOwotCWV4dGVybiBjaGFyIGNvbnNvbGVfYnVmZmVyW107CiAJdWludAl2YWw0OwogCXVzaG9ydCAgdmFsMjsKIAl1X2NoYXIJdmFsMTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfdHNpMTQ4LmMgYi9jb21tb24vY21kX3RzaTE0OC5jCmluZGV4IDZkYzlkYWIuLjdmNDhlYTIgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfdHNpMTQ4LmMKKysrIGIvY29tbW9uL2NtZF90c2kxNDguYwpAQCAtNTMsNyArNTMsNyBAQAogCiBpbnQgdHNpMTQ4X2luaXQodm9pZCkKIHsKLQlpbnQgaiwgcmVzdWx0LCBsYXN0RXJyb3IgPSAwOworCWludCBqLCByZXN1bHQ7CiAJcGNpX2Rldl90IGJ1c2RldmZuOwogCXVuc2lnbmVkIGludCB2YWw7CiAKQEAgLTY5LDggKzY5LDcgQEAKIAlkZXYgPSBtYWxsb2Moc2l6ZW9mKCpkZXYpKTsKIAlpZiAoTlVMTCA9PSBkZXYpIHsKIAkJcHV0cygiVHNpMTQ4OiBObyBtZW1vcnkhXG4iKTsKLQkJcmVzdWx0ID0gLTE7Ci0JCWdvdG8gYnJlYWtfMjA7CisJCXJldHVybiAtMTsKIAl9CiAKIAltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwpAQCAtMTM5LDggKzEzOCw2IEBACiAgYnJlYWtfMzA6CiAJZnJlZShkZXYpOwogCWRldiA9IE5VTEw7Ci0gYnJlYWtfMjA6Ci0JbGFzdEVycm9yID0gcmVzdWx0OwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfdW5pdmVyc2UuYyBiL2NvbW1vbi9jbWRfdW5pdmVyc2UuYwppbmRleCBhODZhNTc0Li41ODM4NGYzIDEwMDY0NAotLS0gYS9jb21tb24vY21kX3VuaXZlcnNlLmMKKysrIGIvY29tbW9uL2NtZF91bml2ZXJzZS5jCkBAIC00Niw3ICs0Niw3IEBACiAKIGludCB1bml2ZXJzZV9pbml0KHZvaWQpCiB7Ci0JaW50IGosIHJlc3VsdCwgbGFzdEVycm9yID0gMDsKKwlpbnQgaiwgcmVzdWx0OwogCXBjaV9kZXZfdCBidXNkZXZmbjsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCkBAIC0xMjYsOCArMTI2LDYgQEAKICBicmVha18zMDoKIAlmcmVlKGRldik7CiAgYnJlYWtfMjA6Ci0JbGFzdEVycm9yID0gcmVzdWx0OwotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9jb21tb24uYyBiL2NvbW1vbi9lbnZfY29tbW9uLmMKaW5kZXggYzdlOWJlYS4uOGE3MTA5NiAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9jb21tb24uYworKysgYi9jb21tb24vZW52X2NvbW1vbi5jCkBAIC0zNCwxMyArMzQsNiBAQAogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotZXh0ZXJuIGVudl90ICplbnZfcHRyOwotCi1leHRlcm4gdm9pZCBlbnZfcmVsb2NhdGVfc3BlYyAodm9pZCk7Ci1leHRlcm4gdWNoYXIgZW52X2dldF9jaGFyX3NwZWMoaW50KTsKLQotc3RhdGljIHVjaGFyIGVudl9nZXRfY2hhcl9pbml0IChpbnQgaW5kZXgpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEZWZhdWx0IHNldHRpbmdzIHRvIGJlIHVzZWQgd2hlbiBubyB2YWxpZCBlbnZpcm9ubWVudCBpcyBmb3VuZAogICovCkBAIC05NCw3ICs4Nyw3IEBACiAJInNlcnZlcmlwPSIJTUtfU1RSKENPTkZJR19TRVJWRVJJUCkJCSJcMCIKICNlbmRpZgogI2lmZGVmCUNPTkZJR19TWVNfQVVUT0xPQUQKLQkiYXV0b2xvYWQ9IglDT05GSUdfU1lTX0FVVE9MT0FECQkJIlwwIgorCSJhdXRvbG9hZD0iCUNPTkZJR19TWVNfQVVUT0xPQUQJCSJcMCIKICNlbmRpZgogI2lmZGVmCUNPTkZJR19QUkVCT09UCiAJInByZWJvb3Q9IglDT05GSUdfUFJFQk9PVAkJCSJcMCIKQEAgLTExNywxMyArMTEwLDEzIEBACiAjaWZkZWYJQ09ORklHX0xPQURBRERSCiAJImxvYWRhZGRyPSIJTUtfU1RSKENPTkZJR19MT0FEQUREUikJCSJcMCIKICNlbmRpZgotI2lmZGVmICBDT05GSUdfQ0xPQ0tTX0lOX01IWgorI2lmZGVmCUNPTkZJR19DTE9DS1NfSU5fTUhaCiAJImNsb2Nrc19pbl9taHo9MVwwIgogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUENJX0JPT1RERUxBWSkgJiYgKENPTkZJR19QQ0lfQk9PVERFTEFZID4gMCkKIAkicGNpZGVsYXk9IglNS19TVFIoQ09ORklHX1BDSV9CT09UREVMQVkpCSJcMCIKICNlbmRpZgotI2lmZGVmICBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCisjaWZkZWYJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwogCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MKICNlbmRpZgogCSJcMCIKQEAgLTEzMSwzOCArMTI0LDMwIEBACiAKIHN0cnVjdCBoc2VhcmNoX2RhdGEgZW52X2h0YWI7CiAKLXN0YXRpYyB1Y2hhciBlbnZfZ2V0X2NoYXJfaW5pdCAoaW50IGluZGV4KQorc3RhdGljIHVjaGFyIGVudl9nZXRfY2hhcl9pbml0KGludCBpbmRleCkKIHsKLQl1Y2hhciBjOwotCiAJLyogaWYgY3JjIHdhcyBiYWQsIHVzZSB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCAqLwogCWlmIChnZC0+ZW52X3ZhbGlkKQotCQljID0gZW52X2dldF9jaGFyX3NwZWMoaW5kZXgpOworCQlyZXR1cm4gZW52X2dldF9jaGFyX3NwZWMoaW5kZXgpOwogCWVsc2UKLQkJYyA9IGRlZmF1bHRfZW52aXJvbm1lbnRbaW5kZXhdOwotCi0JcmV0dXJuIChjKTsKKwkJcmV0dXJuIGRlZmF1bHRfZW52aXJvbm1lbnRbaW5kZXhdOwogfQogCi11Y2hhciBlbnZfZ2V0X2NoYXJfbWVtb3J5IChpbnQgaW5kZXgpCit1Y2hhciBlbnZfZ2V0X2NoYXJfbWVtb3J5KGludCBpbmRleCkKIHsKIAlyZXR1cm4gKmVudl9nZXRfYWRkcihpbmRleCk7CiB9CiAKLXVjaGFyIGVudl9nZXRfY2hhciAoaW50IGluZGV4KQordWNoYXIgZW52X2dldF9jaGFyKGludCBpbmRleCkKIHsKLQl1Y2hhciBjOwotCiAJLyogaWYgcmVsb2NhdGVkIHRvIFJBTSAqLwogCWlmIChnZC0+ZmxhZ3MgJiBHRF9GTEdfUkVMT0MpCi0JCWMgPSBlbnZfZ2V0X2NoYXJfbWVtb3J5KGluZGV4KTsKKwkJcmV0dXJuIGVudl9nZXRfY2hhcl9tZW1vcnkoaW5kZXgpOwogCWVsc2UKLQkJYyA9IGVudl9nZXRfY2hhcl9pbml0KGluZGV4KTsKLQotCXJldHVybiAoYyk7CisJCXJldHVybiBlbnZfZ2V0X2NoYXJfaW5pdChpbmRleCk7CiB9CiAKLWNvbnN0IHVjaGFyICplbnZfZ2V0X2FkZHIgKGludCBpbmRleCkKK2NvbnN0IHVjaGFyICplbnZfZ2V0X2FkZHIoaW50IGluZGV4KQogewogCWlmIChnZC0+ZW52X3ZhbGlkKQogCQlyZXR1cm4gKHVjaGFyICopKGdkLT5lbnZfYWRkciArIGluZGV4KTsKQEAgLTE4MSw3ICsxNjYsNyBAQAogCQlpZiAoKnMgPT0gJyEnKSB7CiAJCQlwcmludGYoIioqKiBXYXJuaW5nIC0gJXMsICIKIAkJCQkidXNpbmcgZGVmYXVsdCBlbnZpcm9ubWVudFxuXG4iLAotCQkJCXMrMSk7CisJCQkJcyArIDEpOwogCQl9IGVsc2UgewogCQkJcHV0cyhzKTsKIAkJfQpAQCAtMTkwLDkgKzE3NSw5IEBACiAJfQogCiAJaWYgKGhpbXBvcnRfcigmZW52X2h0YWIsIChjaGFyICopZGVmYXVsdF9lbnZpcm9ubWVudCwKLQkJICAgIHNpemVvZihkZWZhdWx0X2Vudmlyb25tZW50KSwgJ1wwJywgMCkgPT0gMCkgeworCQkJc2l6ZW9mKGRlZmF1bHRfZW52aXJvbm1lbnQpLCAnXDAnLCAwKSA9PSAwKQogCQllcnJvcigiRW52aXJvbm1lbnQgaW1wb3J0IGZhaWxlZDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCX0KKwogCWdkLT5mbGFncyB8PSBHRF9GTEdfRU5WX1JFQURZOwogfQogCkBAIC0yMjcsMjIgKzIxMiwyMCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGVudl9yZWxvY2F0ZSAodm9pZCkKK3ZvaWQgZW52X3JlbG9jYXRlKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfTkVFRFNfTUFOVUFMX1JFTE9DKQotCWV4dGVybiB2b2lkIGVudl9yZWxvYyh2b2lkKTsKLQogCWVudl9yZWxvYygpOwogI2VuZGlmCiAJaWYgKGdkLT5lbnZfdmFsaWQgPT0gMCkgewogI2lmIGRlZmluZWQoQ09ORklHX0VOVl9JU19OT1dIRVJFKQkvKiBFbnZpcm9ubWVudCBub3QgY2hhbmdhYmxlICovCiAJCXNldF9kZWZhdWx0X2VudihOVUxMKTsKICNlbHNlCi0JCXNob3dfYm9vdF9wcm9ncmVzcyAoLTYwKTsKKwkJc2hvd19ib290X3Byb2dyZXNzKC02MCk7CiAJCXNldF9kZWZhdWx0X2VudigiIWJhZCBDUkMiKTsKICNlbmRpZgogCX0gZWxzZSB7Ci0JCWVudl9yZWxvY2F0ZV9zcGVjICgpOworCQllbnZfcmVsb2NhdGVfc3BlYygpOwogCX0KIH0KIApAQCAtMjcyLDYgKzI1NSw3IEBACiAKIAlpZiAoaWR4KQogCQljbWR2W2ZvdW5kKytdID0gIi4uLiI7CisKIAljbWR2W2ZvdW5kXSA9IE5VTEw7CiAJcmV0dXJuIGZvdW5kOwogfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9kYXRhZmxhc2guYyBiL2NvbW1vbi9lbnZfZGF0YWZsYXNoLmMKaW5kZXggMWQ1NzA3OS4uM2M1YWYzNyAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9kYXRhZmxhc2guYworKysgYi9jb21tb24vZW52X2RhdGFmbGFzaC5jCkBAIC0yNywyNSArMjcsMTcgQEAKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLWVudl90ICplbnZfcHRyID0gTlVMTDsKK2Vudl90ICplbnZfcHRyOwogCi1jaGFyICogZW52X25hbWVfc3BlYyA9ICJkYXRhZmxhc2giOwotCi1leHRlcm4gaW50IHJlYWRfZGF0YWZsYXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCWNoYXIgKnJlc3VsdCk7Ci1leHRlcm4gaW50IHdyaXRlX2RhdGFmbGFzaCh1bnNpZ25lZCBsb25nIGFkZHJfZGVzdCwKLQl1bnNpZ25lZCBsb25nIGFkZHJfc3JjLCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIGludCBBVDkxRl9EYXRhZmxhc2hJbml0KHZvaWQpOwotCi1leHRlcm4gdWNoYXIgZGVmYXVsdF9lbnZpcm9ubWVudFtdOworY2hhciAqZW52X25hbWVfc3BlYyA9ICJkYXRhZmxhc2giOwogCiB1Y2hhciBlbnZfZ2V0X2NoYXJfc3BlYyhpbnQgaW5kZXgpCiB7CiAJdWNoYXIgYzsKIAotCXJlYWRfZGF0YWZsYXNoKENPTkZJR19FTlZfQUREUiArIGluZGV4ICsgb2Zmc2V0b2YoZW52X3QsZGF0YSksCisJcmVhZF9kYXRhZmxhc2goQ09ORklHX0VOVl9BRERSICsgaW5kZXggKyBvZmZzZXRvZihlbnZfdCwgZGF0YSksCiAJCQkxLCAoY2hhciAqKSZjKTsKLQlyZXR1cm4gKGMpOworCXJldHVybiBjOwogfQogCiB2b2lkIGVudl9yZWxvY2F0ZV9zcGVjKHZvaWQpCkBAIC02OCwxMiArNjAsMTIgQEAKIAljaGFyCSpyZXM7CiAKIAlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlyZXR1cm4gMTsKIAl9Ci0JZW52X25ldy5jcmMgICA9IGNyYzMyKDAsIGVudl9uZXcuZGF0YSwgRU5WX1NJWkUpOworCWVudl9uZXcuY3JjID0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7CiAKIAlyZXR1cm4gd3JpdGVfZGF0YWZsYXNoKENPTkZJR19FTlZfQUREUiwKIAkJCQkodW5zaWduZWQgbG9uZykmZW52X25ldywKQEAgLTg4LDcgKzgwLDcgQEAKICAqLwogaW50IGVudl9pbml0KHZvaWQpCiB7Ci0JdWxvbmcgY3JjLCBsZW4sIG5ldzsKKwl1bG9uZyBjcmMsIGxlbiA9IEVOVl9TSVpFLCBuZXcgPSAwOwogCXVuc2lnbmVkIG9mZjsKIAl1Y2hhciBidWZbNjRdOwogCkBAIC0xMDEsMjUgKzkzLDIzIEBACiAJcmVhZF9kYXRhZmxhc2goQ09ORklHX0VOVl9BRERSICsgb2Zmc2V0b2YoZW52X3QsIGNyYyksCiAJCXNpemVvZih1bG9uZyksIChjaGFyICopJmNyYyk7CiAKLQluZXcgPSAwOwotCWxlbiA9IEVOVl9TSVpFOwotCW9mZiA9IG9mZnNldG9mKGVudl90LGRhdGEpOworCW9mZiA9IG9mZnNldG9mKGVudl90LCBkYXRhKTsKIAl3aGlsZSAobGVuID4gMCkgewogCQlpbnQgbiA9IChsZW4gPiBzaXplb2YoYnVmKSkgPyBzaXplb2YoYnVmKSA6IGxlbjsKIAogCQlyZWFkX2RhdGFmbGFzaChDT05GSUdfRU5WX0FERFIgKyBvZmYsIG4sIChjaGFyICopYnVmKTsKIAotCQluZXcgPSBjcmMzMiAobmV3LCBidWYsIG4pOworCQluZXcgPSBjcmMzMihuZXcsIGJ1Ziwgbik7CiAJCWxlbiAtPSBuOwogCQlvZmYgKz0gbjsKIAl9CiAKIAlpZiAoY3JjID09IG5ldykgewotCQlnZC0+ZW52X2FkZHIgID0gb2Zmc2V0b2YoZW52X3QsZGF0YSk7Ci0JCWdkLT5lbnZfdmFsaWQgPSAxOworCQlnZC0+ZW52X2FkZHIJPSBvZmZzZXRvZihlbnZfdCwgZGF0YSk7CisJCWdkLT5lbnZfdmFsaWQJPSAxOwogCX0gZWxzZSB7Ci0JCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07Ci0JCWdkLT5lbnZfdmFsaWQgPSAwOworCQlnZC0+ZW52X2FkZHIJPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07CisJCWdkLT5lbnZfdmFsaWQJPSAwOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9lZXByb20uYyBiL2NvbW1vbi9lbnZfZWVwcm9tLmMKaW5kZXggMGExNzlhZC4uYjY2YmJhMiAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9lZXByb20uYworKysgYi9jb21tb24vZW52X2VlcHJvbS5jCkBAIC0zNywxMyArMzcsMTMgQEAKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLWVudl90ICplbnZfcHRyID0gTlVMTDsKK2Vudl90ICplbnZfcHRyOwogCiBjaGFyICplbnZfbmFtZV9zcGVjID0gIkVFUFJPTSI7CiBpbnQgZW52X2VlcHJvbV9idXMgPSAtMTsKIAogc3RhdGljIGludCBlZXByb21fYnVzX3JlYWQodW5zaWduZWQgZGV2X2FkZHIsIHVuc2lnbmVkIG9mZnNldCwKLQl1Y2hhciAqYnVmZmVyLCB1bnNpZ25lZCBjbnQpCisJCQkgICB1Y2hhciAqYnVmZmVyLCB1bnNpZ25lZCBjbnQpCiB7CiAJaW50IHJjb2RlOwogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19FTlZfRUVQUk9NX0JVUykKQEAgLTU3LDcgKzU3LDcgQEAKIAkJCWlmIChkZXYgIT0gTlVMTCkKIAkJCQllbnZfZWVwcm9tX2J1cyA9IGRldi0+YnVzaWQ7CiAJCQllbHNlCi0JCQkJcHJpbnRmICgiZXJyb3IgYWRkaW5nIGVudiBlZXByb20gYnVzLlxuIik7CisJCQkJcHJpbnRmKCJlcnJvciBhZGRpbmcgZW52IGVlcHJvbSBidXMuXG4iKTsKIAkJfQogCQlpZiAob2xkX2J1cyAhPSBlbnZfZWVwcm9tX2J1cykgewogCQkJaTJjX3NldF9idXNfbnVtKGVudl9lZXByb21fYnVzKTsKQEAgLTY5LDcgKzY5LDcgQEAKIAl9CiAjZW5kaWYKIAotCXJjb2RlID0gZWVwcm9tX3JlYWQgKGRldl9hZGRyLCBvZmZzZXQsIGJ1ZmZlciwgY250KTsKKwlyY29kZSA9IGVlcHJvbV9yZWFkKGRldl9hZGRyLCBvZmZzZXQsIGJ1ZmZlciwgY250KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19FTlZfRUVQUk9NX0JVUykKIAlpZiAob2xkX2J1cyAhPSBlbnZfZWVwcm9tX2J1cykKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIAogc3RhdGljIGludCBlZXByb21fYnVzX3dyaXRlKHVuc2lnbmVkIGRldl9hZGRyLCB1bnNpZ25lZCBvZmZzZXQsCi0JdWNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgY250KQorCQkJICAgIHVjaGFyICpidWZmZXIsIHVuc2lnbmVkIGNudCkKIHsKIAlpbnQgcmNvZGU7CiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0VOVl9FRVBST01fQlVTKQpAQCAtOTQsMjQgKzk0LDIyIEBACiAJcmV0dXJuIHJjb2RlOwogfQogCi11Y2hhciBlbnZfZ2V0X2NoYXJfc3BlYyAoaW50IGluZGV4KQordWNoYXIgZW52X2dldF9jaGFyX3NwZWMoaW50IGluZGV4KQogewogCXVjaGFyIGM7Ci0JdW5zaWduZWQgaW50IG9mZjsKLQlvZmYgPSBDT05GSUdfRU5WX09GRlNFVDsKKwl1bnNpZ25lZCBpbnQgb2ZmID0gQ09ORklHX0VOVl9PRkZTRVQ7CiAKICNpZmRlZiBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQKIAlpZiAoZ2QtPmVudl92YWxpZCA9PSAyKQogCQlvZmYgPSBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQ7CiAjZW5kaWYKIAllZXByb21fYnVzX3JlYWQoQ09ORklHX1NZU19ERUZfRUVQUk9NX0FERFIsCi0JCSAgICAgb2ZmICsgaW5kZXggKyBvZmZzZXRvZihlbnZfdCxkYXRhKSwKLQkJICAgICAmYywgMSk7CisJCQlvZmYgKyBpbmRleCArIG9mZnNldG9mKGVudl90LCBkYXRhKSwgJmMsIDEpOwogCi0JcmV0dXJuIChjKTsKKwlyZXR1cm4gYzsKIH0KIAotdm9pZCBlbnZfcmVsb2NhdGVfc3BlYyAodm9pZCkKK3ZvaWQgZW52X3JlbG9jYXRlX3NwZWModm9pZCkKIHsKIAljaGFyIGJ1ZltDT05GSUdfRU5WX1NJWkVdOwogCXVuc2lnbmVkIGludCBvZmYgPSBDT05GSUdfRU5WX09GRlNFVDsKQEAgLTEyMSw5ICsxMTksNyBAQAogCQlvZmYgPSBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQ7CiAjZW5kaWYKIAllZXByb21fYnVzX3JlYWQoQ09ORklHX1NZU19ERUZfRUVQUk9NX0FERFIsCi0JCSAgICAgb2ZmLAotCQkgICAgICh1Y2hhciAqKWJ1ZiwKLQkJICAgICBDT05GSUdfRU5WX1NJWkUpOworCQkJb2ZmLCAodWNoYXIgKilidWYsIENPTkZJR19FTlZfU0laRSk7CiAKIAllbnZfaW1wb3J0KGJ1ZiwgMSk7CiB9CkBAIC0xMzMsMTcgKzEyOSwxNyBAQAogCWVudl90CWVudl9uZXc7CiAJc3NpemVfdAlsZW47CiAJY2hhcgkqcmVzOwotCWludCByYzsKLQl1bnNpZ25lZCBpbnQgb2ZmID0gQ09ORklHX0VOVl9PRkZTRVQ7CisJaW50CXJjOworCXVuc2lnbmVkIGludCBvZmYJPSBDT05GSUdfRU5WX09GRlNFVDsKICNpZmRlZiBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQKLQl1bnNpZ25lZCBpbnQgb2ZmX3JlZCA9IENPTkZJR19FTlZfT0ZGU0VUX1JFRFVORDsKLQljaGFyIGZsYWdfb2Jzb2xldGUgPSBPQlNPTEVURV9GTEFHOworCXVuc2lnbmVkIGludCBvZmZfcmVkCT0gQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EOworCWNoYXIgZmxhZ19vYnNvbGV0ZQk9IE9CU09MRVRFX0ZMQUc7CiAjZW5kaWYKIAogCUJVR19PTihlbnZfcHRyICE9IE5VTEwpOwogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0dXJuIDE7CkBAIC0xNTIsMzIgKzE0OCwyOCBAQAogCiAjaWZkZWYgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECiAJaWYgKGdkLT5lbnZfdmFsaWQgPT0gMSkgewotCQlvZmYgPSBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQ7Ci0JCW9mZl9yZWQgPSBDT05GSUdfRU5WX09GRlNFVDsKKwkJb2ZmCT0gQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EOworCQlvZmZfcmVkCT0gQ09ORklHX0VOVl9PRkZTRVQ7CiAJfQogCiAJZW52X25ldy5mbGFncyA9IEFDVElWRV9GTEFHOwogI2VuZGlmCiAKIAlyYyA9IGVlcHJvbV9idXNfd3JpdGUoQ09ORklHX1NZU19ERUZfRUVQUk9NX0FERFIsCi0JCQkgICAgIG9mZiwKLQkJCSAgICAgKHVjaGFyICopJmVudl9uZXcsCi0JCQkgICAgIENPTkZJR19FTlZfU0laRSk7CisJCQkgICAgICBvZmYsICh1Y2hhciAqKSZlbnZfbmV3LCBDT05GSUdfRU5WX1NJWkUpOwogCiAjaWZkZWYgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECiAJaWYgKHJjID09IDApIHsKIAkJZWVwcm9tX2J1c193cml0ZShDT05GSUdfU1lTX0RFRl9FRVBST01fQUREUiwKLQkJCQkgIG9mZl9yZWQgKyBvZmZzZXRvZihlbnZfdCxmbGFncyksCi0JCQkJICAodWNoYXIgKikmZmxhZ19vYnNvbGV0ZSwKLQkJCQkgIDEpOworCQkJCSBvZmZfcmVkICsgb2Zmc2V0b2YoZW52X3QsIGZsYWdzKSwKKwkJCQkgKHVjaGFyICopJmZsYWdfb2Jzb2xldGUsIDEpOworCiAJCWlmIChnZC0+ZW52X3ZhbGlkID09IDEpCiAJCQlnZC0+ZW52X3ZhbGlkID0gMjsKIAkJZWxzZQogCQkJZ2QtPmVudl92YWxpZCA9IDE7Ci0KIAl9CiAjZW5kaWYKLQogCXJldHVybiByYzsKIH0KIApAQCAtMTg3LDE3ICsxNzksMTMgQEAKICAqIFdlIGFyZSBzdGlsbCBydW5uaW5nIGZyb20gUk9NLCBzbyBkYXRhIHVzZSBpcyBsaW1pdGVkLgogICogVXNlIGEgKG1vZGVyYXRlbHkgc21hbGwpIGJ1ZmZlciBvbiB0aGUgc3RhY2sKICAqLwotCiAjaWZkZWYgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECiBpbnQgZW52X2luaXQodm9pZCkKIHsKLQl1bG9uZyBsZW47Ci0JdWxvbmcgY3JjWzJdLCBjcmNfdG1wOworCXVsb25nIGxlbiwgY3JjWzJdLCBjcmNfdG1wOwogCXVuc2lnbmVkIGludCBvZmYsIG9mZl9lbnZbMl07Ci0JdWNoYXIgYnVmWzY0XTsKLQlpbnQgY3JjX29rWzJdID0gezAsMH07Ci0JdW5zaWduZWQgY2hhciBmbGFnc1syXTsKLQlpbnQgaTsKKwl1Y2hhciBidWZbNjRdLCBmbGFnc1syXTsKKwlpbnQgaSwgY3JjX29rWzJdID0gezAsIDB9OwogCiAJZWVwcm9tX2luaXQoKTsJLyogcHJlcGFyZSBmb3IgRUVQUk9NIHJlYWQvd3JpdGUgKi8KIApAQCAtMjA3LDM5ICsxOTUsMzkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCS8qIHJlYWQgQ1JDICovCiAJCWVlcHJvbV9idXNfcmVhZChDT05GSUdfU1lTX0RFRl9FRVBST01fQUREUiwKLQkJCW9mZl9lbnZbaV0gKyBvZmZzZXRvZihlbnZfdCxjcmMpLAotCQkJKHVjaGFyICopJmNyY1tpXSwgc2l6ZW9mKHVsb25nKSk7CisJCQkJb2ZmX2VudltpXSArIG9mZnNldG9mKGVudl90LCBjcmMpLAorCQkJCSh1Y2hhciAqKSZjcmNbaV0sIHNpemVvZih1bG9uZykpOwogCQkvKiByZWFkIEZMQUdTICovCiAJCWVlcHJvbV9idXNfcmVhZChDT05GSUdfU1lTX0RFRl9FRVBST01fQUREUiwKLQkJCW9mZl9lbnZbaV0gKyBvZmZzZXRvZihlbnZfdCxmbGFncyksCi0JCQkodWNoYXIgKikmZmxhZ3NbaV0sIHNpemVvZih1Y2hhcikpOworCQkJCW9mZl9lbnZbaV0gKyBvZmZzZXRvZihlbnZfdCwgZmxhZ3MpLAorCQkJCSh1Y2hhciAqKSZmbGFnc1tpXSwgc2l6ZW9mKHVjaGFyKSk7CiAKIAkJY3JjX3RtcCA9IDA7CiAJCWxlbiA9IEVOVl9TSVpFOwotCQlvZmYgPSBvZmZfZW52W2ldICsgb2Zmc2V0b2YoZW52X3QsZGF0YSk7CisJCW9mZiA9IG9mZl9lbnZbaV0gKyBvZmZzZXRvZihlbnZfdCwgZGF0YSk7CiAJCXdoaWxlIChsZW4gPiAwKSB7CiAJCQlpbnQgbiA9IChsZW4gPiBzaXplb2YoYnVmKSkgPyBzaXplb2YoYnVmKSA6IGxlbjsKIAogCQkJZWVwcm9tX2J1c19yZWFkKENPTkZJR19TWVNfREVGX0VFUFJPTV9BRERSLCBvZmYsCi0JCQkJYnVmLCBuKTsKKwkJCQkJYnVmLCBuKTsKIAogCQkJY3JjX3RtcCA9IGNyYzMyKGNyY190bXAsIGJ1Ziwgbik7CiAJCQlsZW4gLT0gbjsKIAkJCW9mZiArPSBuOwogCQl9CisKIAkJaWYgKGNyY190bXAgPT0gY3JjW2ldKQogCQkJY3JjX29rW2ldID0gMTsKIAl9CiAKIAlpZiAoIWNyY19va1swXSAmJiAhY3JjX29rWzFdKSB7Ci0JCWdkLT5lbnZfYWRkciAgPSAwOwotCQlnZC0+ZW52X3ZhbGlkID0gMDsKKwkJZ2QtPmVudl9hZGRyCT0gMDsKKwkJZ2QtPmVudl92YWxpZAk9IDA7CiAKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChjcmNfb2tbMF0gJiYgIWNyY19va1sxXSkgewogCQlnZC0+ZW52X3ZhbGlkID0gMTsKLQl9Ci0JZWxzZSBpZiAoIWNyY19va1swXSAmJiBjcmNfb2tbMV0pIHsKKwl9IGVsc2UgaWYgKCFjcmNfb2tbMF0gJiYgY3JjX29rWzFdKSB7CiAJCWdkLT5lbnZfdmFsaWQgPSAyOwogCX0gZWxzZSB7CiAJCS8qIGJvdGggb2sgLSBjaGVjayBzZXJpYWwgKi8KQEAgLTI0OSwxOCArMjM3LDE4IEBACiAJCQlnZC0+ZW52X3ZhbGlkID0gMjsKIAkJZWxzZSBpZiAoZmxhZ3NbMF0gPT0gMHhGRiAmJiBmbGFnc1sxXSA9PSAwKQogCQkJZ2QtPmVudl92YWxpZCA9IDI7Ci0JCWVsc2UgaWYoZmxhZ3NbMV0gPT0gMHhGRiAmJiBmbGFnc1swXSA9PSAwKQorCQllbHNlIGlmIChmbGFnc1sxXSA9PSAweEZGICYmIGZsYWdzWzBdID09IDApCiAJCQlnZC0+ZW52X3ZhbGlkID0gMTsKIAkJZWxzZSAvKiBmbGFncyBhcmUgZXF1YWwgLSBhbG1vc3QgaW1wb3NzaWJsZSAqLwogCQkJZ2QtPmVudl92YWxpZCA9IDE7CiAJfQogCiAJaWYgKGdkLT5lbnZfdmFsaWQgPT0gMikKLQkJZ2QtPmVudl9hZGRyID0gb2ZmX2VudlsxXSArIG9mZnNldG9mKGVudl90LGRhdGEpOworCQlnZC0+ZW52X2FkZHIgPSBvZmZfZW52WzFdICsgb2Zmc2V0b2YoZW52X3QsIGRhdGEpOwogCWVsc2UgaWYgKGdkLT5lbnZfdmFsaWQgPT0gMSkKLQkJZ2QtPmVudl9hZGRyID0gb2ZmX2VudlswXSArIG9mZnNldG9mKGVudl90LGRhdGEpOworCQlnZC0+ZW52X2FkZHIgPSBvZmZfZW52WzBdICsgb2Zmc2V0b2YoZW52X3QsIGRhdGEpOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiBpbnQgZW52X2luaXQodm9pZCkKQEAgLTI3MywxMiArMjYxLDEyIEBACiAKIAkvKiByZWFkIG9sZCBDUkMgKi8KIAllZXByb21fYnVzX3JlYWQoQ09ORklHX1NZU19ERUZfRUVQUk9NX0FERFIsCi0JCSAgICAgQ09ORklHX0VOVl9PRkZTRVQrb2Zmc2V0b2YoZW52X3QsY3JjKSwKLQkJICAgICAodWNoYXIgKikmY3JjLCBzaXplb2YodWxvbmcpKTsKKwkJCUNPTkZJR19FTlZfT0ZGU0VUICsgb2Zmc2V0b2YoZW52X3QsIGNyYyksCisJCQkodWNoYXIgKikmY3JjLCBzaXplb2YodWxvbmcpKTsKIAogCW5ldyA9IDA7CiAJbGVuID0gRU5WX1NJWkU7Ci0Jb2ZmID0gb2Zmc2V0b2YoZW52X3QsZGF0YSk7CisJb2ZmID0gb2Zmc2V0b2YoZW52X3QsIGRhdGEpOwogCiAJd2hpbGUgKGxlbiA+IDApIHsKIAkJaW50IG4gPSAobGVuID4gc2l6ZW9mKGJ1ZikpID8gc2l6ZW9mKGJ1ZikgOiBsZW47CkBAIC0yOTEsMTMgKzI3OSwxMyBAQAogCX0KIAogCWlmIChjcmMgPT0gbmV3KSB7Ci0JCWdkLT5lbnZfYWRkciAgPSBvZmZzZXRvZihlbnZfdCxkYXRhKTsKLQkJZ2QtPmVudl92YWxpZCA9IDE7CisJCWdkLT5lbnZfYWRkcgk9IG9mZnNldG9mKGVudl90LCBkYXRhKTsKKwkJZ2QtPmVudl92YWxpZAk9IDE7CiAJfSBlbHNlIHsKLQkJZ2QtPmVudl9hZGRyICA9IDA7Ci0JCWdkLT5lbnZfdmFsaWQgPSAwOworCQlnZC0+ZW52X2FkZHIJPSAwOworCQlnZC0+ZW52X3ZhbGlkCT0gMDsKIAl9CiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9jb21tb24vZW52X2VtYmVkZGVkLmMgYi9jb21tb24vZW52X2VtYmVkZGVkLmMKaW5kZXggNmNlMTMwNy4uODBmYjI5ZCAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9lbWJlZGRlZC5jCisrKyBiL2NvbW1vbi9lbnZfZW1iZWRkZWQuYwpAQCAtMjIsMTcgKzIyLDE0IEBACiAgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNkZWZpbmUJX19BU1NFTUJMWV9fCQkJLyogRGlydHkgdHJpY2sgdG8gZ2V0IG9ubHkgI2RlZmluZXMJKi8KKyNkZWZpbmUJX19BU1NFTUJMWV9fCQkJLyogRGlydHkgdHJpY2sgdG8gZ2V0IG9ubHkgI2RlZmluZXMgKi8KICNlbmRpZgotI2RlZmluZQlfX0FTTV9TVFVCX1BST0NFU1NPUl9IX18JLyogZG9uJ3QgaW5jbHVkZSBhc20vcHJvY2Vzc29yLgkJKi8KKyNkZWZpbmUJX19BU01fU1RVQl9QUk9DRVNTT1JfSF9fCS8qIGRvbid0IGluY2x1ZGUgYXNtL3Byb2Nlc3Nvci4gKi8KICNpbmNsdWRlIDxjb25maWcuaD4KICN1bmRlZglfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxlbnZpcm9ubWVudC5oPgogCi0vKgotICogSGFuZGxlIEhPU1RTIHRoYXQgaGF2ZSBwcmVwZW5kZWQKLSAqIGNyYXAgb24gc3ltYm9sIG5hbWVzLCBub3QgVEFSR0VUUy4KLSAqLworLyogSGFuZGxlIEhPU1RTIHRoYXQgaGF2ZSBwcmVwZW5kZWQgY3JhcCBvbiBzeW1ib2wgbmFtZXMsIG5vdCBUQVJHRVRTLiAqLwogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogLyogTGVhZGluZyB1bmRlcnNjb3JlIG9uIHN5bWJvbHMgKi8KICMgIGRlZmluZSBTWU1fQ0hBUiAiXyIKQEAgLTUyLDM0ICs0OSwzNiBAQAogICogVS1Cb290IGl0c2VsZi4KICAqLwogI2lmIChkZWZpbmVkKENPTkZJR19TWVNfVVNFX1BQQ0VOVikgfHwgZGVmaW5lZChDT05GSUdfTkFORF9VX0JPT1QpKSAmJiBcCi0gICAgIGRlZmluZWQoRU5WX0NSQykgLyogRW52aXJvbm1lbnQgZW1iZWRkZWQgaW4gVS1Cb290IC5wcGNlbnYgc2VjdGlvbiAqLworCWRlZmluZWQoRU5WX0NSQykgLyogRW52aXJvbm1lbnQgZW1iZWRkZWQgaW4gVS1Cb290IC5wcGNlbnYgc2VjdGlvbiAqLwogLyogWFhYIC0gVGhpcyBvbmx5IHdvcmtzIHdpdGggR05VIEMgKi8KLSMgIGRlZmluZSBfX1BQQ0VOVl9fIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIucHBjZW52IikpKQotIyAgZGVmaW5lIF9fUFBDVEVYVF9fIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIudGV4dCIpKSkKKyMgIGRlZmluZSBfX1BQQ0VOVl9fCV9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIucHBjZW52IikpKQorIyAgZGVmaW5lIF9fUFBDVEVYVF9fCV9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIudGV4dCIpKSkKIAogI2VsaWYgZGVmaW5lZChVU0VfSE9TVENDKSAvKiBOYXRpdmUgZm9yICd0b29scy9lbnZjcmMnICovCi0jICBkZWZpbmUgX19QUENFTlZfXyAvKlhYWCBET19OT1RfREVMX1RISVNfQ09NTUVOVCovCi0jICBkZWZpbmUgX19QUENURVhUX18gLypYWFggRE9fTk9UX0RFTF9USElTX0NPTU1FTlQqLworIyAgZGVmaW5lIF9fUFBDRU5WX18JLypYWFggRE9fTk9UX0RFTF9USElTX0NPTU1FTlQqLworIyAgZGVmaW5lIF9fUFBDVEVYVF9fCS8qWFhYIERPX05PVF9ERUxfVEhJU19DT01NRU5UKi8KIAogI2Vsc2UgLyogRW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgaW4gVS1Cb290J3MgLnRleHQgc2VjdGlvbiAqLwogLyogWFhYIC0gVGhpcyBvbmx5IHdvcmtzIHdpdGggR05VIEMgKi8KLSMgIGRlZmluZSBfX1BQQ0VOVl9fIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIudGV4dCIpKSkKLSMgIGRlZmluZSBfX1BQQ1RFWFRfXyBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLnRleHQiKSkpCisjICBkZWZpbmUgX19QUENFTlZfXwlfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLnRleHQiKSkpCisjICBkZWZpbmUgX19QUENURVhUX18JX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi50ZXh0IikpKQogI2VuZGlmCiAKIC8qCiAgKiBNYWNyb3MgdG8gZ2VuZXJhdGUgZ2xvYmFsIGFic29sdXRlcy4KICAqLwogI2lmIGRlZmluZWQoX19iZmluX18pCi0jIGRlZmluZSBHRU5fU0VUX1ZBTFVFKG5hbWUsIHZhbHVlKSBhc20gKCIuc2V0ICIgR0VOX1NZTU5BTUUobmFtZSkgIiwgIiBHRU5fVkFMVUUodmFsdWUpKQorIyBkZWZpbmUgR0VOX1NFVF9WQUxVRShuYW1lLCB2YWx1ZSkJXAorCWFzbSgiLnNldCAiIEdFTl9TWU1OQU1FKG5hbWUpICIsICIgR0VOX1ZBTFVFKHZhbHVlKSkKICNlbHNlCi0jIGRlZmluZSBHRU5fU0VUX1ZBTFVFKG5hbWUsIHZhbHVlKSBhc20gKEdFTl9TWU1OQU1FKG5hbWUpICIgPSAiIEdFTl9WQUxVRSh2YWx1ZSkpCisjIGRlZmluZSBHRU5fU0VUX1ZBTFVFKG5hbWUsIHZhbHVlKQlcCisJYXNtKEdFTl9TWU1OQU1FKG5hbWUpICIgPSAiIEdFTl9WQUxVRSh2YWx1ZSkpCiAjZW5kaWYKLSNkZWZpbmUgR0VOX1NZTU5BTUUoc3RyKSBTWU1fQ0hBUiAjc3RyCi0jZGVmaW5lIEdFTl9WQUxVRShzdHIpICNzdHIKLSNkZWZpbmUgR0VOX0FCUyhuYW1lLCB2YWx1ZSkgXAotCQlhc20gKCIuZ2xvYmwgIiBHRU5fU1lNTkFNRShuYW1lKSk7IFwKLQkJR0VOX1NFVF9WQUxVRShuYW1lLCB2YWx1ZSkKKyNkZWZpbmUgR0VOX1NZTU5BTUUoc3RyKQlTWU1fQ0hBUiAjc3RyCisjZGVmaW5lIEdFTl9WQUxVRShzdHIpCQkjc3RyCisjZGVmaW5lIEdFTl9BQlMobmFtZSwgdmFsdWUpCQkJXAorCWFzbSgiLmdsb2JsICIgR0VOX1NZTU5BTUUobmFtZSkpOwlcCisJR0VOX1NFVF9WQUxVRShuYW1lLCB2YWx1ZSkKIAogLyoKICAqIE1hY3JvcyB0byB0cmFuc2Zvcm0gdmFsdWVzCkBAIC05Myw3ICs5Miw3IEBACiAgKiBjb21wdXRlZCBDUkMuICBPdGhlcndpc2UgZGVmaW5lIGl0IGFzIH4wLgogICovCiAjaWYgIWRlZmluZWQoRU5WX0NSQykKLSMgIGRlZmluZSBFTlZfQ1JDCX4wCisjICBkZWZpbmUgRU5WX0NSQwkofjApCiAjZW5kaWYKIAogZW52X3QgZW52aXJvbm1lbnQgX19QUENFTlZfXyA9IHsKQEAgLTE1MSw3ICsxNTAsNyBAQAogCSJzZXJ2ZXJpcD0iCU1LX1NUUihDT05GSUdfU0VSVkVSSVApCQkiXDAiCiAjZW5kaWYKICNpZmRlZglDT05GSUdfU1lTX0FVVE9MT0FECi0JImF1dG9sb2FkPSIJQ09ORklHX1NZU19BVVRPTE9BRAkJCSJcMCIKKwkiYXV0b2xvYWQ9IglDT05GSUdfU1lTX0FVVE9MT0FECQkiXDAiCiAjZW5kaWYKICNpZmRlZglDT05GSUdfUk9PVFBBVEgKIAkicm9vdHBhdGg9IglDT05GSUdfUk9PVFBBVEgJCQkiXDAiCkBAIC0xODAsNyArMTc5LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0lfQk9PVERFTEFZKSAmJiAoQ09ORklHX1BDSV9CT09UREVMQVkgPiAwKQogCSJwY2lkZWxheT0iCU1LX1NUUihDT05GSUdfUENJX0JPT1RERUxBWSkJIlwwIgogI2VuZGlmCi0jaWZkZWYgIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MKKyNpZmRlZglDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCiAJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwogI2VuZGlmCiAJIlwwIgkJLyogVGVybS4gZW52X3QuZGF0YSB3aXRoIDIgTlVMcyAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9mbGFzaC5jIGIvY29tbW9uL2Vudl9mbGFzaC5jCmluZGV4IDUwY2E0ZmZhLi5hOTlmODUwIDEwMDY0NAotLS0gYS9jb21tb24vZW52X2ZsYXNoLmMKKysrIGIvY29tbW9uL2Vudl9mbGFzaC5jCkBAIC0zOSwxOSArMzksMTggQEAKICNpZiBkZWZpbmVkKENPTkZJR19DTURfU0FWRUVOVikgJiYgZGVmaW5lZChDT05GSUdfQ01EX0ZMQVNIKQogI2RlZmluZSBDTURfU0FWRUVOVgogI2VsaWYgZGVmaW5lZChDT05GSUdfRU5WX0FERFJfUkVEVU5EKQotI2Vycm9yIENhbm5vdCB1c2UgQ09ORklHX0VOVl9BRERSX1JFRFVORCB3aXRob3V0IENPTkZJR19DTURfU0FWRUVOViAmIENPTkZJR19DTURfRkxBU0gKKyNlcnJvciBDT05GSUdfRU5WX0FERFJfUkVEVU5EIG11c3QgaGF2ZSBDT05GSUdfQ01EX1NBVkVFTlYgJiBDT05GSUdfQ01EX0ZMQVNICiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0VOVl9TSVpFX1JFRFVORCkgJiYgKENPTkZJR19FTlZfU0laRV9SRURVTkQgPCBDT05GSUdfRU5WX1NJWkUpCisjaWYgZGVmaW5lZChDT05GSUdfRU5WX1NJWkVfUkVEVU5EKSAmJglcCisJKENPTkZJR19FTlZfU0laRV9SRURVTkQgPCBDT05GSUdfRU5WX1NJWkUpCiAjZXJyb3IgQ09ORklHX0VOVl9TSVpFX1JFRFVORCBzaG91bGQgbm90IGJlIGxlc3MgdGhlbiBDT05GSUdfRU5WX1NJWkUKICNlbmRpZgogCi1jaGFyICogZW52X25hbWVfc3BlYyA9ICJGbGFzaCI7CitjaGFyICplbnZfbmFtZV9zcGVjID0gIkZsYXNoIjsKIAogI2lmZGVmIEVOVl9JU19FTUJFRERFRAotCi1leHRlcm4gdWNoYXIgZW52aXJvbm1lbnRbXTsKLWVudl90ICplbnZfcHRyID0gKGVudl90ICopKCZlbnZpcm9ubWVudFswXSk7CitlbnZfdCAqZW52X3B0ciA9ICZlbnZpcm9ubWVudDsKIAogc3RhdGljIGVudl90ICpmbGFzaF9hZGRyID0gKGVudl90ICopQ09ORklHX0VOVl9BRERSOwogCkBAIC01OSw3ICs1OCw2IEBACiAKIGVudl90ICplbnZfcHRyID0gKGVudl90ICopQ09ORklHX0VOVl9BRERSOwogc3RhdGljIGVudl90ICpmbGFzaF9hZGRyID0gKGVudl90ICopQ09ORklHX0VOVl9BRERSOwotCiAjZW5kaWYgLyogRU5WX0lTX0VNQkVEREVEICovCiAKICNpZiBkZWZpbmVkKENNRF9TQVZFRU5WKSB8fCBkZWZpbmVkKENPTkZJR19FTlZfQUREUl9SRURVTkQpCkBAIC03NCwxNyArNzIsMTQgQEAKIHN0YXRpYyB1bG9uZyBlbmRfYWRkcl9uZXcgPSBDT05GSUdfRU5WX0FERFJfUkVEVU5EICsgQ09ORklHX0VOVl9TRUNUX1NJWkUgLSAxOwogI2VuZGlmIC8qIENPTkZJR19FTlZfQUREUl9SRURVTkQgKi8KIAotZXh0ZXJuIGNvbnN0IHVjaGFyIGRlZmF1bHRfZW52aXJvbm1lbnRbXTsKLQogCiB1Y2hhciBlbnZfZ2V0X2NoYXJfc3BlYyhpbnQgaW5kZXgpCiB7Ci0JcmV0dXJuICgqKCh1Y2hhciAqKShnZC0+ZW52X2FkZHIgKyBpbmRleCkpKTsKKwlyZXR1cm4gKigodWNoYXIgKikoZ2QtPmVudl9hZGRyICsgaW5kZXgpKTsKIH0KIAogI2lmZGVmIENPTkZJR19FTlZfQUREUl9SRURVTkQKLQotaW50ICBlbnZfaW5pdCh2b2lkKQoraW50IGVudl9pbml0KHZvaWQpCiB7CiAJaW50IGNyYzFfb2sgPSAwLCBjcmMyX29rID0gMDsKIApAQCAtOTUsMzMgKzkwLDM0IEBACiAJdWxvbmcgYWRkcjEgPSAodWxvbmcpJihmbGFzaF9hZGRyLT5kYXRhKTsKIAl1bG9uZyBhZGRyMiA9ICh1bG9uZykmKGZsYXNoX2FkZHJfbmV3LT5kYXRhKTsKIAotCWNyYzFfb2sgPSAoY3JjMzIoMCwgZmxhc2hfYWRkci0+ZGF0YSwgRU5WX1NJWkUpID09IGZsYXNoX2FkZHItPmNyYyk7Ci0JY3JjMl9vayA9IChjcmMzMigwLCBmbGFzaF9hZGRyX25ldy0+ZGF0YSwgRU5WX1NJWkUpID09IGZsYXNoX2FkZHJfbmV3LT5jcmMpOworCWNyYzFfb2sgPSBjcmMzMigwLCBmbGFzaF9hZGRyLT5kYXRhLCBFTlZfU0laRSkgPT0gZmxhc2hfYWRkci0+Y3JjOworCWNyYzJfb2sgPQorCQljcmMzMigwLCBmbGFzaF9hZGRyX25ldy0+ZGF0YSwgRU5WX1NJWkUpID09IGZsYXNoX2FkZHJfbmV3LT5jcmM7CiAKLQlpZiAoY3JjMV9vayAmJiAhIGNyYzJfb2spIHsKLQkJZ2QtPmVudl9hZGRyICA9IGFkZHIxOwotCQlnZC0+ZW52X3ZhbGlkID0gMTsKLQl9IGVsc2UgaWYgKCEgY3JjMV9vayAmJiBjcmMyX29rKSB7Ci0JCWdkLT5lbnZfYWRkciAgPSBhZGRyMjsKLQkJZ2QtPmVudl92YWxpZCA9IDE7Ci0JfSBlbHNlIGlmICghIGNyYzFfb2sgJiYgISBjcmMyX29rKSB7Ci0JCWdkLT5lbnZfYWRkciAgPSBhZGRyX2RlZmF1bHQ7Ci0JCWdkLT5lbnZfdmFsaWQgPSAwOworCWlmIChjcmMxX29rICYmICFjcmMyX29rKSB7CisJCWdkLT5lbnZfYWRkcgk9IGFkZHIxOworCQlnZC0+ZW52X3ZhbGlkCT0gMTsKKwl9IGVsc2UgaWYgKCFjcmMxX29rICYmIGNyYzJfb2spIHsKKwkJZ2QtPmVudl9hZGRyCT0gYWRkcjI7CisJCWdkLT5lbnZfdmFsaWQJPSAxOworCX0gZWxzZSBpZiAoIWNyYzFfb2sgJiYgIWNyYzJfb2spIHsKKwkJZ2QtPmVudl9hZGRyCT0gYWRkcl9kZWZhdWx0OworCQlnZC0+ZW52X3ZhbGlkCT0gMDsKIAl9IGVsc2UgaWYgKGZsYWcxID09IEFDVElWRV9GTEFHICYmIGZsYWcyID09IE9CU09MRVRFX0ZMQUcpIHsKLQkJZ2QtPmVudl9hZGRyICA9IGFkZHIxOwotCQlnZC0+ZW52X3ZhbGlkID0gMTsKKwkJZ2QtPmVudl9hZGRyCT0gYWRkcjE7CisJCWdkLT5lbnZfdmFsaWQJPSAxOwogCX0gZWxzZSBpZiAoZmxhZzEgPT0gT0JTT0xFVEVfRkxBRyAmJiBmbGFnMiA9PSBBQ1RJVkVfRkxBRykgewotCQlnZC0+ZW52X2FkZHIgID0gYWRkcjI7Ci0JCWdkLT5lbnZfdmFsaWQgPSAxOworCQlnZC0+ZW52X2FkZHIJPSBhZGRyMjsKKwkJZ2QtPmVudl92YWxpZAk9IDE7CiAJfSBlbHNlIGlmIChmbGFnMSA9PSBmbGFnMikgewotCQlnZC0+ZW52X2FkZHIgID0gYWRkcjE7Ci0JCWdkLT5lbnZfdmFsaWQgPSAyOworCQlnZC0+ZW52X2FkZHIJPSBhZGRyMTsKKwkJZ2QtPmVudl92YWxpZAk9IDI7CiAJfSBlbHNlIGlmIChmbGFnMSA9PSAweEZGKSB7Ci0JCWdkLT5lbnZfYWRkciAgPSBhZGRyMTsKLQkJZ2QtPmVudl92YWxpZCA9IDI7CisJCWdkLT5lbnZfYWRkcgk9IGFkZHIxOworCQlnZC0+ZW52X3ZhbGlkCT0gMjsKIAl9IGVsc2UgaWYgKGZsYWcyID09IDB4RkYpIHsKLQkJZ2QtPmVudl9hZGRyICA9IGFkZHIyOwotCQlnZC0+ZW52X3ZhbGlkID0gMjsKKwkJZ2QtPmVudl9hZGRyCT0gYWRkcjI7CisJCWdkLT5lbnZfdmFsaWQJPSAyOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTMyLDc0ICsxMjgsNzAgQEAKIHsKIAllbnZfdAllbnZfbmV3OwogCXNzaXplX3QJbGVuOwotCWNoYXIJKnNhdmVkX2RhdGEgPSBOVUxMOwotCWNoYXIJKnJlczsKLQlpbnQJcmMgPSAxOworCWNoYXIJKnJlcywgKnNhdmVkX2RhdGEgPSBOVUxMOwogCWNoYXIJZmxhZyA9IE9CU09MRVRFX0ZMQUcsIG5ld19mbGFnID0gQUNUSVZFX0ZMQUc7CisJaW50CXJjID0gMTsKICNpZiBDT05GSUdfRU5WX1NFQ1RfU0laRSA+IENPTkZJR19FTlZfU0laRQogCXVsb25nCXVwX2RhdGEgPSAwOwogI2VuZGlmCiAKLQlkZWJ1ZygiUHJvdGVjdCBvZmYgJTA4bFggLi4uICUwOGxYXG4iLAotCQkodWxvbmcpZmxhc2hfYWRkciwgZW5kX2FkZHIpOworCWRlYnVnKCJQcm90ZWN0IG9mZiAlMDhsWCAuLi4gJTA4bFhcbiIsICh1bG9uZylmbGFzaF9hZGRyLCBlbmRfYWRkcik7CiAKLQlpZiAoZmxhc2hfc2VjdF9wcm90ZWN0KDAsICh1bG9uZylmbGFzaF9hZGRyLCBlbmRfYWRkcikpIHsKKwlpZiAoZmxhc2hfc2VjdF9wcm90ZWN0KDAsICh1bG9uZylmbGFzaF9hZGRyLCBlbmRfYWRkcikpCiAJCWdvdG8gZG9uZTsKLQl9CiAKIAlkZWJ1ZygiUHJvdGVjdCBvZmYgJTA4bFggLi4uICUwOGxYXG4iLAogCQkodWxvbmcpZmxhc2hfYWRkcl9uZXcsIGVuZF9hZGRyX25ldyk7CiAKLQlpZiAoZmxhc2hfc2VjdF9wcm90ZWN0KDAsICh1bG9uZylmbGFzaF9hZGRyX25ldywgZW5kX2FkZHJfbmV3KSkgeworCWlmIChmbGFzaF9zZWN0X3Byb3RlY3QoMCwgKHVsb25nKWZsYXNoX2FkZHJfbmV3LCBlbmRfYWRkcl9uZXcpKQogCQlnb3RvIGRvbmU7Ci0JfQogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJZ290byBkb25lOwogCX0KLQllbnZfbmV3LmNyYyAgID0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7Ci0JZW52X25ldy5mbGFncyA9IG5ld19mbGFnOworCWVudl9uZXcuY3JjCT0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7CisJZW52X25ldy5mbGFncwk9IG5ld19mbGFnOwogCiAjaWYgQ09ORklHX0VOVl9TRUNUX1NJWkUgPiBDT05GSUdfRU5WX1NJWkUKLQl1cF9kYXRhID0gKGVuZF9hZGRyX25ldyArIDEgLSAoKGxvbmcpZmxhc2hfYWRkcl9uZXcgKyBDT05GSUdfRU5WX1NJWkUpKTsKKwl1cF9kYXRhID0gZW5kX2FkZHJfbmV3ICsgMSAtICgobG9uZylmbGFzaF9hZGRyX25ldyArIENPTkZJR19FTlZfU0laRSk7CiAJZGVidWcoIkRhdGEgdG8gc2F2ZSAweCVsWFxuIiwgdXBfZGF0YSk7CiAJaWYgKHVwX2RhdGEpIHsKLQkJaWYgKChzYXZlZF9kYXRhID0gbWFsbG9jKHVwX2RhdGEpKSA9PSBOVUxMKSB7CisJCXNhdmVkX2RhdGEgPSBtYWxsb2ModXBfZGF0YSk7CisJCWlmIChzYXZlZF9kYXRhID09IE5VTEwpIHsKIAkJCXByaW50ZigiVW5hYmxlIHRvIHNhdmUgdGhlIHJlc3Qgb2Ygc2VjdG9yICglbGQpXG4iLAogCQkJCXVwX2RhdGEpOwogCQkJZ290byBkb25lOwogCQl9CiAJCW1lbWNweShzYXZlZF9kYXRhLAotCQkJKHZvaWQgKikoKGxvbmcpZmxhc2hfYWRkcl9uZXcgKyBDT05GSUdfRU5WX1NJWkUpLCB1cF9kYXRhKTsKKwkJCSh2b2lkICopKChsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ09ORklHX0VOVl9TSVpFKSwKKwkJCXVwX2RhdGEpOwogCQlkZWJ1ZygiRGF0YSAoc3RhcnQgMHglbFgsIGxlbiAweCVsWCkgc2F2ZWQgYXQgMHglcFxuIiwKIAkJCShsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ09ORklHX0VOVl9TSVpFLAogCQkJdXBfZGF0YSwgc2F2ZWRfZGF0YSk7CiAJfQogI2VuZGlmCiAJcHV0cygiRXJhc2luZyBGbGFzaC4uLiIpOwotCWRlYnVnKCIgJTA4bFggLi4uICUwOGxYIC4uLiIsCi0JCSh1bG9uZylmbGFzaF9hZGRyX25ldywgZW5kX2FkZHJfbmV3KTsKKwlkZWJ1ZygiICUwOGxYIC4uLiAlMDhsWCAuLi4iLCAodWxvbmcpZmxhc2hfYWRkcl9uZXcsIGVuZF9hZGRyX25ldyk7CiAKLQlpZiAoZmxhc2hfc2VjdF9lcmFzZSgodWxvbmcpZmxhc2hfYWRkcl9uZXcsIGVuZF9hZGRyX25ldykpIHsKKwlpZiAoZmxhc2hfc2VjdF9lcmFzZSgodWxvbmcpZmxhc2hfYWRkcl9uZXcsIGVuZF9hZGRyX25ldykpCiAJCWdvdG8gZG9uZTsKLQl9CiAKIAlwdXRzKCJXcml0aW5nIHRvIEZsYXNoLi4uICIpOwogCWRlYnVnKCIgJTA4bFggLi4uICUwOGxYIC4uLiIsCiAJCSh1bG9uZykmKGZsYXNoX2FkZHJfbmV3LT5kYXRhKSwKLQkJc2l6ZW9mKGVudl9wdHItPmRhdGEpKyh1bG9uZykmKGZsYXNoX2FkZHJfbmV3LT5kYXRhKSk7Ci0JaWYgKChyYyA9IGZsYXNoX3dyaXRlKChjaGFyICopJmVudl9uZXcsCi0JCQkodWxvbmcpZmxhc2hfYWRkcl9uZXcsCi0JCQlzaXplb2YoZW52X25ldykpKSB8fAotCSAgICAocmMgPSBmbGFzaF93cml0ZSgmZmxhZywKLQkJCSh1bG9uZykmKGZsYXNoX2FkZHItPmZsYWdzKSwKLQkJCXNpemVvZihmbGFzaF9hZGRyLT5mbGFncykpKSApIHsKLQkJZmxhc2hfcGVycm9yKHJjKTsKLQkJZ290byBkb25lOwotCX0KKwkJc2l6ZW9mKGVudl9wdHItPmRhdGEpICsgKHVsb25nKSYoZmxhc2hfYWRkcl9uZXctPmRhdGEpKTsKKwlyYyA9IGZsYXNoX3dyaXRlKChjaGFyICopJmVudl9uZXcsICh1bG9uZylmbGFzaF9hZGRyX25ldywKKwkJCSBzaXplb2YoZW52X25ldykpOworCWlmIChyYykKKwkJZ290byBwZXJyb3I7CisKKwlyYyA9IGZsYXNoX3dyaXRlKCZmbGFnLCAodWxvbmcpJihmbGFzaF9hZGRyLT5mbGFncyksCisJCQkgc2l6ZW9mKGZsYXNoX2FkZHItPmZsYWdzKSk7CisJaWYgKHJjKQorCQlnb3RvIHBlcnJvcjsKIAogI2lmIENPTkZJR19FTlZfU0VDVF9TSVpFID4gQ09ORklHX0VOVl9TSVpFCiAJaWYgKHVwX2RhdGEpIHsgLyogcmVzdG9yZSB0aGUgcmVzdCBvZiBzZWN0b3IgKi8KQEAgLTIwNywxNiArMTk5LDE0IEBACiAJCQkobG9uZylmbGFzaF9hZGRyX25ldyArIENPTkZJR19FTlZfU0laRSwgdXBfZGF0YSk7CiAJCWlmIChmbGFzaF93cml0ZShzYXZlZF9kYXRhLAogCQkJCShsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ09ORklHX0VOVl9TSVpFLAotCQkJCXVwX2RhdGEpKSB7Ci0JCQlmbGFzaF9wZXJyb3IocmMpOwotCQkJZ290byBkb25lOwotCQl9CisJCQkJdXBfZGF0YSkpCisJCQlnb3RvIHBlcnJvcjsKIAl9CiAjZW5kaWYKIAlwdXRzKCJkb25lXG4iKTsKIAogCXsKLQkJZW52X3QgKiBldG1wID0gZmxhc2hfYWRkcjsKKwkJZW52X3QgKmV0bXAgPSBmbGFzaF9hZGRyOwogCQl1bG9uZyBsdG1wID0gZW5kX2FkZHI7CiAKIAkJZmxhc2hfYWRkciA9IGZsYXNoX2FkZHJfbmV3OwpAQCAtMjI3LDEyICsyMTcsMTUgQEAKIAl9CiAKIAlyYyA9IDA7CisJZ290byBkb25lOworcGVycm9yOgorCWZsYXNoX3BlcnJvcihyYyk7CiBkb25lOgogCWlmIChzYXZlZF9kYXRhKQogCQlmcmVlKHNhdmVkX2RhdGEpOwogCS8qIHRyeSB0byByZS1wcm90ZWN0ICovCi0JKHZvaWQpIGZsYXNoX3NlY3RfcHJvdGVjdCgxLCAodWxvbmcpZmxhc2hfYWRkciwgZW5kX2FkZHIpOwotCSh2b2lkKSBmbGFzaF9zZWN0X3Byb3RlY3QoMSwgKHVsb25nKWZsYXNoX2FkZHJfbmV3LCBlbmRfYWRkcl9uZXcpOworCWZsYXNoX3NlY3RfcHJvdGVjdCgxLCAodWxvbmcpZmxhc2hfYWRkciwgZW5kX2FkZHIpOworCWZsYXNoX3NlY3RfcHJvdGVjdCgxLCAodWxvbmcpZmxhc2hfYWRkcl9uZXcsIGVuZF9hZGRyX25ldyk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0yNDAsMzUgKzIzMywzNCBAQAogCiAjZWxzZSAvKiAhIENPTkZJR19FTlZfQUREUl9SRURVTkQgKi8KIAotaW50ICBlbnZfaW5pdCh2b2lkKQoraW50IGVudl9pbml0KHZvaWQpCiB7CiAJaWYgKGNyYzMyKDAsIGVudl9wdHItPmRhdGEsIEVOVl9TSVpFKSA9PSBlbnZfcHRyLT5jcmMpIHsKLQkJZ2QtPmVudl9hZGRyICA9ICh1bG9uZykmKGVudl9wdHItPmRhdGEpOwotCQlnZC0+ZW52X3ZhbGlkID0gMTsKLQkJcmV0dXJuKDApOworCQlnZC0+ZW52X2FkZHIJPSAodWxvbmcpJihlbnZfcHRyLT5kYXRhKTsKKwkJZ2QtPmVudl92YWxpZAk9IDE7CisJCXJldHVybiAwOwogCX0KIAotCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07Ci0JZ2QtPmVudl92YWxpZCA9IDA7CisJZ2QtPmVudl9hZGRyCT0gKHVsb25nKSZkZWZhdWx0X2Vudmlyb25tZW50WzBdOworCWdkLT5lbnZfdmFsaWQJPSAwOwogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ01EX1NBVkVFTlYKLQogaW50IHNhdmVlbnYodm9pZCkKIHsKIAllbnZfdAllbnZfbmV3OwogCXNzaXplX3QJbGVuOwogCWludAlyYyA9IDE7Ci0JY2hhcgkqcmVzOwotCWNoYXIJKnNhdmVkX2RhdGEgPSBOVUxMOworCWNoYXIJKnJlcywgKnNhdmVkX2RhdGEgPSBOVUxMOwogI2lmIENPTkZJR19FTlZfU0VDVF9TSVpFID4gQ09ORklHX0VOVl9TSVpFCiAJdWxvbmcJdXBfZGF0YSA9IDA7CiAKLQl1cF9kYXRhID0gKGVuZF9hZGRyICsgMSAtICgobG9uZylmbGFzaF9hZGRyICsgQ09ORklHX0VOVl9TSVpFKSk7CisJdXBfZGF0YSA9IGVuZF9hZGRyICsgMSAtICgobG9uZylmbGFzaF9hZGRyICsgQ09ORklHX0VOVl9TSVpFKTsKIAlkZWJ1ZygiRGF0YSB0byBzYXZlIDB4JWx4XG4iLCB1cF9kYXRhKTsKIAlpZiAodXBfZGF0YSkgewotCQlpZiAoKHNhdmVkX2RhdGEgPSBtYWxsb2ModXBfZGF0YSkpID09IE5VTEwpIHsKKwkJc2F2ZWRfZGF0YSA9IG1hbGxvYyh1cF9kYXRhKTsKKwkJaWYgKHNhdmVkX2RhdGEgPT0gTlVMTCkgewogCQkJcHJpbnRmKCJVbmFibGUgdG8gc2F2ZSB0aGUgcmVzdCBvZiBzZWN0b3IgKCVsZClcbiIsCiAJCQkJdXBfZGF0YSk7CiAJCQlnb3RvIGRvbmU7CkBAIC0yODIsMTQgKzI3NCwxMyBAQAogCX0KICNlbmRpZgkvKiBDT05GSUdfRU5WX1NFQ1RfU0laRSAqLwogCi0JZGVidWcoIlByb3RlY3Qgb2ZmICUwOGxYIC4uLiAlMDhsWFxuIiwKLQkJKHVsb25nKWZsYXNoX2FkZHIsIGVuZF9hZGRyKTsKKwlkZWJ1ZygiUHJvdGVjdCBvZmYgJTA4bFggLi4uICUwOGxYXG4iLCAodWxvbmcpZmxhc2hfYWRkciwgZW5kX2FkZHIpOwogCiAJaWYgKGZsYXNoX3NlY3RfcHJvdGVjdCgwLCAobG9uZylmbGFzaF9hZGRyLCBlbmRfYWRkcikpCiAJCWdvdG8gZG9uZTsKIAogCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSk7CisJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCWdvdG8gZG9uZTsKQEAgLTMwMiwzMiArMjkzLDMxIEBACiAKIAlwdXRzKCJXcml0aW5nIHRvIEZsYXNoLi4uICIpOwogCXJjID0gZmxhc2hfd3JpdGUoKGNoYXIgKikmZW52X25ldywgKGxvbmcpZmxhc2hfYWRkciwgQ09ORklHX0VOVl9TSVpFKTsKLQlpZiAocmMgIT0gMCkgewotCQlmbGFzaF9wZXJyb3IocmMpOwotCQlnb3RvIGRvbmU7Ci0JfQorCWlmIChyYyAhPSAwKQorCQlnb3RvIHBlcnJvcjsKKwogI2lmIENPTkZJR19FTlZfU0VDVF9TSVpFID4gQ09ORklHX0VOVl9TSVpFCiAJaWYgKHVwX2RhdGEpIHsJLyogcmVzdG9yZSB0aGUgcmVzdCBvZiBzZWN0b3IgKi8KIAkJZGVidWcoIlJlc3RvcmluZyB0aGUgcmVzdCBvZiBkYXRhIHRvIDB4JWx4IGxlbiAweCVseFxuIiwKIAkJCSh1bG9uZylmbGFzaF9hZGRyICsgQ09ORklHX0VOVl9TSVpFLCB1cF9kYXRhKTsKIAkJaWYgKGZsYXNoX3dyaXRlKHNhdmVkX2RhdGEsCiAJCQkJKGxvbmcpZmxhc2hfYWRkciArIENPTkZJR19FTlZfU0laRSwKLQkJCQl1cF9kYXRhKSkgewotCQkJZmxhc2hfcGVycm9yKHJjKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQorCQkJCXVwX2RhdGEpKQorCQkJZ290byBwZXJyb3I7CiAJfQogI2VuZGlmCiAJcHV0cygiZG9uZVxuIik7CiAJcmMgPSAwOworCWdvdG8gZG9uZTsKK3BlcnJvcjoKKwlmbGFzaF9wZXJyb3IocmMpOwogZG9uZToKIAlpZiAoc2F2ZWRfZGF0YSkKIAkJZnJlZShzYXZlZF9kYXRhKTsKIAkvKiB0cnkgdG8gcmUtcHJvdGVjdCAqLwotCSh2b2lkKSBmbGFzaF9zZWN0X3Byb3RlY3QoMSwgKGxvbmcpZmxhc2hfYWRkciwgZW5kX2FkZHIpOworCWZsYXNoX3NlY3RfcHJvdGVjdCgxLCAobG9uZylmbGFzaF9hZGRyLCBlbmRfYWRkcik7CiAJcmV0dXJuIHJjOwogfQotCiAjZW5kaWYgLyogQ01EX1NBVkVFTlYgKi8KIAogI2VuZGlmIC8qIENPTkZJR19FTlZfQUREUl9SRURVTkQgKi8KQEAgLTM0Nyw4ICszMzcsNyBAQAogCX0KIAogCWlmIChmbGFzaF9hZGRyX25ldy0+ZmxhZ3MgIT0gT0JTT0xFVEVfRkxBRyAmJgotCSAgICBjcmMzMigwLCBmbGFzaF9hZGRyX25ldy0+ZGF0YSwgRU5WX1NJWkUpID09Ci0JICAgIGZsYXNoX2FkZHJfbmV3LT5jcmMpIHsKKwkgICAgY3JjMzIoMCwgZmxhc2hfYWRkcl9uZXctPmRhdGEsIEVOVl9TSVpFKSA9PSBmbGFzaF9hZGRyX25ldy0+Y3JjKSB7CiAJCWNoYXIgZmxhZyA9IE9CU09MRVRFX0ZMQUc7CiAKIAkJZ2QtPmVudl92YWxpZCA9IDI7CkBAIC0zNzIsOCArMzYxLDggQEAKIAl9CiAKIAlpZiAoZ2QtPmVudl92YWxpZCA9PSAyKQotCQlwdXRzICgiKioqIFdhcm5pbmcgLSBzb21lIHByb2JsZW1zIGRldGVjdGVkICIKLQkJICAgICAgInJlYWRpbmcgZW52aXJvbm1lbnQ7IHJlY292ZXJlZCBzdWNjZXNzZnVsbHlcblxuIik7CisJCXB1dHMoIioqKiBXYXJuaW5nIC0gc29tZSBwcm9ibGVtcyBkZXRlY3RlZCAiCisJCSAgICAgInJlYWRpbmcgZW52aXJvbm1lbnQ7IHJlY292ZXJlZCBzdWNjZXNzZnVsbHlcblxuIik7CiAjZW5kaWYgLyogQ09ORklHX0VOVl9BRERSX1JFRFVORCAqLwogCiAJZW52X2ltcG9ydCgoY2hhciAqKWZsYXNoX2FkZHIsIDEpOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9tZ2Rpc2suYyBiL2NvbW1vbi9lbnZfbWdkaXNrLmMKaW5kZXggYTY5OTIzYi4uNWRkOTJlNyAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9tZ2Rpc2suYworKysgYi9jb21tb24vZW52X21nZGlzay5jCkBAIC0yNywxOCArMjcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxtZ19kaXNrLmg+CiAKLS8qIHJlZmVyZW5jZXMgdG8gbmFtZXMgaW4gZW52X2NvbW1vbi5jICovCi1leHRlcm4gdWNoYXIgZGVmYXVsdF9lbnZpcm9ubWVudFtdOwotCiBjaGFyICplbnZfbmFtZV9zcGVjID0gIk1HX0RJU0siOwogCi1lbnZfdCAqZW52X3B0ciA9IDA7CitlbnZfdCAqZW52X3B0cjsKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKIHVjaGFyIGVudl9nZXRfY2hhcl9zcGVjKGludCBpbmRleCkKIHsKLQlyZXR1cm4gKCooKHVjaGFyICopKGdkLT5lbnZfYWRkciArIGluZGV4KSkpOworCXJldHVybiAqKCh1Y2hhciAqKShnZC0+ZW52X2FkZHIgKyBpbmRleCkpOwogfQogCiB2b2lkIGVudl9yZWxvY2F0ZV9zcGVjKHZvaWQpCmRpZmYgLS1naXQgYS9jb21tb24vZW52X21tYy5jIGIvY29tbW9uL2Vudl9tbWMuYwppbmRleCA4M2Y0MGY0Li44NDQxYzc3IDEwMDY0NAotLS0gYS9jb21tb24vZW52X21tYy5jCisrKyBiL2NvbW1vbi9lbnZfbW1jLmMKQEAgLTMyLDIzICszMiwxNCBAQAogI2luY2x1ZGUgPHNlYXJjaC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKLS8qIHJlZmVyZW5jZXMgdG8gbmFtZXMgaW4gZW52X2NvbW1vbi5jICovCi1leHRlcm4gdWNoYXIgZGVmYXVsdF9lbnZpcm9ubWVudFtdOwotCiBjaGFyICplbnZfbmFtZV9zcGVjID0gIk1NQyI7CiAKICNpZmRlZiBFTlZfSVNfRU1CRURERUQKLWV4dGVybiB1Y2hhciBlbnZpcm9ubWVudFtdOwotZW52X3QgKmVudl9wdHIgPSAoZW52X3QgKikoJmVudmlyb25tZW50WzBdKTsKK2Vudl90ICplbnZfcHRyID0gJmVudmlyb25tZW50OwogI2Vsc2UgLyogISBFTlZfSVNfRU1CRURERUQgKi8KLWVudl90ICplbnZfcHRyID0gTlVMTDsKK2Vudl90ICplbnZfcHRyOwogI2VuZGlmIC8qIEVOVl9JU19FTUJFRERFRCAqLwogCi0vKiBsb2NhbCBmdW5jdGlvbnMgKi8KLSNpZiAhZGVmaW5lZChFTlZfSVNfRU1CRURERUQpCi1zdGF0aWMgdm9pZCB1c2VfZGVmYXVsdCh2b2lkKTsKLSNlbmRpZgotCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAogI2lmICFkZWZpbmVkKENPTkZJR19FTlZfT0ZGU0VUKQpAQCAtNjAsOSArNTEsOCBAQAogCSplbnZfYWRkciA9IENPTkZJR19FTlZfT0ZGU0VUOwogCXJldHVybiAwOwogfQotX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fbW1jX2dldF9lbnZfYWRkciIpKSkKLWludCBtbWNfZ2V0X2Vudl9hZGRyKHN0cnVjdCBtbWMgKm1tYywgdTMyICplbnZfYWRkcik7Ci0KK2ludCBtbWNfZ2V0X2Vudl9hZGRyKHN0cnVjdCBtbWMgKm1tYywgdTMyICplbnZfYWRkcikKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19tbWNfZ2V0X2Vudl9hZGRyIikpKTsKIAogdWNoYXIgZW52X2dldF9jaGFyX3NwZWMoaW50IGluZGV4KQogewpAQCAtNzIsMTMgKzYyLDEzIEBACiBpbnQgZW52X2luaXQodm9pZCkKIHsKIAkvKiB1c2UgZGVmYXVsdCAqLwotCWdkLT5lbnZfYWRkciA9ICh1bG9uZykmZGVmYXVsdF9lbnZpcm9ubWVudFswXTsKLQlnZC0+ZW52X3ZhbGlkID0gMTsKKwlnZC0+ZW52X2FkZHIJPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07CisJZ2QtPmVudl92YWxpZAk9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGluaXRfbW1jX2Zvcl9lbnYoc3RydWN0IG1tYyAqbW1jKQorc3RhdGljIGludCBpbml0X21tY19mb3JfZW52KHN0cnVjdCBtbWMgKm1tYykKIHsKIAlpZiAoIW1tYykgewogCQlwdXRzKCJObyBNTUMgY2FyZCBmb3VuZFxuIik7CkBAIC04NywyMSArNzcsMjAgQEAKIAogCWlmIChtbWNfaW5pdChtbWMpKSB7CiAJCXB1dHMoIk1NQyBpbml0IGZhaWxlZFxuIik7Ci0JCXJldHVybiAgLTE7CisJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19DTURfU0FWRUVOVgotCi1pbmxpbmUgaW50IHdyaXRlX2VudihzdHJ1Y3QgbW1jICptbWMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW5saW5lIGludCB3cml0ZV9lbnYoc3RydWN0IG1tYyAqbW1jLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IHZvaWQgKmJ1ZmZlcikKIHsKIAl1aW50IGJsa19zdGFydCwgYmxrX2NudCwgbjsKIAotCWJsa19zdGFydCA9IEFMSUdOKG9mZnNldCwgbW1jLT53cml0ZV9ibF9sZW4pIC8gbW1jLT53cml0ZV9ibF9sZW47Ci0JYmxrX2NudCAgID0gQUxJR04oc2l6ZSwgbW1jLT53cml0ZV9ibF9sZW4pIC8gbW1jLT53cml0ZV9ibF9sZW47CisJYmxrX3N0YXJ0CT0gQUxJR04ob2Zmc2V0LCBtbWMtPndyaXRlX2JsX2xlbikgLyBtbWMtPndyaXRlX2JsX2xlbjsKKwlibGtfY250CQk9IEFMSUdOKHNpemUsIG1tYy0+d3JpdGVfYmxfbGVuKSAvIG1tYy0+d3JpdGVfYmxfbGVuOwogCiAJbiA9IG1tYy0+YmxvY2tfZGV2LmJsb2NrX3dyaXRlKENPTkZJR19TWVNfTU1DX0VOVl9ERVYsIGJsa19zdGFydCwKIAkJCQkJYmxrX2NudCwgKHVfY2hhciAqKWJ1ZmZlcik7CkBAIC0xMTUsMjEgKzEwNCwxOSBAQAogCXNzaXplX3QJbGVuOwogCWNoYXIJKnJlczsKIAlzdHJ1Y3QgbW1jICptbWMgPSBmaW5kX21tY19kZXZpY2UoQ09ORklHX1NZU19NTUNfRU5WX0RFVik7Ci0JdTMyIG9mZnNldDsKKwl1MzIJb2Zmc2V0OwogCi0JaWYgKGluaXRfbW1jX2Zvcl9lbnYobW1jKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZihtbWNfZ2V0X2Vudl9hZGRyKG1tYywgJm9mZnNldCkpCisJaWYgKGluaXRfbW1jX2Zvcl9lbnYobW1jKSB8fCBtbWNfZ2V0X2Vudl9hZGRyKG1tYywgJm9mZnNldCkpCiAJCXJldHVybiAxOwogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0dXJuIDE7CiAJfQotCWVudl9uZXcuY3JjICAgPSBjcmMzMigwLCBlbnZfbmV3LmRhdGEsIEVOVl9TSVpFKTsKKworCWVudl9uZXcuY3JjID0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7CiAJcHJpbnRmKCJXcml0aW5nIHRvIE1NQyglZCkuLi4gIiwgQ09ORklHX1NZU19NTUNfRU5WX0RFVik7CiAJaWYgKHdyaXRlX2VudihtbWMsIENPTkZJR19FTlZfU0laRSwgb2Zmc2V0LCAodV9jaGFyICopJmVudl9uZXcpKSB7CiAJCXB1dHMoImZhaWxlZFxuIik7CkBAIC0xNDEsMTMgKzEyOCwxMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19DTURfU0FWRUVOViAqLwogCi1pbmxpbmUgaW50IHJlYWRfZW52KHN0cnVjdCBtbWMgKm1tYywgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbmxpbmUgaW50IHJlYWRfZW52KHN0cnVjdCBtbWMgKm1tYywgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IHZvaWQgKmJ1ZmZlcikKIHsKIAl1aW50IGJsa19zdGFydCwgYmxrX2NudCwgbjsKIAotCWJsa19zdGFydCA9IEFMSUdOKG9mZnNldCwgbW1jLT5yZWFkX2JsX2xlbikgLyBtbWMtPnJlYWRfYmxfbGVuOwotCWJsa19jbnQgICA9IEFMSUdOKHNpemUsIG1tYy0+cmVhZF9ibF9sZW4pIC8gbW1jLT5yZWFkX2JsX2xlbjsKKwlibGtfc3RhcnQJPSBBTElHTihvZmZzZXQsIG1tYy0+cmVhZF9ibF9sZW4pIC8gbW1jLT5yZWFkX2JsX2xlbjsKKwlibGtfY250CQk9IEFMSUdOKHNpemUsIG1tYy0+cmVhZF9ibF9sZW4pIC8gbW1jLT5yZWFkX2JsX2xlbjsKIAogCW4gPSBtbWMtPmJsb2NrX2Rldi5ibG9ja19yZWFkKENPTkZJR19TWVNfTU1DX0VOVl9ERVYsIGJsa19zdGFydCwKIAkJCQkJYmxrX2NudCwgKHVjaGFyICopYnVmZmVyKTsKQEAgLTE1OSwzMiArMTQ2LDE1IEBACiB7CiAjaWYgIWRlZmluZWQoRU5WX0lTX0VNQkVEREVEKQogCWNoYXIgYnVmW0NPTkZJR19FTlZfU0laRV07Ci0KIAlzdHJ1Y3QgbW1jICptbWMgPSBmaW5kX21tY19kZXZpY2UoQ09ORklHX1NZU19NTUNfRU5WX0RFVik7CiAJdTMyIG9mZnNldDsKIAotCWlmIChpbml0X21tY19mb3JfZW52KG1tYykpIHsKLQkJdXNlX2RlZmF1bHQoKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoaW5pdF9tbWNfZm9yX2VudihtbWMpIHx8IG1tY19nZXRfZW52X2FkZHIobW1jLCAmb2Zmc2V0KSkKKwkJcmV0dXJuIHNldF9kZWZhdWx0X2VudihOVUxMKTsKIAotCWlmKG1tY19nZXRfZW52X2FkZHIobW1jLCAmb2Zmc2V0KSkgewotCQl1c2VfZGVmYXVsdCgpOwotCQlyZXR1cm4gOwotCX0KLQotCWlmIChyZWFkX2VudihtbWMsIENPTkZJR19FTlZfU0laRSwgb2Zmc2V0LCBidWYpKSB7Ci0JCXVzZV9kZWZhdWx0KCk7Ci0JCXJldHVybjsKLQl9CisJaWYgKHJlYWRfZW52KG1tYywgQ09ORklHX0VOVl9TSVpFLCBvZmZzZXQsIGJ1ZikpCisJCXJldHVybiBzZXRfZGVmYXVsdF9lbnYoTlVMTCk7CiAKIAllbnZfaW1wb3J0KGJ1ZiwgMSk7CiAjZW5kaWYKIH0KLQotI2lmICFkZWZpbmVkKEVOVl9JU19FTUJFRERFRCkKLXN0YXRpYyB2b2lkIHVzZV9kZWZhdWx0KCkKLXsKLQlzZXRfZGVmYXVsdF9lbnYoTlVMTCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9lbnZfbmFuZC5jIGIvY29tbW9uL2Vudl9uYW5kLmMKaW5kZXggMTQ0NDZhNi4uY2UxM2RlZiAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9uYW5kLmMKKysrIGIvY29tbW9uL2Vudl9uYW5kLmMKQEAgLTQ0LDEwICs0NCwxMSBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9TQVZFRU5WKSAmJiBkZWZpbmVkKENPTkZJR19DTURfTkFORCkKICNkZWZpbmUgQ01EX1NBVkVFTlYKICNlbGlmIGRlZmluZWQoQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EKQotI2Vycm9yIENhbm5vdCB1c2UgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EIHdpdGhvdXQgQ09ORklHX0NNRF9TQVZFRU5WICYgQ09ORklHX0NNRF9OQU5ECisjZXJyb3IgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EIG11c3QgaGF2ZSBDT05GSUdfQ01EX1NBVkVFTlYgJiBDT05GSUdfQ01EX05BTkQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRU5WX1NJWkVfUkVEVU5EKSAmJiAoQ09ORklHX0VOVl9TSVpFX1JFRFVORCAhPSBDT05GSUdfRU5WX1NJWkUpCisjaWYgZGVmaW5lZChDT05GSUdfRU5WX1NJWkVfUkVEVU5EKSAmJglcCisJKENPTkZJR19FTlZfU0laRV9SRURVTkQgIT0gQ09ORklHX0VOVl9TSVpFKQogI2Vycm9yIENPTkZJR19FTlZfU0laRV9SRURVTkQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIENPTkZJR19FTlZfU0laRQogI2VuZGlmCiAKQEAgLTU1LDI2ICs1NiwyMSBAQAogI2RlZmluZSBDT05GSUdfRU5WX1JBTkdFCUNPTkZJR19FTlZfU0laRQogI2VuZGlmCiAKLS8qIHJlZmVyZW5jZXMgdG8gbmFtZXMgaW4gZW52X2NvbW1vbi5jICovCi1leHRlcm4gdWNoYXIgZGVmYXVsdF9lbnZpcm9ubWVudFtdOwotCiBjaGFyICplbnZfbmFtZV9zcGVjID0gIk5BTkQiOwogCi0KICNpZiBkZWZpbmVkKEVOVl9JU19FTUJFRERFRCkKLWV4dGVybiB1Y2hhciBlbnZpcm9ubWVudFtdOwotZW52X3QgKmVudl9wdHIgPSAoZW52X3QgKikoJmVudmlyb25tZW50WzBdKTsKK2Vudl90ICplbnZfcHRyID0gJmVudmlyb25tZW50OwogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORF9FTlZfRFNUKQogZW52X3QgKmVudl9wdHIgPSAoZW52X3QgKilDT05GSUdfTkFORF9FTlZfRFNUOwogI2Vsc2UgLyogISBFTlZfSVNfRU1CRURERUQgKi8KLWVudl90ICplbnZfcHRyID0gMDsKK2Vudl90ICplbnZfcHRyOwogI2VuZGlmIC8qIEVOVl9JU19FTUJFRERFRCAqLwogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotdWNoYXIgZW52X2dldF9jaGFyX3NwZWMgKGludCBpbmRleCkKK3VjaGFyIGVudl9nZXRfY2hhcl9zcGVjKGludCBpbmRleCkKIHsKLQlyZXR1cm4gKCAqKCh1Y2hhciAqKShnZC0+ZW52X2FkZHIgKyBpbmRleCkpICk7CisJcmV0dXJuICooKHVjaGFyICopKGdkLT5lbnZfYWRkciArIGluZGV4KSk7CiB9CiAKIC8qCkBAIC05OSwxNiArOTUsMTQgQEAKIAllbnZfdCAqdG1wX2VudjI7CiAKIAl0bXBfZW52MiA9IChlbnZfdCAqKSgodWxvbmcpZW52X3B0ciArIENPTkZJR19FTlZfU0laRSk7Ci0JY3JjMl9vayA9IChjcmMzMigwLCB0bXBfZW52Mi0+ZGF0YSwgRU5WX1NJWkUpID09IHRtcF9lbnYyLT5jcmMpOworCWNyYzJfb2sgPSBjcmMzMigwLCB0bXBfZW52Mi0+ZGF0YSwgRU5WX1NJWkUpID09IHRtcF9lbnYyLT5jcmM7CiAjZW5kaWYKLQogCXRtcF9lbnYxID0gZW52X3B0cjsKLQotCWNyYzFfb2sgPSAoY3JjMzIoMCwgdG1wX2VudjEtPmRhdGEsIEVOVl9TSVpFKSA9PSB0bXBfZW52MS0+Y3JjKTsKKwljcmMxX29rID0gY3JjMzIoMCwgdG1wX2VudjEtPmRhdGEsIEVOVl9TSVpFKSA9PSB0bXBfZW52MS0+Y3JjOwogCiAJaWYgKCFjcmMxX29rICYmICFjcmMyX29rKSB7Ci0JCWdkLT5lbnZfYWRkciAgPSAwOwotCQlnZC0+ZW52X3ZhbGlkID0gMDsKKwkJZ2QtPmVudl9hZGRyCT0gMDsKKwkJZ2QtPmVudl92YWxpZAk9IDA7CiAKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChjcmMxX29rICYmICFjcmMyX29rKSB7CkBAIC0xMTksMTMgKzExMywxMyBAQAogCQlnZC0+ZW52X3ZhbGlkID0gMjsKIAl9IGVsc2UgewogCQkvKiBib3RoIG9rIC0gY2hlY2sgc2VyaWFsICovCi0JCWlmKHRtcF9lbnYxLT5mbGFncyA9PSAyNTUgJiYgdG1wX2VudjItPmZsYWdzID09IDApCisJCWlmICh0bXBfZW52MS0+ZmxhZ3MgPT0gMjU1ICYmIHRtcF9lbnYyLT5mbGFncyA9PSAwKQogCQkJZ2QtPmVudl92YWxpZCA9IDI7Ci0JCWVsc2UgaWYodG1wX2VudjItPmZsYWdzID09IDI1NSAmJiB0bXBfZW52MS0+ZmxhZ3MgPT0gMCkKKwkJZWxzZSBpZiAodG1wX2VudjItPmZsYWdzID09IDI1NSAmJiB0bXBfZW52MS0+ZmxhZ3MgPT0gMCkKIAkJCWdkLT5lbnZfdmFsaWQgPSAxOwotCQllbHNlIGlmKHRtcF9lbnYxLT5mbGFncyA+IHRtcF9lbnYyLT5mbGFncykKKwkJZWxzZSBpZiAodG1wX2VudjEtPmZsYWdzID4gdG1wX2VudjItPmZsYWdzKQogCQkJZ2QtPmVudl92YWxpZCA9IDE7Ci0JCWVsc2UgaWYodG1wX2VudjItPmZsYWdzID4gdG1wX2VudjEtPmZsYWdzKQorCQllbHNlIGlmICh0bXBfZW52Mi0+ZmxhZ3MgPiB0bXBfZW52MS0+ZmxhZ3MpCiAJCQlnZC0+ZW52X3ZhbGlkID0gMjsKIAkJZWxzZSAvKiBmbGFncyBhcmUgZXF1YWwgLSBhbG1vc3QgaW1wb3NzaWJsZSAqLwogCQkJZ2QtPmVudl92YWxpZCA9IDE7CkBAIC0xNDEsMTEgKzEzNSwxMSBAQAogCWdkLT5lbnZfYWRkciA9ICh1bG9uZyllbnZfcHRyLT5kYXRhOwogCiAjZWxzZSAvKiBFTlZfSVNfRU1CRURERUQgfHwgQ09ORklHX05BTkRfRU5WX0RTVCAqLwotCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07Ci0JZ2QtPmVudl92YWxpZCA9IDE7CisJZ2QtPmVudl9hZGRyCT0gKHVsb25nKSZkZWZhdWx0X2Vudmlyb25tZW50WzBdOworCWdkLT5lbnZfdmFsaWQJPSAxOwogI2VuZGlmIC8qIEVOVl9JU19FTUJFRERFRCB8fCBDT05GSUdfTkFORF9FTlZfRFNUICovCiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ01EX1NBVkVFTlYKQEAgLTE1OCw3ICsxNTIsNiBAQAogCXNpemVfdCBlbmQgPSBvZmZzZXQgKyBDT05GSUdfRU5WX1JBTkdFOwogCXNpemVfdCBhbW91bnRfc2F2ZWQgPSAwOwogCXNpemVfdCBibG9ja3NpemUsIGxlbjsKLQogCXVfY2hhciAqY2hhcl9wdHI7CiAKIAlibG9ja3NpemUgPSBuYW5kX2luZm9bMF0uZXJhc2VzaXplOwpAQCAtMTY5LDkgKzE2Miw5IEBACiAJCQlvZmZzZXQgKz0gYmxvY2tzaXplOwogCQl9IGVsc2UgewogCQkJY2hhcl9wdHIgPSAmYnVmW2Ftb3VudF9zYXZlZF07Ci0JCQlpZiAobmFuZF93cml0ZSgmbmFuZF9pbmZvWzBdLCBvZmZzZXQsICZsZW4sCi0JCQkJCWNoYXJfcHRyKSkKKwkJCWlmIChuYW5kX3dyaXRlKCZuYW5kX2luZm9bMF0sIG9mZnNldCwgJmxlbiwgY2hhcl9wdHIpKQogCQkJCXJldHVybiAxOworCiAJCQlvZmZzZXQgKz0gYmxvY2tzaXplOwogCQkJYW1vdW50X3NhdmVkICs9IGxlbjsKIAkJfQpAQCAtMjAwLDIzICsxOTMsMjIgQEAKIAkJcmV0dXJuIDE7CiAKIAlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlyZXR1cm4gMTsKIAl9Ci0JZW52X25ldy5jcmMgICA9IGNyYzMyKDAsIGVudl9uZXcuZGF0YSwgRU5WX1NJWkUpOwotCWVudl9uZXcuZmxhZ3MgPSArK2Vudl9mbGFnczsgLyogaW5jcmVhc2UgdGhlIHNlcmlhbCAqLworCWVudl9uZXcuY3JjCT0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7CisJZW52X25ldy5mbGFncwk9ICsrZW52X2ZsYWdzOyAvKiBpbmNyZWFzZSB0aGUgc2VyaWFsICovCiAKLQlpZihnZC0+ZW52X3ZhbGlkID09IDEpIHsKKwlpZiAoZ2QtPmVudl92YWxpZCA9PSAxKSB7CiAJCXB1dHMoIkVyYXNpbmcgcmVkdW5kYW50IE5BTkQuLi5cbiIpOwogCQluYW5kX2VyYXNlX29wdGlvbnMub2Zmc2V0ID0gQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EOwogCQlpZiAobmFuZF9lcmFzZV9vcHRzKCZuYW5kX2luZm9bMF0sICZuYW5kX2VyYXNlX29wdGlvbnMpKQogCQkJcmV0dXJuIDE7CiAKIAkJcHV0cygiV3JpdGluZyB0byByZWR1bmRhbnQgTkFORC4uLiAiKTsKLQkJcmV0ID0gd3JpdGVlbnYoQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ELAotCQkJKHVfY2hhciAqKSZlbnZfbmV3KTsKKwkJcmV0ID0gd3JpdGVlbnYoQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ELCAodV9jaGFyICopJmVudl9uZXcpOwogCX0gZWxzZSB7CiAJCXB1dHMoIkVyYXNpbmcgTkFORC4uLlxuIik7CiAJCW5hbmRfZXJhc2Vfb3B0aW9ucy5vZmZzZXQgPSBDT05GSUdfRU5WX09GRlNFVDsKQEAgLTIyNCw4ICsyMTYsNyBAQAogCQkJcmV0dXJuIDE7CiAKIAkJcHV0cygiV3JpdGluZyB0byBOQU5ELi4uICIpOwotCQlyZXQgPSB3cml0ZWVudihDT05GSUdfRU5WX09GRlNFVCwKLQkJCSh1X2NoYXIgKikmZW52X25ldyk7CisJCXJldCA9IHdyaXRlZW52KENPTkZJR19FTlZfT0ZGU0VULCAodV9jaGFyICopJmVudl9uZXcpOwogCX0KIAlpZiAocmV0KSB7CiAJCXB1dHMoIkZBSUxFRCFcbiIpOwpAQCAtMjM0LDE0ICsyMjUsMTQgQEAKIAogCXB1dHMoImRvbmVcbiIpOwogCi0JZ2QtPmVudl92YWxpZCA9IChnZC0+ZW52X3ZhbGlkID09IDIgPyAxIDogMik7CisJZ2QtPmVudl92YWxpZCA9IGdkLT5lbnZfdmFsaWQgPT0gMiA/IDEgOiAyOwogCiAJcmV0dXJuIHJldDsKIH0KICNlbHNlIC8qICEgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EICovCiBpbnQgc2F2ZWVudih2b2lkKQogewotCWludCByZXQgPSAwOworCWludAlyZXQgPSAwOwogCWVudl90CWVudl9uZXc7CiAJc3NpemVfdAlsZW47CiAJY2hhcgkqcmVzOwpAQCAtMjU1LDEyICsyNDYsMTIgQEAKIAkJcmV0dXJuIDE7CiAKIAlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlyZXR1cm4gMTsKIAl9Ci0JZW52X25ldy5jcmMgICA9IGNyYzMyKDAsIGVudl9uZXcuZGF0YSwgRU5WX1NJWkUpOworCWVudl9uZXcuY3JjID0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7CiAKIAlwdXRzKCJFcmFzaW5nIE5hbmQuLi5cbiIpOwogCWlmIChuYW5kX2VyYXNlX29wdHMoJm5hbmRfaW5mb1swXSwgJm5hbmRfZXJhc2Vfb3B0aW9ucykpCkBAIC0yNzgsMTcgKzI2OSwxNyBAQAogI2VuZGlmIC8qIENPTkZJR19FTlZfT0ZGU0VUX1JFRFVORCAqLwogI2VuZGlmIC8qIENNRF9TQVZFRU5WICovCiAKLWludCByZWFkZW52KHNpemVfdCBvZmZzZXQsIHVfY2hhciAqIGJ1ZikKK2ludCByZWFkZW52KHNpemVfdCBvZmZzZXQsIHVfY2hhciAqYnVmKQogewogCXNpemVfdCBlbmQgPSBvZmZzZXQgKyBDT05GSUdfRU5WX1JBTkdFOwogCXNpemVfdCBhbW91bnRfbG9hZGVkID0gMDsKIAlzaXplX3QgYmxvY2tzaXplLCBsZW47Ci0KIAl1X2NoYXIgKmNoYXJfcHRyOwogCiAJYmxvY2tzaXplID0gbmFuZF9pbmZvWzBdLmVyYXNlc2l6ZTsKIAlpZiAoIWJsb2Nrc2l6ZSkKIAkJcmV0dXJuIDE7CisKIAlsZW4gPSBtaW4oYmxvY2tzaXplLCBDT05GSUdfRU5WX1NJWkUpOwogCiAJd2hpbGUgKGFtb3VudF9sb2FkZWQgPCBDT05GSUdfRU5WX1NJWkUgJiYgb2Zmc2V0IDwgZW5kKSB7CkBAIC0yOTYsMTIgKzI4NywxNSBAQAogCQkJb2Zmc2V0ICs9IGJsb2Nrc2l6ZTsKIAkJfSBlbHNlIHsKIAkJCWNoYXJfcHRyID0gJmJ1ZlthbW91bnRfbG9hZGVkXTsKLQkJCWlmIChuYW5kX3JlYWRfc2tpcF9iYWQoJm5hbmRfaW5mb1swXSwgb2Zmc2V0LCAmbGVuLCBjaGFyX3B0cikpCisJCQlpZiAobmFuZF9yZWFkX3NraXBfYmFkKCZuYW5kX2luZm9bMF0sIG9mZnNldCwKKwkJCQkJICAgICAgICZsZW4sIGNoYXJfcHRyKSkKIAkJCQlyZXR1cm4gMTsKKwogCQkJb2Zmc2V0ICs9IGJsb2Nrc2l6ZTsKIAkJCWFtb3VudF9sb2FkZWQgKz0gbGVuOwogCQl9CiAJfQorCiAJaWYgKGFtb3VudF9sb2FkZWQgIT0gQ09ORklHX0VOVl9TSVpFKQogCQlyZXR1cm4gMTsKIApAQCAtMzEyLDE0ICszMDYsMTQgQEAKIGludCBnZXRfbmFuZF9lbnZfb29iKG5hbmRfaW5mb190ICpuYW5kLCB1bnNpZ25lZCBsb25nICpyZXN1bHQpCiB7CiAJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKLQl1aW50MzJfdCBvb2JfYnVmW0VOVl9PRkZTRVRfU0laRS9zaXplb2YodWludDMyX3QpXTsKKwl1aW50MzJfdCBvb2JfYnVmW0VOVl9PRkZTRVRfU0laRSAvIHNpemVvZih1aW50MzJfdCldOwogCWludCByZXQ7CiAKLQlvcHMuZGF0YnVmID0gTlVMTDsKLQlvcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKLQlvcHMub29ib2ZmcyA9IDA7Ci0Jb3BzLm9vYmxlbiA9IEVOVl9PRkZTRVRfU0laRTsKLQlvcHMub29iYnVmID0gKHZvaWQgKikgb29iX2J1ZjsKKwlvcHMuZGF0YnVmCT0gTlVMTDsKKwlvcHMubW9kZQk9IE1URF9PT0JfQVVUTzsKKwlvcHMub29ib2Zmcwk9IDA7CisJb3BzLm9vYmxlbgk9IEVOVl9PRkZTRVRfU0laRTsKKwlvcHMub29iYnVmCT0gKHZvaWQgKilvb2JfYnVmOwogCiAJcmV0ID0gbmFuZC0+cmVhZF9vb2IobmFuZCwgRU5WX09GRlNFVF9TSVpFLCAmb3BzKTsKIAlpZiAocmV0KSB7CkBAIC0zNDksMTMgKzM0MywxMCBAQAogCiAJdG1wX2VudjEgPSAoZW52X3QgKiltYWxsb2MoQ09ORklHX0VOVl9TSVpFKTsKIAl0bXBfZW52MiA9IChlbnZfdCAqKW1hbGxvYyhDT05GSUdfRU5WX1NJWkUpOwotCi0JaWYgKCh0bXBfZW52MSA9PSBOVUxMKSB8fCAodG1wX2VudjIgPT0gTlVMTCkpIHsKKwlpZiAodG1wX2VudjEgPT0gTlVMTCB8fCB0bXBfZW52MiA9PSBOVUxMKSB7CiAJCXB1dHMoIkNhbid0IGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGVudmlyb25tZW50XG4iKTsKLQkJZnJlZSh0bXBfZW52MSk7Ci0JCWZyZWUodG1wX2VudjIpOwogCQlzZXRfZGVmYXVsdF9lbnYoIiFtYWxsb2MoKSBmYWlsZWQiKTsKLQkJcmV0dXJuOworCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHJlYWRlbnYoQ09ORklHX0VOVl9PRkZTRVQsICh1X2NoYXIgKikgdG1wX2VudjEpKQpAQCAtMzY0LDE0ICszNTUsMTIgQEAKIAlpZiAocmVhZGVudihDT05GSUdfRU5WX09GRlNFVF9SRURVTkQsICh1X2NoYXIgKikgdG1wX2VudjIpKQogCQlwdXRzKCJObyBWYWxpZCBSZWR1bmRhbnQgRW52aXJvbm1lbnQgQXJlYSBmb3VuZFxuIik7CiAKLQljcmMxX29rID0gKGNyYzMyKDAsIHRtcF9lbnYxLT5kYXRhLCBFTlZfU0laRSkgPT0gdG1wX2VudjEtPmNyYyk7Ci0JY3JjMl9vayA9IChjcmMzMigwLCB0bXBfZW52Mi0+ZGF0YSwgRU5WX1NJWkUpID09IHRtcF9lbnYyLT5jcmMpOworCWNyYzFfb2sgPSBjcmMzMigwLCB0bXBfZW52MS0+ZGF0YSwgRU5WX1NJWkUpID09IHRtcF9lbnYxLT5jcmM7CisJY3JjMl9vayA9IGNyYzMyKDAsIHRtcF9lbnYyLT5kYXRhLCBFTlZfU0laRSkgPT0gdG1wX2VudjItPmNyYzsKIAogCWlmICghY3JjMV9vayAmJiAhY3JjMl9vaykgewotCQlmcmVlKHRtcF9lbnYxKTsKLQkJZnJlZSh0bXBfZW52Mik7CiAJCXNldF9kZWZhdWx0X2VudigiIWJhZCBDUkMiKTsKLQkJcmV0dXJuOworCQlnb3RvIGRvbmU7CiAJfSBlbHNlIGlmIChjcmMxX29rICYmICFjcmMyX29rKSB7CiAJCWdkLT5lbnZfdmFsaWQgPSAxOwogCX0gZWxzZSBpZiAoIWNyYzFfb2sgJiYgY3JjMl9vaykgewpAQCAtMzg4LDcgKzM3Nyw2IEBACiAJCQlnZC0+ZW52X3ZhbGlkID0gMjsKIAkJZWxzZSAvKiBmbGFncyBhcmUgZXF1YWwgLSBhbG1vc3QgaW1wb3NzaWJsZSAqLwogCQkJZ2QtPmVudl92YWxpZCA9IDE7Ci0KIAl9CiAKIAlmcmVlKGVudl9wdHIpOwpAQCAtNDAxLDYgKzM4OSw3IEBACiAJZW52X2ZsYWdzID0gZXAtPmZsYWdzOwogCWVudl9pbXBvcnQoKGNoYXIgKillcCwgMCk7CiAKK2RvbmU6CiAJZnJlZSh0bXBfZW52MSk7CiAJZnJlZSh0bXBfZW52Mik7CiAKQEAgLTQxMiw3ICs0MDEsNyBAQAogICogZGV2aWNlIGkuZS4sIG5hbmRfZGV2X2Rlc2MgKyAwLiBUaGlzIGlzIGFsc28gdGhlIGJlaGF2aW91ciB1c2luZwogICogdGhlIG5ldyBOQU5EIGNvZGUuCiAgKi8KLXZvaWQgZW52X3JlbG9jYXRlX3NwZWMgKHZvaWQpCit2b2lkIGVudl9yZWxvY2F0ZV9zcGVjKHZvaWQpCiB7CiAjaWYgIWRlZmluZWQoRU5WX0lTX0VNQkVEREVEKQogCWludCByZXQ7CmRpZmYgLS1naXQgYS9jb21tb24vZW52X25vd2hlcmUuYyBiL2NvbW1vbi9lbnZfbm93aGVyZS5jCmluZGV4IDc1ZWY3OGQuLjhhM2NhMTkgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfbm93aGVyZS5jCisrKyBiL2NvbW1vbi9lbnZfbm93aGVyZS5jCkBAIC0zMSw5ICszMSw3IEBACiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi1lbnZfdCAqZW52X3B0ciA9IE5VTEw7Ci0KLWV4dGVybiB1Y2hhciBkZWZhdWx0X2Vudmlyb25tZW50W107CitlbnZfdCAqZW52X3B0cjsKIAogdm9pZCBlbnZfcmVsb2NhdGVfc3BlYyh2b2lkKQogewpAQCAtNDEsNyArMzksNyBAQAogCiB1Y2hhciBlbnZfZ2V0X2NoYXJfc3BlYyhpbnQgaW5kZXgpCiB7Ci0JcmV0dXJuICggKigodWNoYXIgKikoZ2QtPmVudl9hZGRyICsgaW5kZXgpKSApOworCXJldHVybiAqKCh1Y2hhciAqKShnZC0+ZW52X2FkZHIgKyBpbmRleCkpOwogfQogCiAvKgpAQCAtNTEsOCArNDksOCBAQAogICovCiBpbnQgZW52X2luaXQodm9pZCkKIHsKLQlnZC0+ZW52X2FkZHIgID0gKHVsb25nKSZkZWZhdWx0X2Vudmlyb25tZW50WzBdOwotCWdkLT5lbnZfdmFsaWQgPSAwOworCWdkLT5lbnZfYWRkcgk9ICh1bG9uZykmZGVmYXVsdF9lbnZpcm9ubWVudFswXTsKKwlnZC0+ZW52X3ZhbGlkCT0gMDsKIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9jb21tb24vZW52X252cmFtLmMgYi9jb21tb24vZW52X252cmFtLmMKaW5kZXggNTQ0Y2U0Ny4uNzI2ZWFhYyAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9udnJhbS5jCisrKyBiL2NvbW1vbi9lbnZfbnZyYW0uYwpAQCAtNTIsMjEgKzUyLDE5IEBACiAjaWZkZWYgQ09ORklHX1NZU19OVlJBTV9BQ0NFU1NfUk9VVElORQogZXh0ZXJuIHZvaWQgKm52cmFtX3JlYWQodm9pZCAqZGVzdCwgY29uc3QgbG9uZyBzcmMsIHNpemVfdCBjb3VudCk7CiBleHRlcm4gdm9pZCBudnJhbV93cml0ZShsb25nIGRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KTsKLWVudl90ICplbnZfcHRyID0gTlVMTDsKK2Vudl90ICplbnZfcHRyOwogI2Vsc2UKIGVudl90ICplbnZfcHRyID0gKGVudl90ICopQ09ORklHX0VOVl9BRERSOwogI2VuZGlmCiAKLWNoYXIgKiBlbnZfbmFtZV9zcGVjID0gIk5WUkFNIjsKLQotZXh0ZXJuIHVjaGFyIGRlZmF1bHRfZW52aXJvbm1lbnRbXTsKK2NoYXIgKmVudl9uYW1lX3NwZWMgPSAiTlZSQU0iOwogCiB1Y2hhciBlbnZfZ2V0X2NoYXJfc3BlYyhpbnQgaW5kZXgpCiB7CiAjaWZkZWYgQ09ORklHX1NZU19OVlJBTV9BQ0NFU1NfUk9VVElORQogCXVjaGFyIGM7CiAKLQludnJhbV9yZWFkKCZjLCBDT05GSUdfRU5WX0FERFIraW5kZXgsIDEpOworCW52cmFtX3JlYWQoJmMsIENPTkZJR19FTlZfQUREUiArIGluZGV4LCAxKTsKIAogCXJldHVybiBjOwogI2Vsc2UKQEAgLTgxLDcgKzc5LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TWVNfTlZSQU1fQUNDRVNTX1JPVVRJTkUpCiAJbnZyYW1fcmVhZChidWYsIENPTkZJR19FTlZfQUREUiwgQ09ORklHX0VOVl9TSVpFKTsKICNlbHNlCi0JbWVtY3B5KGJ1ZiwgKHZvaWQqKUNPTkZJR19FTlZfQUREUiwgQ09ORklHX0VOVl9TSVpFKTsKKwltZW1jcHkoYnVmLCAodm9pZCAqKUNPTkZJR19FTlZfQUREUiwgQ09ORklHX0VOVl9TSVpFKTsKICNlbmRpZgogCWVudl9pbXBvcnQoYnVmLCAxKTsKIH0KQEAgLTk0LDcgKzkyLDcgQEAKIAlpbnQJcmNvZGUgPSAwOwogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0dXJuIDE7CkBAIC0xMTAsNyArMTA4LDYgQEAKIAlyZXR1cm4gcmNvZGU7CiB9CiAKLQogLyoKICAqIEluaXRpYWxpemUgRW52aXJvbm1lbnQgdXNlCiAgKgpAQCAtMTIzLDE4ICsxMjAsMTkgQEAKIAl1Y2hhciBkYXRhW0VOVl9TSVpFXTsKIAogCW52cmFtX3JlYWQoJmNyYywgQ09ORklHX0VOVl9BRERSLCBzaXplb2YodWxvbmcpKTsKLQludnJhbV9yZWFkKGRhdGEsIENPTkZJR19FTlZfQUREUitzaXplb2YodWxvbmcpLCBFTlZfU0laRSk7CisJbnZyYW1fcmVhZChkYXRhLCBDT05GSUdfRU5WX0FERFIgKyBzaXplb2YodWxvbmcpLCBFTlZfU0laRSk7CiAKIAlpZiAoY3JjMzIoMCwgZGF0YSwgRU5WX1NJWkUpID09IGNyYykgewotCQlnZC0+ZW52X2FkZHIgID0gKHVsb25nKUNPTkZJR19FTlZfQUREUiArIHNpemVvZihsb25nKTsKKwkJZ2QtPmVudl9hZGRyCT0gKHVsb25nKUNPTkZJR19FTlZfQUREUiArIHNpemVvZihsb25nKTsKICNlbHNlCiAJaWYgKGNyYzMyKDAsIGVudl9wdHItPmRhdGEsIEVOVl9TSVpFKSA9PSBlbnZfcHRyLT5jcmMpIHsKLQkJZ2QtPmVudl9hZGRyICA9ICh1bG9uZykmKGVudl9wdHItPmRhdGEpOworCQlnZC0+ZW52X2FkZHIJPSAodWxvbmcpJmVudl9wdHItPmRhdGE7CiAjZW5kaWYKLQkJZ2QtPmVudl92YWxpZCA9IDE7CisJCWdkLT5lbnZfdmFsaWQJPSAxOwogCX0gZWxzZSB7Ci0JCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07Ci0JCWdkLT5lbnZfdmFsaWQgPSAwOworCQlnZC0+ZW52X2FkZHIJPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07CisJCWdkLT5lbnZfdmFsaWQJPSAwOwogCX0KLQlyZXR1cm4gKDApOworCisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9jb21tb24vZW52X29uZW5hbmQuYyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCmluZGV4IDVlMDRhMDYuLjBhZDJmYzcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfb25lbmFuZC5jCisrKyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCkBAIC0zMSwzMSArMzEsMjIgQEAKICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxzZWFyY2guaD4KICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG9uZW5hbmRfdWJvb3QuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KIAotZXh0ZXJuIHN0cnVjdCBtdGRfaW5mbyBvbmVuYW5kX210ZDsKLWV4dGVybiBzdHJ1Y3Qgb25lbmFuZF9jaGlwIG9uZW5hbmRfY2hpcDsKLQotLyogUmVmZXJlbmNlcyB0byBuYW1lcyBpbiBlbnZfY29tbW9uLmMgKi8KLWV4dGVybiB1Y2hhciBkZWZhdWx0X2Vudmlyb25tZW50W107Ci0KIGNoYXIgKmVudl9uYW1lX3NwZWMgPSAiT25lTkFORCI7CiAKICNkZWZpbmUgT05FTkFORF9NQVhfRU5WX1NJWkUJNDA5NgogI2RlZmluZSBPTkVOQU5EX0VOVl9TSVpFKG10ZCkJKE9ORU5BTkRfTUFYX0VOVl9TSVpFIC0gRU5WX0hFQURFUl9TSVpFKQogCi0jaWZkZWYgRU5WX0lTX0VNQkVEREVECi1leHRlcm4gdWNoYXIgZW52aXJvbm1lbnRbXTsKLSNlbmRpZiAvKiBFTlZfSVNfRU1CRURERUQgKi8KLQogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKIHVjaGFyIGVudl9nZXRfY2hhcl9zcGVjKGludCBpbmRleCkKIHsKLQlyZXR1cm4gKCooKHVjaGFyICopKGdkLT5lbnZfYWRkciArIGluZGV4KSkpOworCXJldHVybiAqKCh1Y2hhciAqKShnZC0+ZW52X2FkZHIgKyBpbmRleCkpOwogfQogCiB2b2lkIGVudl9yZWxvY2F0ZV9zcGVjKHZvaWQpCkBAIC02Nyw3ICs1OCw3IEBACiAJaW50IHJjOwogCXNpemVfdCByZXRsZW47CiAjaWZkZWYgRU5WX0lTX0VNQkVEREVECi0JY2hhciAqYnVmID0gKGNoYXIgKikmZW52aXJvbm1lbnRbMF07CisJY2hhciAqYnVmID0gKGNoYXIgKikmZW52aXJvbm1lbnQ7CiAjZWxzZQogCWxvZmZfdCBlbnZfYWRkciA9IENPTkZJR19FTlZfQUREUjsKIAljaGFyIG9uZW5hbmRfZW52W09ORU5BTkRfTUFYX0VOVl9TSVpFXTsKQEAgLTgzLDcgKzc0LDcgQEAKIAlpZiAobXRkLT53cml0ZXNpemUpCiAJCS8qIElnbm9yZSByZWFkIGZhaWwgKi8KIAkJbXRkLT5yZWFkKG10ZCwgZW52X2FkZHIsIE9ORU5BTkRfTUFYX0VOVl9TSVpFLAotCQkJICAgICAmcmV0bGVuLCAodV9jaGFyICopYnVmKTsKKwkJCQkmcmV0bGVuLCAodV9jaGFyICopYnVmKTsKIAllbHNlCiAJCW10ZC0+d3JpdGVzaXplID0gTUFYX09ORU5BTkRfUEFHRVNJWkU7CiAjZW5kaWYgLyogIUVOVl9JU19FTUJFRERFRCAqLwpAQCAtMTA5LDcgKzEwMCw3IEBACiAJfTsKIAogCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSk7CisJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCXJldHVybiAxOwpAQCAtMTMzLDcgKzEyNCw3IEBACiAJfQogCiAJaWYgKG10ZC0+d3JpdGUobXRkLCBlbnZfYWRkciwgT05FTkFORF9NQVhfRU5WX1NJWkUsICZyZXRsZW4sCi0JICAgICAodV9jaGFyICopJmVudl9uZXcpKSB7CisJCQkodV9jaGFyICopJmVudl9uZXcpKSB7CiAJCXByaW50ZigiT25lTkFORDogd3JpdGUgZmFpbGVkIGF0IDB4JWxseFxuIiwgaW5zdHIuYWRkcik7CiAJCXJldHVybiAyOwogCX0KQEAgLTE0NCw3ICsxMzUsNyBAQAogaW50IGVudl9pbml0KHZvaWQpCiB7CiAJLyogdXNlIGRlZmF1bHQgKi8KLQlnZC0+ZW52X2FkZHIgPSAodWxvbmcpICYgZGVmYXVsdF9lbnZpcm9ubWVudFswXTsKKwlnZC0+ZW52X2FkZHIgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07CiAJZ2QtPmVudl92YWxpZCA9IDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2NvbW1vbi9lbnZfc2YuYyBiL2NvbW1vbi9lbnZfc2YuYwppbmRleCBkM2IzNmQwLi41OTJiODcwIDEwMDY0NAotLS0gYS9jb21tb24vZW52X3NmLmMKKysrIGIvY29tbW9uL2Vudl9zZi5jCkBAIC0zNiw3ICszNiw3IEBACiAjIGRlZmluZSBDT05GSUdfRU5WX1NQSV9CVVMJMAogI2VuZGlmCiAjaWZuZGVmIENPTkZJR19FTlZfU1BJX0NTCi0jIGRlZmluZSBDT05GSUdfRU5WX1NQSV9DUwkJMAorIyBkZWZpbmUgQ09ORklHX0VOVl9TUElfQ1MJMAogI2VuZGlmCiAjaWZuZGVmIENPTkZJR19FTlZfU1BJX01BWF9IWgogIyBkZWZpbmUgQ09ORklHX0VOVl9TUElfTUFYX0haCTEwMDAwMDAKQEAgLTQ2LDE5ICs0NiwxNiBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQKLXN0YXRpYyB1bG9uZyBlbnZfb2Zmc2V0ID0gQ09ORklHX0VOVl9PRkZTRVQ7Ci1zdGF0aWMgdWxvbmcgZW52X25ld19vZmZzZXQgPSBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQ7CitzdGF0aWMgdWxvbmcgZW52X29mZnNldAkJPSBDT05GSUdfRU5WX09GRlNFVDsKK3N0YXRpYyB1bG9uZyBlbnZfbmV3X29mZnNldAk9IENPTkZJR19FTlZfT0ZGU0VUX1JFRFVORDsKIAotI2RlZmluZSBBQ1RJVkVfRkxBRyAgIDEKLSNkZWZpbmUgT0JTT0xFVEVfRkxBRyAwCisjZGVmaW5lIEFDVElWRV9GTEFHCTEKKyNkZWZpbmUgT0JTT0xFVEVfRkxBRwkwCiAjZW5kaWYgLyogQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EICovCiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi0vKiByZWZlcmVuY2VzIHRvIG5hbWVzIGluIGVudl9jb21tb24uYyAqLwotZXh0ZXJuIHVjaGFyIGRlZmF1bHRfZW52aXJvbm1lbnRbXTsKLQotY2hhciAqIGVudl9uYW1lX3NwZWMgPSAiU1BJIEZsYXNoIjsKK2NoYXIgKmVudl9uYW1lX3NwZWMgPSAiU1BJIEZsYXNoIjsKIAogc3RhdGljIHN0cnVjdCBzcGlfZmxhc2ggKmVudl9mbGFzaDsKIApAQCAtNjgsMTcgKzY1LDEzIEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19FTlZfT0ZGU0VUX1JFRFVORCkKLQogaW50IHNhdmVlbnYodm9pZCkKIHsKIAllbnZfdAllbnZfbmV3OwogCXNzaXplX3QJbGVuOwotCWNoYXIJKnJlczsKLQl1MzIJc2F2ZWRfc2l6ZSwgc2F2ZWRfb2Zmc2V0OwotCWNoYXIJKnNhdmVkX2J1ZmZlciA9IE5VTEw7Ci0JdTMyCXNlY3RvciA9IDE7CisJY2hhcgkqcmVzLCAqc2F2ZWRfYnVmZmVyID0gTlVMTCwgZmxhZyA9IE9CU09MRVRFX0ZMQUc7CisJdTMyCXNhdmVkX3NpemUsIHNhdmVkX29mZnNldCwgc2VjdG9yID0gMTsKIAlpbnQJcmV0OwotCWNoYXIJZmxhZyA9IE9CU09MRVRFX0ZMQUc7CiAKIAlpZiAoIWVudl9mbGFzaCkgewogCQllbnZfZmxhc2ggPSBzcGlfZmxhc2hfcHJvYmUoQ09ORklHX0VOVl9TUElfQlVTLApAQCAtOTEsMTMgKzg0LDEzIEBACiAJfQogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0dXJuIDE7CiAJfQotCWVudl9uZXcuY3JjICAgPSBjcmMzMigwLCBlbnZfbmV3LmRhdGEsIEVOVl9TSVpFKTsKLQllbnZfbmV3LmZsYWdzID0gQUNUSVZFX0ZMQUc7CisJZW52X25ldy5jcmMJPSBjcmMzMigwLCBlbnZfbmV3LmRhdGEsIEVOVl9TSVpFKTsKKwllbnZfbmV3LmZsYWdzCT0gQUNUSVZFX0ZMQUc7CiAKIAlpZiAoZ2QtPmVudl92YWxpZCA9PSAxKSB7CiAJCWVudl9uZXdfb2Zmc2V0ID0gQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EOwpAQCAtMTQ4LDIxICsxNDEsMjEgQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLQlyZXQgPSBzcGlfZmxhc2hfd3JpdGUoZW52X2ZsYXNoLAotCQllbnZfb2Zmc2V0ICsgb2Zmc2V0b2YoZW52X3QsIGZsYWdzKSwKLQkJc2l6ZW9mKGVudl9uZXcuZmxhZ3MpLCAmZmxhZyk7CisJcmV0ID0gc3BpX2ZsYXNoX3dyaXRlKGVudl9mbGFzaCwgZW52X29mZnNldCArIG9mZnNldG9mKGVudl90LCBmbGFncyksCisJCQkJc2l6ZW9mKGVudl9uZXcuZmxhZ3MpLCAmZmxhZyk7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwogCiAJcHV0cygiZG9uZVxuIik7CiAKLQlnZC0+ZW52X3ZhbGlkID0gKGdkLT5lbnZfdmFsaWQgPT0gMiA/IDEgOiAyKTsKKwlnZC0+ZW52X3ZhbGlkID0gZ2QtPmVudl92YWxpZCA9PSAyID8gMSA6IDI7CiAKIAlwcmludGYoIlZhbGlkIGVudmlyb25tZW50OiAlZFxuIiwgKGludClnZC0+ZW52X3ZhbGlkKTsKIAogIGRvbmU6CiAJaWYgKHNhdmVkX2J1ZmZlcikKIAkJZnJlZShzYXZlZF9idWZmZXIpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ4LDE4ICsyNDEsMTQgQEAKIG91dDoKIAlmcmVlKHRtcF9lbnYxKTsKIAlmcmVlKHRtcF9lbnYyKTsKLQotCXJldHVybjsKIH0KICNlbHNlCiBpbnQgc2F2ZWVudih2b2lkKQogewotCXUzMiBzYXZlZF9zaXplLCBzYXZlZF9vZmZzZXQ7Ci0JY2hhciAqc2F2ZWRfYnVmZmVyID0gTlVMTDsKLQl1MzIgc2VjdG9yID0gMTsKLQlpbnQgcmV0ID0gMTsKKwl1MzIJc2F2ZWRfc2l6ZSwgc2F2ZWRfb2Zmc2V0LCBzZWN0b3IgPSAxOworCWNoYXIJKnJlcywgKnNhdmVkX2J1ZmZlciA9IE5VTEw7CisJaW50CXJldCA9IDE7CiAJZW52X3QJZW52X25ldzsKLQljaGFyCSpyZXM7CiAJc3NpemVfdAlsZW47CiAKIAlpZiAoIWVudl9mbGFzaCkgewpAQCAtMjc3LDkgKzI2Niw5IEBACiAJCXNhdmVkX3NpemUgPSBDT05GSUdfRU5WX1NFQ1RfU0laRSAtIENPTkZJR19FTlZfU0laRTsKIAkJc2F2ZWRfb2Zmc2V0ID0gQ09ORklHX0VOVl9PRkZTRVQgKyBDT05GSUdfRU5WX1NJWkU7CiAJCXNhdmVkX2J1ZmZlciA9IG1hbGxvYyhzYXZlZF9zaXplKTsKLQkJaWYgKCFzYXZlZF9idWZmZXIpIHsKKwkJaWYgKCFzYXZlZF9idWZmZXIpCiAJCQlnb3RvIGRvbmU7Ci0JCX0KKwogCQlyZXQgPSBzcGlfZmxhc2hfcmVhZChlbnZfZmxhc2gsIHNhdmVkX29mZnNldCwKIAkJCXNhdmVkX3NpemUsIHNhdmVkX2J1ZmZlcik7CiAJCWlmIChyZXQpCkBAIC0yOTMsNyArMjgyLDcgQEAKIAl9CiAKIAlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlnb3RvIGRvbmU7CkBAIC0zMjUsNiArMzE0LDcgQEAKICBkb25lOgogCWlmIChzYXZlZF9idWZmZXIpCiAJCWZyZWUoc2F2ZWRfYnVmZmVyKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0OCw3ICszMzgsNiBAQAogCX0KIAogCXJldCA9IGVudl9pbXBvcnQoYnVmLCAxKTsKLQogCWlmIChyZXQpCiAJCWdkLT5lbnZfdmFsaWQgPSAxOwogb3V0OgpkaWZmIC0tZ2l0IGEvY29tbW9uL2ZkdF9zdXBwb3J0LmMgYi9jb21tb24vZmR0X3N1cHBvcnQuYwppbmRleCBiZGRhNjRkLi41OTNmMTZjIDEwMDY0NAotLS0gYS9jb21tb24vZmR0X3N1cHBvcnQuYworKysgYi9jb21tb24vZmR0X3N1cHBvcnQuYwpAQCAtNDksOCArNDksOCBAQAogICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZmluZCBhIG5vZGUgYW5kIHJldHVybiBpdCdzIHByb3BlcnR5IG9yIGEKICAqIGRlZmF1bHQgdmFsdWUgaWYgaXQgZG9lc24ndCBleGlzdC4KICAqLwotdTMyIGZkdF9nZXRwcm9wX3UzMl9kZWZhdWx0KHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJvcCwKLQkJCQljb25zdCB1MzIgZGZsdCkKK3UzMiBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdChjb25zdCB2b2lkICpmZHQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJY29uc3QgY2hhciAqcHJvcCwgY29uc3QgdTMyIGRmbHQpCiB7CiAJY29uc3QgdTMyICp2YWw7CiAJaW50IG9mZjsKQEAgLTYxLDcgKzYxLDcgQEAKIAogCXZhbCA9IGZkdF9nZXRwcm9wKGZkdCwgb2ZmLCBwcm9wLCBOVUxMKTsKIAlpZiAodmFsKQotCQlyZXR1cm4gKnZhbDsKKwkJcmV0dXJuIGZkdDMyX3RvX2NwdSgqdmFsKTsKIAllbHNlCiAJCXJldHVybiBkZmx0OwogfQpAQCAtMzcyLDcgKzM3Miw3IEBACiAJY29uc3QgdTMyICpjZWxsOwogCiAJY2VsbCA9IGZkdF9nZXRwcm9wKGJsb2IsIDAsIG5yX2NlbGxzX25hbWUsIE5VTEwpOwotCWlmIChjZWxsICYmICpjZWxsID09IDIpCisJaWYgKGNlbGwgJiYgZmR0MzJfdG9fY3B1KCpjZWxsKSA9PSAyKQogCQlyZXR1cm4gODsKIAogCXJldHVybiA0OwpkaWZmIC0tZ2l0IGEvY29tbW9uL2h1c2guYyBiL2NvbW1vbi9odXNoLmMKaW5kZXggMjQ5NWE2ZC4uZThlMjRkNyAxMDA2NDQKLS0tIGEvY29tbW9uL2h1c2guYworKysgYi9jb21tb24vaHVzaC5jCkBAIC0xMDAwLDcgKzEwMDAsNiBAQAogCWZmbHVzaChzdGRvdXQpOwogCWktPnAgPSB0aGVfY29tbWFuZDsKICNlbHNlCi0JZXh0ZXJuIGNoYXIgY29uc29sZV9idWZmZXJbXTsKIAlpbnQgbjsKIAlzdGF0aWMgY2hhciB0aGVfY29tbWFuZFtDT05GSUdfU1lTX0NCU0laRV07CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9sY2QuYyBiL2NvbW1vbi9sY2QuYwppbmRleCBkOWNiOGNhLi42MzEzZWMwIDEwMDY0NAotLS0gYS9jb21tb24vbGNkLmMKKysrIGIvY29tbW9uL2xjZC5jCkBAIC01NywxMiArNTcsMTQgQEAKIC8qICoqIEZPTlQgREFUQQkJCQkJCQkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8dmlkZW9fZm9udC5oPgkJLyogR2V0IGZvbnQgZGF0YSwgd2lkdGggYW5kIGhlaWdodAkqLworI2luY2x1ZGUgPHZpZGVvX2ZvbnRfZGF0YS5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogKiogTE9HTyBEQVRBCQkJCQkJCQkqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZmRlZiBDT05GSUdfTENEX0xPR08KICMgaW5jbHVkZSA8Ym1wX2xvZ28uaD4JCS8qIEdldCBsb2dvIGRhdGEsIHdpZHRoIGFuZCBoZWlnaHQJKi8KKyMgaW5jbHVkZSA8Ym1wX2xvZ29fZGF0YS5oPgogIyBpZiAoQ09OU09MRV9DT0xPUl9XSElURSA+PSBCTVBfTE9HT19PRkZTRVQpICYmIChMQ0RfQlBQICE9IExDRF9DT0xPUjE2KQogIyAgZXJyb3IgRGVmYXVsdCBDb2xvciBNYXAgb3ZlcmxhcHMgd2l0aCBMb2dvIENvbG9yIE1hcAogIyBlbmRpZgpAQCAtNzgsNyArODAsNiBAQAogCiBzdGF0aWMgaW50IGxjZF9pbml0ICh2b2lkICpsY2RiYXNlKTsKIAotc3RhdGljIGludCBsY2RfY2xlYXIgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pOwogc3RhdGljIHZvaWQgKmxjZF9sb2dvICh2b2lkKTsKIAogc3RhdGljIGludCBsY2RfZ2V0Ymdjb2xvciAodm9pZCk7CkBAIC0zNTMsNyArMzU0LDE0IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IGxjZF9jbGVhciAoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKK3N0YXRpYworaW50IGRvX2xjZF9jbGVhcihjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSkKK3sKKwlsY2RfY2xlYXIoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsY2RfY2xlYXIodm9pZCkKIHsKICNpZiBMQ0RfQlBQID09IExDRF9NT05PQ0hST01FCiAJLyogU2V0dGluZyB0aGUgcGFsZXR0ZSAqLwpAQCAtMzk0LDEyICs0MDIsMTAgQEAKIAogCWNvbnNvbGVfY29sID0gMDsKIAljb25zb2xlX3JvdyA9IDA7Ci0KLQlyZXR1cm4gKDApOwogfQogCiBVX0JPT1RfQ01EKAotCWNscywJMSwJMSwJbGNkX2NsZWFyLAorCWNscywJMSwJMSwJZG9fbGNkX2NsZWFyLAogCSJjbGVhciBzY3JlZW4iLAogCSIiCiApOwpAQCAtNDEzLDcgKzQxOSw3IEBACiAKIAlsY2RfY3RybF9pbml0IChsY2RiYXNlKTsKIAlsY2RfaXNfZW5hYmxlZCA9IDE7Ci0JbGNkX2NsZWFyIChOVUxMLCAxLCAxLCBOVUxMKTsJLyogZHVtbXkgYXJncyAqLworCWxjZF9jbGVhcigpOwogCWxjZF9lbmFibGUgKCk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjb25zb2xlICovCmRpZmYgLS1naXQgYS9jb21tb24vbW9kZW0uYyBiL2NvbW1vbi9tb2RlbS5jCmluZGV4IGEwMTdiMjkuLmUzN2UxZWEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9tb2RlbS5jCisrKyBiL2NvbW1vbi9tb2RlbS5jCkBAIC02Miw3ICs2Miw2IEBACiAJY2hhciBlbnZfc3RyWzE2XTsKIAljaGFyICppbml0X3N0cjsKIAlpbnQgaTsKLQlleHRlcm4gY2hhciBjb25zb2xlX2J1ZmZlcltdOwogCWV4dGVybiB2b2lkIGVuYWJsZV9wdXRjKHZvaWQpOwogCWV4dGVybiBpbnQgaHdmbG93X29ub2ZmKGludCk7CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi91c2IuYyBiL2NvbW1vbi91c2IuYwppbmRleCBiZWQ1MTE2Li40NDE4YzcwIDEwMDY0NAotLS0gYS9jb21tb24vdXNiLmMKKysrIGIvY29tbW9uL3VzYi5jCkBAIC0yNjMsMTggKzI2MywyNCBAQAogCQlyZXR1cm4gZGV2LT5lcG1heHBhY2tldGluWygocGlwZT4+MTUpICYgMHhmKV07CiB9CiAKLS8qIFRoZSByb3V0aW5lIHVzYl9zZXRfbWF4cGFja2V0X2VwKCkgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGxvb3Agb2Ygcm91dGluZQorLyoKKyAqIFRoZSByb3V0aW5lIHVzYl9zZXRfbWF4cGFja2V0X2VwKCkgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGxvb3Agb2Ygcm91dGluZQogICogdXNiX3NldF9tYXhwYWNrZXQoKSwgYmVjYXVzZSB0aGUgb3B0aW1pemVyIG9mIEdDQyA0LnggY2hva2VzIG9uIHRoaXMgcm91dGluZQogICogd2hlbiBpdCBpcyBpbmxpbmVkIGluIDEgc2luZ2xlIHJvdXRpbmUuIFdoYXQgaGFwcGVucyBpcyB0aGF0IHRoZSByZWdpc3RlciByMwogICogaXMgdXNlZCBhcyBsb29wLWNvdW50ICdpJywgYnV0IGdldHMgb3ZlcndyaXR0ZW4gbGF0ZXIgb24uCiAgKiBUaGlzIGlzIGNsZWFybHkgYSBjb21waWxlciBidWcsIGJ1dCBpdCBpcyBlYXNpZXIgdG8gd29ya2Fyb3VuZCBpdCBoZXJlIHRoYW4KICAqIHRvIHVwZGF0ZSB0aGUgY29tcGlsZXIgKE9jY3VycyB3aXRoIGF0IGxlYXN0IHNldmVyYWwgR0NDIDQuezEsMn0seAogICogQ29kZVNvdXJjZXJ5IGNvbXBpbGVycyBsaWtlIGUuZy4gMjAwN3EzLCAyMDA4cTEsIDIwMDhxMyBsaXRlIGVkaXRpb25zIG9uIEFSTSkKKyAqCisgKiBOT1RFOiBTaW1pbGFyIGJlaGF2aW91ciB3YXMgb2JzZXJ2ZWQgd2l0aCBHQ0M0LjYgb24gQVJNdjUuCiAgKi8KIHN0YXRpYyB2b2lkICBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCi11c2Jfc2V0X21heHBhY2tldF9lcChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwKQordXNiX3NldF9tYXhwYWNrZXRfZXAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGlmX2lkeCwgaW50IGVwX2lkeCkKIHsKIAlpbnQgYjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwOworCisJZXAgPSAmZGV2LT5jb25maWcuaWZfZGVzY1tpZl9pZHhdLmVwX2Rlc2NbZXBfaWR4XTsKIAogCWIgPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKIApAQCAtMzEzLDggKzMxOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jb25maWcuZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKQogCQlmb3IgKGlpID0gMDsgaWkgPCBkZXYtPmNvbmZpZy5pZl9kZXNjW2ldLmRlc2MuYk51bUVuZHBvaW50czsgaWkrKykKLQkJCXVzYl9zZXRfbWF4cGFja2V0X2VwKGRldiwKLQkJCQkJICAmZGV2LT5jb25maWcuaWZfZGVzY1tpXS5lcF9kZXNjW2lpXSk7CisJCQl1c2Jfc2V0X21heHBhY2tldF9lcChkZXYsIGksIGlpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5tMjggYi9kb2MvUkVBRE1FLm0yOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ5Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5tMjgKQEAgLTAsMCArMSwyMjMgQEAKK0RFTlggTTI4RVZLCis9PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgREVOWCBNMjgvTTI4RVZLIFUtQm9vdCBwb3J0LiBUaGlzIGRvY3VtZW50IG1vc3RseQorY292ZXJzIHRvcGljcyByZWxhdGVkIHRvIG1ha2luZyB0aGUgbW9kdWxlL2JvYXJkIGJvb3RhYmxlLgorCitUZXJtaW5vbG9neQorLS0tLS0tLS0tLS0KKworVGhlIGRvbGxhciBzeW1ib2wgKCQpIGludHJvZHVjZXMgYSBzbmlwcGVkIG9mIHNoZWxsIGNvZGUuIFRoaXMgc2hhbGwgYmUgdHlwZWQKK2ludG8gdGhlIHVuaXggY29tbWFuZCBwcm9tcHQgaW4gVS1Cb290IHNvdXJjZSBjb2RlIHJvb3QgZGlyZWN0b3J5LgorCitUaGUgKD0+KSBpbnRyb2R1Y2VzIGEgc25pcHBlZCBvZiBjb2RlIHRoYXQgc2hvdWxkIGJ5IHR5cGVkIGludG8gVS1Cb290IGNvbW1hbmQKK3Byb21wdC4KKworQ29udGVudHMKKy0tLS0tLS0tCisKKzApIEZpbGVzIG9mIHRoZSBNMjgvTTI4RVZLIHBvcnQKKzEpIFByZXJlcXVpc2l0ZXMKKzIpIENvbXBpbGluZyBVLUJvb3QgZm9yIE0yOAorMykgSW5zdGFsbGF0aW9uIG9mIFUtQm9vdCBmb3IgTTI4RVZLIHRvIFNEIGNhcmQKKzQpIEluc3RhbGxhdGlvbiBvZiBVLUJvb3QgZm9yIE0yOCB0byBOQU5EIGZsYXNoCisKKzApIEZpbGVzIG9mIHRoZSBNMjgvTTI4RVZLIHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4LwktIFRoZSBDUFUgc3VwcG9ydCBjb2RlIGZvciB0aGUgRnJlZXNjYWxlIGkuTVgyOAorYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4LwktIEhlYWRlciBmaWxlcyBmb3IgdGhlIEZyZWVzY2FsZSBpLk1YMjgKK2JvYXJkL2RlbngvbTI4ZXZrLwkJLSBNMjhFVksgYm9hcmQgc3BlY2lmaWMgZmlsZXMKK2luY2x1ZGUvY29uZmlncy9tMjhldmsuaAktIE0yOEVWSyBjb25maWd1cmF0aW9uIGZpbGUKKworMSkgUHJlcmVxdWlzaXRlcworLS0tLS0tLS0tLS0tLS0tLQorCitUbyBtYWtlIHRoZSBNMjggbW9kdWxlIG9yIHRoZSBNMjggbW9kdWxlIG9yIE0yOEVWSyBib2FyZCBib290YWJsZSwgc29tZSB0b29scworYXJlIG5lY2Vzc2FyeS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgImVsZnRvc2IiIHRvb2wgZGlzdHJpYnV0ZWQgYnkgRnJlZXNjYWxlCitTZW1pY29uZHVjdG9yLiBUaGUgb3RoZXIgdG9vbCBpcyB0aGUgIm14c2Jvb3QiIHRvb2wgZm91bmQgaW4gVS1Cb290IHNvdXJjZSB0cmVlLgorCitGaXJzdGx5LCBvYnRhaW4gdGhlIGVsZnRvc2IgYXJjaGl2ZSBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246CisKKwlodHRwOi8vZm9zcy5kb3JlZGV2ZWxvcG1lbnQuZGsvbWlycm9ycy9pbXgvZWxmdG9zYi0xMC4xMi4wMS50YXIuZ3oKKworV2UgdXNlIGEgJFZFUiB2YXJpYWJsZSBoZXJlIHRvIGRlbm90ZSB0aGUgY3VycmVudCB2ZXJzaW9uLiBBdCB0aGUgdGltZSBvZgord3JpdGluZyBvZiB0aGlzIGRvY3VtZW50LCB0aGF0IGlzICIxMC4xMi4wMSIuIFRvIG9idGFpbiB0aGUgZmlsZSBmcm9tIGNvbW1hbmQKK2xpbmUsIHVzZToKKworCSQgVkVSPSIxMC4xMi4wMSIKKwkkIHdnZXQgaHR0cDovL2Zvc3MuZG9yZWRldmVsb3BtZW50LmRrL21pcnJvcnMvaW14L2VsZnRvc2ItJHtWRVJ9LnRhci5negorCitFeHRyYWN0IHRoZSBmaWxlOgorCisJJCB0YXIgeHpmIGVsZnRvc2ItJHtWRVJ9LnRhci5negorCitDb21waWxlIHRoZSBmaWxlLiBXZSBuZWVkIHRvIG1hbnVhbGx5IHRlbGwgdGhlIGxpbmtlciB0byB1c2UgYWxzbyBsaWJtOgorCisJJCBjZCBlbGZ0b3NiLSR7VkVSfS8KKwkkIG1ha2UgTElCUz0iLWxzdGRjKysgLWxtIiBlbGZ0b3NiCisKK09wdGlvbmFsbHksIHJlbW92ZSBkZWJ1Z2dpbmcgc3ltYm9scyBmcm9tIGVsZnRvc2I6CisKKwkkIHN0cmlwIGJsZC9saW51eC9lbGZ0b3NiCisKK0ZpbmFsbHksIGluc3RhbGwgdGhlICJlbGZ0b3NiIiBiaW5hcnkuIFRoZSAiaW5zdGFsbCIgdGFyZ2V0IGlzIG1pc3NpbmcsIHNvIGp1c3QKK2NvcHkgdGhlIGJpbmFyeSBieSBoYW5kOgorCisJJCBzdWRvIGNwIGJsZC9saW51eC9lbGZ0b3NiIC91c3IvbG9jYWwvYmluLworCitNYWtlIHN1cmUgdGhlICJlbGZ0b3NiIiBiaW5hcnkgY2FuIGJlIGZvdW5kIGluIHlvdXIgJFBBVEgsIGluIHRoaXMgY2FzZSB0aGlzCittZWFucyAiL3Vzci9sb2NhbC9iaW4vIiBoYXMgdG8gYmUgaW4geW91ciAkUEFUSC4KKworMikgQ29tcGlsaW5nIFUtQm9vdCBmb3IgTTI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29tcGlsaW5nIHRoZSBVLUJvb3QgZm9yIE0yOCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRvbmUgYXMgY29tcGlsaW5nIFUtQm9vdAorZm9yIGFueSBvdGhlciBBUk0gZGV2aWNlLiBGb3IgY3Jvc3MtY29tcGlsZXIgc2V0dXAsIHBsZWFzZSByZWZlciB0byBFTERLNS4wCitkb2N1bWVudGF0aW9uLiBGaXJzdCwgY2xlYW4gdXAgdGhlIHNvdXJjZSBjb2RlOgorCisJJCBtYWtlIG1ycHJvcGVyCisKK05leHQsIGNvbmZpZ3VyZSBVLUJvb3QgZm9yIE0yOEVWSzoKKworCSQgbWFrZSBtMjhldmtfY29uZmlnCisKK0xhc3RseSwgY29tcGlsZSBVLUJvb3QgYW5kIHByZXBhcmUgYSAiQm9vdFN0cmVhbSIuIFRoZSAiQm9vdFN0cmVhbSIgaXMgYSBzcGVjaWFsCit0eXBlIG9mIGZpbGUsIHdoaWNoIHRoZSBpLk1YMjggQ1BVIGNhbiBib290LiBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIGZvbGxvd2luZworY29tbWFuZDoKKworCSQgbWFrZSB1LWJvb3Quc2IKKworSElOVDogVG8gc3BlZWQtdXAgdGhlIGJ1aWxkIHByb2Nlc3MsIHlvdSBjYW4gYWRkIC1qPE4+LCB3aGVyZSBOIGlzIG51bWJlciBvZgorICAgICAgY29tcGlsZXIgaW5zdGFuY2VzIHRoYXQnbGwgcnVuIGluIHBhcmFsbGVsLgorCitUaGUgY29kZSBwcm9kdWNlcyAidS1ib290LnNiIiBmaWxlLiBUaGlzIGZpbGUgbmVlZHMgdG8gYmUgYXVnbWVudGVkIHdpdGggYQorcHJvcGVyIGhlYWRlciB0byBhbGxvdyBzdWNjZXNzZnVsIGJvb3QgZnJvbSBTRCBvciBOQU5ELiBBZGRpbmcgdGhlIGhlYWRlciBpcworZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgY2hhcHRlcnMuCisKKzMpIEluc3RhbGxhdGlvbiBvZiBVLUJvb3QgZm9yIE0yOEVWSyB0byBTRCBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBib290IGFuIE0yOCBmcm9tIFNELCBzZXQgdGhlIGJvb3QgbW9kZSBESVAgc3dpdGNoZXMgYWNjb3JkaW5nIHRvIGkuTVgyOAorbWFudWFsIGNoYXB0ZXIgMTIuMi4xIChUYWJsZSAxMi0yKSwgUE9SVD1TU1AwLCBTRC9NTUMgbWFzdGVyIG9uIFNTUDAsIDMuM1YuCisKK0FuIFNEIGNhcmQgdGhlIGkuTVgyOCBDUFUgY2FuIHVzZSB0byBib290IFUtQm9vdCBtdXN0IGNvbnRhaW4gYSBET1MgcGFydGl0aW9uCit0YWJsZSwgd2hpY2ggaW4gdHVybiBjYXJyaWVzIGEgcGFydGl0aW9uIG9mIHNwZWNpYWwgdHlwZSBhbmQgd2hpY2ggY29udGFpbnMgYQorc3BlY2lhbCBoZWFkZXIuIFRoZSByZXN0IG9mIHBhcnRpdGlvbnMgaW4gdGhlIERPUyBwYXJ0aXRpb24gdGFibGUgY2FuIGJlIHVzZWQKK2J5IHRoZSB1c2VyLgorCitUbyBwcmVwYXJlIHN1Y2ggcGFydGl0aW9uLCB1c2UgeW91ciBmYXZvdXJpdGUgcGFydGl0aW9uaW5nIHRvb2wuIFRoZSBwYXJ0aXRpb24KK211c3QgaGF2ZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisKKwkqIFN0YXJ0IHNlY3RvciAuLi4uLi4uLi4uIHNlY3RvciAyMDQ4CisJKiBQYXJ0aXRpb24gc2l6ZSAuLi4uLi4uLiBhdCBsZWFzdCAxMDI0IGtiCisJKiBQYXJ0aXRpb24gdHlwZSAuLi4uLi4uLiAweDUzIChzb21ldGltZXMgIk9uVHJhY2sgRE02IEF1eDMiKQorCitGb3IgZXhhbXBsZSBpbiBMaW51eCBmZGlzaywgdGhlIHNlcXVlbmNlIGZvciBhIGNsZWFyIGNhcmQgaXMgdGhlIGZvbGxvd2luZzoKKworCSogbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gY3JlYXRlIGEgY2xlYXIgcGFydGl0aW9uIHRhYmxlCisJKiBuIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiBjcmVhdGUgbmV3IHBhcnRpdGlvbgorCQkqIHAgLi4uLi4uLi4uLi4uLiBwcmltYXJ5IHBhcnRpdGlvbgorCQkqIDEgLi4uLi4uLi4uLi4uLiBmaXJzdCBwYXJ0aXRpb24KKwkJKiAyMDQ4IC4uLi4uLi4uLi4gZmlyc3Qgc2VjdG9yIGlzIDIwNDgKKwkJKiArMU0gLi4uLi4uLi4uLi4gbWFrZSB0aGUgcGFydGl0aW9uIDFNYiBiaWcKKwkqIHQgMSAuLi4uLi4uLi4uLi4uLi4uLi4uIGNoYW5nZSBmaXJzdCBwYXJ0aXRpb24gSUQKKwkJKiA1MyAuLi4uLi4uLi4uLi4gY2hhbmdlIHRoZSBJRCB0byAweDUzIChPblRyYWNrIERNNiBBdXgzKQorCSogPGNyZWF0ZSBvdGhlciBwYXJ0aXRpb25zPgorCSogdyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gd3JpdGUgcGFydGl0aW9uIHRhYmxlIHRvIGRpc2sKKworVGhlIHBhcnRpdGlvbiBsYXlvdXQgaXMgcmVhZHksIG5leHQgdGhlIHNwZWNpYWwgcGFydGl0aW9uIG11c3QgYmUgZmlsbGVkIHdpdGgKK3Byb3BlciBjb250ZW50cy4gVGhlIGNvbnRlbnRzIGlzIGdlbmVyYXRlZCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCAoc2VlCitjaGFwdGVyIDIpKToKKworCSQgLi90b29scy9teHNib290IHNkIHUtYm9vdC5zYiB1LWJvb3Quc2QKKworVGhlIHJlc3VsdGluZyBmaWxlLCAidS1ib290LnNkIiwgc2hhbGwgdGhlbiBiZSB3cml0dGVuIHRvIHRoZSBwYXJ0aXRpb24uIEluIHRoaXMKK2Nhc2UsIHdlIGFzc3VtZSB0aGUgZmlyc3QgcGFydGl0aW9uIG9mIHRoZSBTRCBjYXJkIGlzIC9kZXYvbW1jYmxrMHAxOgorCisJJCBkZCBpZj11LWJvb3Quc2Qgb2Y9L2Rldi9tbWNibGswcDEKKworTGFzdCBzdGVwIGlzIHRvIGluc2VydCB0aGUgY2FyZCBpbnRvIE0yOEVWSyBhbmQgYm9vdC4KKworTk9URTogSWYgdGhlIHVzZXIgbmVlZHMgdG8gYWRqdXN0IHRoZSBzdGFydCBzZWN0b3IsIHRoZSAibXhzYm9vdCIgdG9vbCBjb250YWlucworICAgICAgYSAiLXAiIHN3aXRjaCBmb3IgdGhhdCBwdXJwb3NlLiBUaGUgIi1wIiBzd2l0Y2ggdGFrZXMgdGhlIHNlY3RvciBudW1iZXIgYXMKKyAgICAgIGFuIGFyZ3VtZW50LgorCis0KSBJbnN0YWxsYXRpb24gb2YgVS1Cb290IGZvciBNMjggdG8gTkFORCBmbGFzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYm9vdCBhbiBNMjggZnJvbSBOQU5ELCBzZXQgdGhlIGJvb3QgbW9kZSBESVAgc3dpdGNoZXMgYWNjb3JkaW5nIHRvIGkuTVgyOAorbWFudWFsIGNoYXB0ZXIgMTIuMi4xIChUYWJsZSAxMi0yKSwgUE9SVD1HUE1JLCBOQU5EIDEuOCBWLgorCitUaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRpZXMgd2hlbiBwcmVwYXJpbmcgYW4gaW1hZ2Ugd3JpdGFibGUgdG8gTkFORCBmbGFzaC4KKworCUkpIFRoZSBOQU5EIHdhc24ndCB3cml0dGVuIGF0IGFsbCB5ZXQgb3IgdGhlIEJDQiBpcyBicm9rZW4KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgSW4gdGhpcyBjYXNlLCBib3RoIEJDQiAoRkNCIGFuZCBEQkJUKSBhbmQgZmlybXdhcmUgbmVlZHMgdG8gYmUKKwkgICB3cml0dGVuIHRvIE5BTkQuIFRvIGdlbmVyYXRlIE5BTkQgaW1hZ2UgY29udGFpbmluZyBhbGwgdGhlc2UsCisJICAgdGhlcmUgaXMgYSB0b29sIGNhbGxlZCAibXhzYm9vdCIgaW4gdGhlICJ0b29scy8iIGRpcmVjdG9yeS4gVGhlIHRvb2wKKwkgICBpcyBpbnZva2VkIG9uICJ1LWJvb3Quc2IiIGZpbGUgZnJvbSBjaGFwdGVyIDIpOgorCisJCSAkIC4vdG9vbHMvbXhzYm9vdCBuYW5kIHUtYm9vdC5zYiB1LWJvb3QubmFuZAorCisJICAgTk9URTogVGhlIGFib3ZlIGludm9rYXRpb24gd29ya3MgZm9yIE5BTkQgZmxhc2ggd2l0aCBnZW9tZXRyeSBvZgorCQkgMjA0OGIgcGVyIHBhZ2UsIDY0YiBPT0IgZGF0YSwgMTI4a2IgZXJhc2Ugc2l6ZS4gSWYgeW91ciBjaGlwCisJCSBoYXMgYSBkaWZmZXJlbnQgZ2VvbWV0cnksIHBsZWFzZSB1c2U6CisKKwkJIC13IDxzaXplPgljaGFuZ2UgcGFnZSBzaXplIChkZWZhdWx0IDIwNDggYikKKwkJIC1vIDxzaXplPgljaGFuZ2Ugb29iIHNpemUgKGRlZmF1bHQgNjQgYikKKwkJIC1lIDxzaXplPgljaGFuZ2UgZXJhc2Ugc2l6ZSAoZGVmYXVsdCAxMzEwNzIgYikKKworCQkgVGhlIGdlb21ldHJ5IGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHJ1bm5pbmcgVS1Cb290CisJCSBvbiBNMjggYnkgaXNzdWluZyB0aGUgIm5hbmQgaW5mbyIgY29tbWFuZC4KKworCSAgIFRoZSByZXN1bHRpbmcgZmlsZSwgInUtYm9vdC5uYW5kIiBjYW4gYmUgd3JpdHRlbiBkaXJlY3RseSB0byBOQU5ECisJICAgZnJvbSB0aGUgVS1Cb290IHByb21wdC4gVG8gc2ltcGxpZnkgdGhlIHByb2Nlc3MsIHRoZSBVLUJvb3QgZGVmYXVsdAorCSAgIGVudmlyb25tZW50IGNvbnRhaW5zIHNjcmlwdCAidXBkYXRlX25hbmRfZnVsbCIgdG8gdXBkYXRlIHRoZSBzeXN0ZW0uCisKKwkgICBUaGlzIHNjcmlwdCBleHBlY3RzIGEgd29ya2luZyBURlRQIHNlcnZlciBjb250YWluaW5nIHRoZSBmaWxlCisJICAgInUtYm9vdC5uYW5kIiBpbiBpdCdzIHJvb3QgZGlyZWN0b3J5LiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGJ5CisJICAgYWRqdXN0aW5nIHRoZSAidXBkYXRlX25hbmRfZnVsbF9maWxlbmFtZSIgdmFyaWJsZS4KKworCSAgIFRvIHVwZGF0ZSB0aGUgc3lzdGVtLCBydW4gdGhlIGZvbGxvd2luZyBpbiBVLUJvb3QgcHJvbXB0OgorCisJCSA9PiBydW4gdXBkYXRlX25hbmRfZnVsbAorCisJICAgSW4gY2FzZSB5b3Ugd291bGQgb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgYm9vdGxvYWRlciBpbiBmdXR1cmUsCisJICAgc2VlIElJKSBiZWxvdy4KKworCUlJKSBUaGUgTkFORCB3YXMgYWxyZWFkeSB3cml0dGVuIHdpdGggYSBnb29kIEJDQgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgIFRoaXMgcGFydCBhcHBsaWVzIGFmdGVyIHRoZSBwYXJ0IEkpIGFib3ZlIHdhcyBkb25lIGF0IGxlYXN0IG9uY2UuCisKKwkgICBJZiBwYXJ0IEkpIGFib3ZlIHdhcyBkb25lIGNvcnJlY3RseSBhbHJlYWR5LCB0aGVyZSBpcyBubyBuZWVkIHRvCisJICAgd3JpdGUgdGhlIEZDQiBhbmQgREJCVCBwYXJ0cyBvZiBOQU5EIGFnYWluLiBJdCdzIHBvc3NpYmxlIHRvIHVwZ3JhZGUKKwkgICBvbmx5IHRoZSBib290bG9hZGVyIGltYWdlLgorCisJICAgVG8gc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgZmlybXdhcmUgdXBkYXRlLCB0aGUgVS1Cb290IGRlZmF1bHQKKwkgICBlbnZpcm9ubWVudCBjb250YWlucyBzY3JpcHQgInVwZGF0ZV9uYW5kX2Zpcm13YXJlIiB0byB1cGRhdGUgb25seQorCSAgIHRoZSBmaXJtd2FyZSwgd2l0aG91dCByZXdyaXRpbmcgRkNCIGFuZCBEQkJULgorCisJICAgVGhpcyBzY3JpcHQgZXhwZWN0cyBhIHdvcmtpbmcgVEZUUCBzZXJ2ZXIgY29udGFpbmluZyB0aGUgZmlsZQorCSAgICJ1LWJvb3Quc2IiIGluIGl0J3Mgcm9vdCBkaXJlY3RvcnkuIFRoaXMgY2FuIGJlIGNoYW5nZWQgYnkKKwkgICBhZGp1c3RpbmcgdGhlICJ1cGRhdGVfbmFuZF9maXJtd2FyZV9maWxlbmFtZSIgdmFyaWJsZS4KKworCSAgIFRvIHVwZGF0ZSB0aGUgc3lzdGVtLCBydW4gdGhlIGZvbGxvd2luZyBpbiBVLUJvb3QgcHJvbXB0OgorCisJCSA9PiBydW4gdXBkYXRlX25hbmRfZmlybXdhcmUKKworCUlJSSkgU3BlY2lhbCBzZXR0aW5ncyBmb3IgdGhlIHVwZGF0ZSBzY3JpcHRzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICBUaGVyZSBpcyBhIHNsaWdodCBwb3NzaWJpbGl0eSBvZiB0aGUgdXNlciB3YW50aW5nIHRvIGFkanVzdCB0aGUKKwkgICBTVFJJREUgYW5kIENPVU5UIG9wdGlvbnMgb2YgdGhlIE5BTkQgYm9vdC4gRm9yIGRlc2NyaXB0aW9uIG9mIHRoZXNlLAorCSAgIHNlZSBpLk1YMjggbWFudWFsIHNlY3Rpb24gMTIuMTIuMS4yIGFuZCAxMi4xMi4xLjMuCisKKwkgICBUaGUgdXBkYXRlIHNjcmlwdHMgdGFrZSB0aGlzIHBvc3NpYmlsaXR5IGludG8gYWNjb3VudC4gSW4gY2FzZSB0aGUKKwkgICB1c2VyIGNoYW5nZXMgU1RSSURFIGJ5IGJsb3dpbmcgZnVzZXMsIHRoZSB1c2VyIGFsc28gaGFzIHRvIGNoYW5nZQorCSAgICJ1cGRhdGVfbmFuZF9zdHJpZGUiIHZhcmlhYmxlLiBJbiBjYXNlIHRoZSB1c2VyIGNoYW5nZXMgQ09VTlQgYnkKKwkgICBibG93aW5nIGZ1c2VzLCB0aGUgdXNlciBhbHNvIGhhcyB0byBjaGFuZ2UgInVwZGF0ZV9uYW5kX2NvdW50IgorCSAgIHZhcmlhYmxlIGZvciB0aGUgdXBkYXRlIHNjcmlwdHMgdG8gd29yayBjb3JyZWN0bHkuCisKKwkgICBJbiBjYXNlIHRoZSB1c2VyIG5lZWRzIHRvIGJvb3QgYSBmaXJtd2FyZSBpbWFnZSBiaWdnZXIgdGhhbiAxTWIsIHRoZQorCSAgIHVzZXIgaGFzIHRvIGFkanVzdCB0aGUgInVwZGF0ZV9uYW5kX2Zpcm13YXJlX21heHN6IiB2YXJpYWJsZSBmb3IgdGhlCisJICAgdXBkYXRlIHNjcmlwdHMgdG8gd29yayBwcm9wZXJseS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmlvc19lbXVsYXRvci94ODZlbXUvb3BzLmMgYi9kcml2ZXJzL2Jpb3NfZW11bGF0b3IveDg2ZW11L29wcy5jCmluZGV4IGM4MzZhMjAuLmY4ZTA5M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmlvc19lbXVsYXRvci94ODZlbXUvb3BzLmMKKysrIGIvZHJpdmVycy9iaW9zX2VtdWxhdG9yL3g4NmVtdS9vcHMuYwpAQCAtMzUxOCwxMSArMzUxOCw5IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCB4ODZlbXVPcF9pbnQzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKIHsKLSAgICB1MTYgdG1wOwotCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBERUNPREVfUFJJTlRGKCJJTlQgM1xuIik7Ci0gICAgdG1wID0gKHUxNikgbWVtX2FjY2Vzc193b3JkKDMgKiA0ICsgMik7CisgICAgKHZvaWQpbWVtX2FjY2Vzc193b3JkKDMgKiA0ICsgMik7CiAgICAgLyogYWNjZXNzIHRoZSBzZWdtZW50IHJlZ2lzdGVyICovCiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKIAlpZiAoX1g4NkVNVV9pbnRyVGFiWzNdKSB7CkBAIC0zNTQ2LDE0ICszNTQ0LDEzIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKIHsKLSAgICB1MTYgdG1wOwogICAgIHU4IGludG51bTsKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgREVDT0RFX1BSSU5URigiSU5UXHQiKTsKICAgICBpbnRudW0gPSBmZXRjaF9ieXRlX2ltbSgpOwogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW50bnVtKTsKLSAgICB0bXAgPSBtZW1fYWNjZXNzX3dvcmQoaW50bnVtICogNCArIDIpOworICAgICh2b2lkKW1lbV9hY2Nlc3Nfd29yZChpbnRudW0gKiA0ICsgMik7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKIAlpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIHsKIAkJKCpfWDg2RU1VX2ludHJUYWJbaW50bnVtXSkoaW50bnVtKTsKQEAgLTM1NzYsMTMgKzM1NzMsMTEgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIHg4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQogewotICAgIHUxNiB0bXA7Ci0KICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIERFQ09ERV9QUklOVEYoIklOVE9cbiIpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKSB7Ci0JdG1wID0gbWVtX2FjY2Vzc193b3JkKDQgKiA0ICsgMik7CisJKHZvaWQpbWVtX2FjY2Vzc193b3JkKDQgKiA0ICsgMik7CiAJCWlmIChfWDg2RU1VX2ludHJUYWJbNF0pIHsKIAkJCSgqX1g4NkVNVV9pbnRyVGFiWzRdKSg0KTsKIAl9IGVsc2UgewpAQCAtMzk5MCwxMSArMzk4NSw5IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCB4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQogewotICAgIHU4IGE7Ci0KICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIERFQ09ERV9QUklOVEYoIkFBRFxuIik7Ci0gICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgKHZvaWQpZmV0Y2hfYnl0ZV9pbW0oKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIE0ueDg2LlJfQVggPSBhYWRfd29yZChNLng4Ni5SX0FYKTsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FoY2kuYyBiL2RyaXZlcnMvYmxvY2svYWhjaS5jCmluZGV4IDAxNWIzNDEuLjdiMmVjNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYWhjaS5jCisrKyBiL2RyaXZlcnMvYmxvY2svYWhjaS5jCkBAIC01NjEsMTIgKzU2MSw5IEBACiAgKi8KIHN0YXRpYyBpbnQgYXRhX3Njc2lvcF9yZWFkMTAoY2NiICogcGNjYikKIHsKLQl1NjQgbGJhID0gMDsKIAl1MzIgbGVuID0gMDsKIAl1OCBmaXNbMjBdOwogCi0JbGJhID0gKCgodTY0KSBwY2NiLT5jbWRbMl0pIDw8IDI0KSB8ICgoKHU2NCkgcGNjYi0+Y21kWzNdKSA8PCAxNikKLQkgICAgfCAoKCh1NjQpIHBjY2ItPmNtZFs0XSkgPDwgOCkgfCAoKHU2NCkgcGNjYi0+Y21kWzVdKTsKIAlsZW4gPSAoKCh1MzIpIHBjY2ItPmNtZFs3XSkgPDwgOCkgfCAoKHUzMikgcGNjYi0+Y21kWzhdKTsKIAogCS8qIEZvciAxMC1ieXRlIGFuZCAxNi1ieXRlIFNDU0kgUi9XIGNvbW1hbmRzLCB0cmFuc2ZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mdGlkZTAyMC5jIGIvZHJpdmVycy9ibG9jay9mdGlkZTAyMC5jCmluZGV4IDRhN2EwN2YuLmFkOGZkYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZnRpZGUwMjAuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Z0aWRlMDIwLmMKQEAgLTMxNiwxMCArMzE2LDkgQEAKIAogCS8qIGF1dG8tZGV0ZWN0IElERSBjb250cm9sbGVyICovCiAJaWYgKGZ0aWRlX2NvbnRyb2xsZXJfcHJvYmUoKSkgewotCQlwcmludGYoIkZhcmFkYXkgJXMgZHJpdmVyIHZlcnNpb24gJXNcbiIsIEZUSURFX0lQX05BTUUsCi0JCUZUSURFX0RSSVZFUl9WRVJTSU9OKTsKKwkJcHJpbnRmKCJGVElERTAyMF9TXG4iKTsKIAl9IGVsc2UgewotCQlwcmludGYoIkZhcmFkYXkgQVRBIGNvbnRyb2xsZXIgbm90IGZvdW5kLlxuIik7CisJCXByaW50ZigiRlRJREUwMjBfUyBBVEEgY29udHJvbGxlciBub3QgZm91bmQuXG4iKTsKIAkJcmV0dXJuIEFQSV9FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3NhdGFfZHdjLmMgYi9kcml2ZXJzL2Jsb2NrL3NhdGFfZHdjLmMKaW5kZXggYjJiMzgwNC4uNjllYzVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zYXRhX2R3Yy5jCisrKyBiL2RyaXZlcnMvYmxvY2svc2F0YV9kd2MuYwpAQCAtNDQwLDExICs0NDAsOSBAQAogewogCXU4IG5zZWN0LGxiYWwgPSAwOwogCXU4IHRtcCA9IDA7Ci0JdTMyIHNlcnJvciA9IDA7Ci0JdTggc3RhdHVzID0gMDsKIAlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwogCi0Jc2Vycm9yID0gaW5fbGUzMigodm9pZCAqKWFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoU0NSX0VSUk9SICogNCkpOworCWluX2xlMzIoKHZvaWQgKilhcC0+aW9hZGRyLnNjcl9hZGRyICsgKFNDUl9FUlJPUiAqIDQpKTsKIAogCXdyaXRlYigweDU1LCBpb2FkZHItPm5zZWN0X2FkZHIpOwogCXdyaXRlYigweGFhLCBpb2FkZHItPmxiYWxfYWRkcik7CkBAIC00NzYsNyArNDc0LDcgQEAKIAl3cml0ZWIoYXAtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7CiAKIAltc2xlZXAoMTUwKTsKLQlzdGF0dXMgPSBhdGFfY2hlY2tfc3RhdHVzKGFwKTsKKwlhdGFfY2hlY2tfc3RhdHVzKGFwKTsKIAogCW1zbGVlcCg1MCk7CiAJYXRhX2NoZWNrX3N0YXR1cyhhcCk7CkBAIC01MzUsNyArNTMzLDYgQEAKIAljb25zdCB1MTYgKmlkOwogCXN0cnVjdCBhdGFfZGV2aWNlICphdGFfZGV2ID0gJmF0YV9kZXZpY2U7CiAJdW5zaWduZWQgbG9uZyBwaW9fbWFzaywgbXdkbWFfbWFzaywgdWRtYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgeGZlcl9tYXNrOwogCWNoYXIgcmV2YnVmWzddOwogCXUxNiBpb2J1ZltBVEFfU0VDVE9SX1dPUkRTXTsKIApAQCAtNjI5LDEwICs2MjYsNiBAQAogCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgKDEgPDwgMikpCiAJCXVkbWFfbWFzayA9IGlkW0FUQV9JRF9VRE1BX01PREVTXSAmIDB4ZmY7CiAKLQl4ZmVyX21hc2sgPSAoKHBpb19tYXNrIDw8IEFUQV9TSElGVF9QSU8pICYgQVRBX01BU0tfUElPKSB8Ci0JCSgobXdkbWFfbWFzayA8PCBBVEFfU0hJRlRfTVdETUEpICYgQVRBX01BU0tfTVdETUEpIHwKLQkJKCh1ZG1hX21hc2sgPDwgQVRBX1NISUZUX1VETUEpICYgQVRBX01BU0tfVURNQSk7Ci0KIAlpZiAoYXRhX2Rldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKIAkJaWYgKGF0YV9pZF9pc19jZmEoaWQpKSB7CiAJCQlpZiAoaWRbMTYyXSAmIDEpCkBAIC02NTEsMTQgKzY0NCwxMSBAQAogCQkJYXRhX2Rldi0+bXVsdGlfY291bnQgPSBhdGFfZGV2LT5pZFs1OV0gJiAweGZmOwogCiAJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKLQkJCWNvbnN0IGNoYXIgKmxiYV9kZXNjOwogCQkJY2hhciBuY3FfZGVzY1syMF07CiAKLQkJCWxiYV9kZXNjID0gIkxCQSI7CiAJCQlhdGFfZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfTEJBOwogCQkJaWYgKGF0YV9pZF9oYXNfbGJhNDgoaWQpKSB7CiAJCQkJYXRhX2Rldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX0xCQTQ4OwotCQkJCWxiYV9kZXNjID0gIkxCQTQ4IjsKIAogCQkJCWlmIChhdGFfZGV2LT5uX3NlY3RvcnMgPj0gKDFVTCA8PCAyOCkgJiYKIAkJCQkJYXRhX2lkX2hhc19mbHVzaF9leHQoaWQpKQpAQCAtODkwLDYgKzg4MCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6CisJcHJpbnRmKCJmYWlsZWQgdG8gUkVBRCBJRCAoJXMsIGVycl9tYXNrPTB4JXgpXG4iLCByZWFzb24sIGVycl9tYXNrKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE4MDcsNyArMTc5OCw2IEBACiAJdW5zaWduZWQgaW50IGVycl9tYXNrID0gMDsKIAljb25zdCBjaGFyICpyZWFzb247CiAJaW50IG1heV9mYWxsYmFjayA9IDE7Ci0JaW50IHJjOwogCiAJaWYgKGRldl9zdGF0ZSA9PSBTQVRBX0VSUk9SKQogCQlyZXR1cm4gRkFMU0U7CkBAIC0xOTA0LDE5ICsxODk0LDEwIEBACiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCi0JCXJjID0gLUVJTzsKIAkJcmVhc29uID0gIkkvTyBlcnJvciI7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQkvKiBGYWxsaW5nIGJhY2sgZG9lc24ndCBtYWtlIHNlbnNlIGlmIElEIGRhdGEgd2FzIHJlYWQKLQkgKiBzdWNjZXNzZnVsbHkgYXQgbGVhc3Qgb25jZS4KLQkgKi8KLQltYXlfZmFsbGJhY2sgPSAwOwotCi0JcmMgPSAtRUlOVkFMOwotCXJlYXNvbiA9ICJkZXZpY2UgcmVwb3J0cyBpbnZhbGlkIHR5cGUiOwotCiAJcmV0dXJuIFRSVUU7CiAKIGVycl9vdXQ6CkBAIC0xOTkxLDcgKzE5NzIsNiBAQAogCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IDA7CiAJY29uc3QgY2hhciAqcmVhc29uOwogCWludCBtYXlfZmFsbGJhY2sgPSAxOwotCWludCByYzsKIAogCWlmIChkZXZfc3RhdGUgPT0gU0FUQV9FUlJPUikKIAkJcmV0dXJuIEZBTFNFOwpAQCAtMjA4OSwxOSArMjA2OSwxMCBAQAogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAotCQlyYyA9IC1FSU87CiAJCXJlYXNvbiA9ICJJL08gZXJyb3IiOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JLyogRmFsbGluZyBiYWNrIGRvZXNuJ3QgbWFrZSBzZW5zZSBpZiBJRCBkYXRhIHdhcyByZWFkCi0JICogc3VjY2Vzc2Z1bGx5IGF0IGxlYXN0IG9uY2UuCi0JICovCi0JbWF5X2ZhbGxiYWNrID0gMDsKLQotCXJjID0gLUVJTlZBTDsKLQlyZWFzb24gPSAiZGV2aWNlIHJlcG9ydHMgaW52YWxpZCB0eXBlIjsKLQogCXJldHVybiBUUlVFOwogCiBlcnJfb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zYXRhX3NpbDMxMTQuYyBiL2RyaXZlcnMvYmxvY2svc2F0YV9zaWwzMTE0LmMKaW5kZXggMWU2MDYzNi4uMzRmZTAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zYXRhX3NpbDMxMTQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3NhdGFfc2lsMzExNC5jCkBAIC03ODIsNiArNzgyLDcgQEAKIAkJICAgIChpb2Jhc2VbNV0gKyBWTkRfVEYyX0NIMCkgfCBBVEFfUENJX0NUTF9PRlM7CiAJCXBvcnRbMF0uaW9hZGRyLmJtZG1hX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfQk1ETUFfQ0gwOwogCQlicmVhazsKKyNpZiAoQ09ORklHX1NZU19TQVRBX01BWF9ERVZJQ0UgPj0gMSkKIAljYXNlIDE6CiAJCXBvcnRbMV0ucG9ydF9ubyA9IDA7CiAJCXBvcnRbMV0uaW9hZGRyLmNtZF9hZGRyID0gaW9iYXNlWzVdICsgVk5EX1RGMF9DSDE7CkBAIC03ODksNiArNzkwLDcgQEAKIAkJICAgIChpb2Jhc2VbNV0gKyBWTkRfVEYyX0NIMSkgfCBBVEFfUENJX0NUTF9PRlM7CiAJCXBvcnRbMV0uaW9hZGRyLmJtZG1hX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfQk1ETUFfQ0gxOwogCQlicmVhazsKKyNlbGlmIChDT05GSUdfU1lTX1NBVEFfTUFYX0RFVklDRSA+PSAyKQogCWNhc2UgMjoKIAkJcG9ydFsyXS5wb3J0X25vID0gMDsKIAkJcG9ydFsyXS5pb2FkZHIuY21kX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfVEYwX0NIMjsKQEAgLTc5Niw2ICs3OTgsNyBAQAogCQkgICAgKGlvYmFzZVs1XSArIFZORF9URjJfQ0gyKSB8IEFUQV9QQ0lfQ1RMX09GUzsKIAkJcG9ydFsyXS5pb2FkZHIuYm1kbWFfYWRkciA9IGlvYmFzZVs1XSArIFZORF9CTURNQV9DSDI7CiAJCWJyZWFrOworI2VsaWYgKENPTkZJR19TWVNfU0FUQV9NQVhfREVWSUNFID49IDMpCiAJY2FzZSAzOgogCQlwb3J0WzNdLnBvcnRfbm8gPSAwOwogCQlwb3J0WzNdLmlvYWRkci5jbWRfYWRkciA9IGlvYmFzZVs1XSArIFZORF9URjBfQ0gzOwpAQCAtODAzLDYgKzgwNiw3IEBACiAJCSAgICAoaW9iYXNlWzVdICsgVk5EX1RGMl9DSDMpIHwgQVRBX1BDSV9DVExfT0ZTOwogCQlwb3J0WzNdLmlvYWRkci5ibWRtYV9hZGRyID0gaW9iYXNlWzVdICsgVk5EX0JNRE1BX0NIMzsKIAkJYnJlYWs7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlwcmludGYgKCJUcmllZCB0byBzY2FuIHVua25vd24gcG9ydDogYXRhJWRcbiIsIGRldik7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zeW01M2M4eHguYyBiL2RyaXZlcnMvYmxvY2svc3ltNTNjOHh4LmMKaW5kZXggODA5NGI0MS4uNTY0YWE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zeW01M2M4eHguYworKysgYi9kcml2ZXJzL2Jsb2NrL3N5bTUzYzh4eC5jCkBAIC00NTMsMTEgKzQ1Myw5IEBACiAKIHZvaWQgc2NzaV93cml0ZV9kc3AodW5zaWduZWQgbG9uZyBzdGFydCkKIHsKLQl1bnNpZ25lZCBsb25nIHZhbDsKICNpZmRlZiBTQ1NJX1NJTkdMRV9TVEVQCiAJdW5zaWduZWQgY2hhciB0OwogI2VuZGlmCi0JdmFsID0gc3RhcnQ7CiAJb3V0MzJyKHNjc2lfbWVtX2FkZHIgKyBEU1Asc3RhcnQpOwogI2lmZGVmIFNDU0lfU0lOR0xFX1NURVAKIAl0PXNjc2lfcmVhZF9ieXRlKERDTlRMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL01ha2VmaWxlIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKaW5kZXggM2Q5YzlmMS4uNWQ4NjRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAKIExJQgk6PSAkKG9iailsaWJkbWEubwogCiBDT0JKUy0kKENPTkZJR19GU0xETUFGRUMpICs9IE1DRF90YXNrc0luaXQubyBNQ0RfZG1hQXBpLm8gTUNEX3Rhc2tzLm8KK0NPQkpTLSQoQ09ORklHX0FQQkhfRE1BKSArPSBhcGJoX2RtYS5vCiBDT0JKUy0kKENPTkZJR19GU0xfRE1BKSArPSBmc2xfZG1hLm8KIENPQkpTLSQoQ09ORklHX09NQVAzX0RNQSkgKz0gb21hcDNfZG1hLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYXBiaF9kbWEuYyBiL2RyaXZlcnMvZG1hL2FwYmhfZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhMTA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2FwYmhfZG1hLmMKQEAgLTAsMCArMSw2OTEgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IEFQQkggRE1BIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorCitzdGF0aWMgc3RydWN0IG14c19kbWFfY2hhbiBteHNfZG1hX2NoYW5uZWxzW01YU19NQVhfRE1BX0NIQU5ORUxTXTsKKworLyoKKyAqIFRlc3QgaXMgdGhlIERNQSBjaGFubmVsIGlzIHZhbGlkIGNoYW5uZWwKKyAqLworaW50IG14c19kbWFfdmFsaWRhdGVfY2hhbihpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpwY2hhbjsKKworCWlmICgoY2hhbm5lbCA8IDApIHx8IChjaGFubmVsID49IE1YU19NQVhfRE1BX0NIQU5ORUxTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwY2hhbiA9IG14c19kbWFfY2hhbm5lbHMgKyBjaGFubmVsOworCWlmICghKHBjaGFuLT5mbGFncyAmIE1YU19ETUFfRkxBR1NfQUxMT0NBVEVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEVuYWJsZSBhIERNQSBjaGFubmVsLgorICoKKyAqIElmIHRoZSBnaXZlbiBjaGFubmVsIGhhcyBhbnkgRE1BIGRlc2NyaXB0b3JzIG9uIGl0cyBhY3RpdmUgbGlzdCwgdGhpcworICogZnVuY3Rpb24gY2F1c2VzIHRoZSBETUEgaGFyZHdhcmUgdG8gYmVnaW4gcHJvY2Vzc2luZyB0aGVtLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIERNQSBjaGFubmVsIGFzICJidXN5LCIgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueQorICogZGVzY3JpcHRvcnMgdG8gcHJvY2Vzcy4KKyAqLworaW50IG14c19kbWFfZW5hYmxlKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJdW5zaWduZWQgaW50IHNlbTsKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpwY2hhbjsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpwZGVzYzsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwY2hhbiA9IG14c19kbWFfY2hhbm5lbHMgKyBjaGFubmVsOworCisJaWYgKHBjaGFuLT5wZW5kaW5nX251bSA9PSAwKSB7CisJCXBjaGFuLT5mbGFncyB8PSBNWFNfRE1BX0ZMQUdTX0JVU1k7CisJCXJldHVybiAwOworCX0KKworCXBkZXNjID0gbGlzdF9maXJzdF9lbnRyeSgmcGNoYW4tPmFjdGl2ZSwgc3RydWN0IG14c19kbWFfZGVzYywgbm9kZSk7CisJaWYgKHBkZXNjID09IE5VTEwpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHBjaGFuLT5mbGFncyAmIE1YU19ETUFfRkxBR1NfQlVTWSkgeworCQlpZiAoIShwZGVzYy0+Y21kLmRhdGEgJiBNWFNfRE1BX0RFU0NfQ0hBSU4pKQorCQkJcmV0dXJuIDA7CisKKwkJc2VtID0gbXhzX2RtYV9yZWFkX3NlbWFwaG9yZShjaGFubmVsKTsKKwkJaWYgKHNlbSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHNlbSA9PSAxKSB7CisJCQlwZGVzYyA9IGxpc3RfZW50cnkocGRlc2MtPm5vZGUubmV4dCwKKwkJCQkJICAgc3RydWN0IG14c19kbWFfZGVzYywgbm9kZSk7CisJCQl3cml0ZWwobXhzX2RtYV9jbWRfYWRkcmVzcyhwZGVzYyksCisJCQkJJmFwYmhfcmVncy0+Y2hbY2hhbm5lbF0uaHdfYXBiaF9jaF9ueHRjbWRhcik7CisJCX0KKwkJd3JpdGVsKHBjaGFuLT5wZW5kaW5nX251bSwKKwkJCSZhcGJoX3JlZ3MtPmNoW2NoYW5uZWxdLmh3X2FwYmhfY2hfc2VtYSk7CisJCXBjaGFuLT5hY3RpdmVfbnVtICs9IHBjaGFuLT5wZW5kaW5nX251bTsKKwkJcGNoYW4tPnBlbmRpbmdfbnVtID0gMDsKKwl9IGVsc2UgeworCQlwY2hhbi0+YWN0aXZlX251bSArPSBwY2hhbi0+cGVuZGluZ19udW07CisJCXBjaGFuLT5wZW5kaW5nX251bSA9IDA7CisJCXdyaXRlbChteHNfZG1hX2NtZF9hZGRyZXNzKHBkZXNjKSwKKwkJCSZhcGJoX3JlZ3MtPmNoW2NoYW5uZWxdLmh3X2FwYmhfY2hfbnh0Y21kYXIpOworCQl3cml0ZWwocGNoYW4tPmFjdGl2ZV9udW0sCisJCQkmYXBiaF9yZWdzLT5jaFtjaGFubmVsXS5od19hcGJoX2NoX3NlbWEpOworCQl3cml0ZWwoMSA8PCAoY2hhbm5lbCArIEFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX09GRlNFVCksCisJCQkmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwwX2Nscik7CisJfQorCisJcGNoYW4tPmZsYWdzIHw9IE1YU19ETUFfRkxBR1NfQlVTWTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERpc2FibGUgYSBETUEgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNodXRzIGRvd24gYSBETUEgY2hhbm5lbCBhbmQgbWFya3MgaXQgYXMgIm5vdCBidXN5LiIgQW55CisgKiBkZXNjcmlwdG9ycyBvbiB0aGUgYWN0aXZlIGxpc3QgYXJlIGltbWVkaWF0ZWx5IG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZQorICogImRvbmUiIGxpc3QsIHdoZXRoZXIgb3Igbm90IHRoZXkgaGF2ZSBhY3R1YWxseSBiZWVuIHByb2Nlc3NlZCBieSB0aGUKKyAqIGhhcmR3YXJlLiBUaGUgInJlYWR5IiBmbGFncyBvZiB0aGVzZSBkZXNjcmlwdG9ycyBhcmUgTk9UIGNsZWFyZWQsIHNvIHRoZXkKKyAqIHN0aWxsIGFwcGVhciB0byBiZSBhY3RpdmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBzaHV0cyBkb3duIGEgRE1BIGNoYW5uZWwncyBoYXJkd2FyZSwgYWJvcnRpbmcgYW55CisgKiBJL08gdGhhdCBtYXkgYmUgaW4gcHJvZ3Jlc3MsIHBvdGVudGlhbGx5IGxlYXZpbmcgSS9PIGhhcmR3YXJlIGluIGFuIHVuZGVmaW5lZAorICogc3RhdGUuIEl0IGlzIHVud2lzZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgdGhlcmUgaXMgQU5ZIGNoYW5jZSB0aGUgaGFyZHdhcmUKKyAqIGlzIHN0aWxsIHByb2Nlc3NpbmcgYSBjb21tYW5kLgorICovCitpbnQgbXhzX2RtYV9kaXNhYmxlKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteHNfZG1hX2NoYW4gKnBjaGFuOworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGNoYW4gPSBteHNfZG1hX2NoYW5uZWxzICsgY2hhbm5lbDsKKworCWlmICghKHBjaGFuLT5mbGFncyAmIE1YU19ETUFfRkxBR1NfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVsKDEgPDwgKGNoYW5uZWwgKyBBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9PRkZTRVQpLAorCQkmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwwX3NldCk7CisKKwlwY2hhbi0+ZmxhZ3MgJj0gfk1YU19ETUFfRkxBR1NfQlVTWTsKKwlwY2hhbi0+YWN0aXZlX251bSA9IDA7CisJcGNoYW4tPnBlbmRpbmdfbnVtID0gMDsKKwlsaXN0X3NwbGljZV9pbml0KCZwY2hhbi0+YWN0aXZlLCAmcGNoYW4tPmRvbmUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXNldHMgdGhlIERNQSBjaGFubmVsIGhhcmR3YXJlLgorICovCitpbnQgbXhzX2RtYV9yZXNldChpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKmFwYmhfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKilNWFNfQVBCSF9CQVNFOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXdyaXRlbCgxIDw8IChjaGFubmVsICsgQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9PRkZTRVQpLAorCQkmYXBiaF9yZWdzLT5od19hcGJoX2NoYW5uZWxfY3RybF9zZXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlemUgYSBETUEgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhdXNlcyB0aGUgY2hhbm5lbCB0byBjb250aW51b3VzbHkgZmFpbCBhcmJpdHJhdGlvbiBmb3IgYnVzCisgKiBhY2Nlc3MsIHdoaWNoIGhhbHRzIGFsbCBmb3J3YXJkIHByb2dyZXNzIHdpdGhvdXQgbG9zaW5nIGFueSBzdGF0ZS4gQSBjYWxsIHRvCisgKiBteHNfZG1hX3VuZnJlZXplKCkgd2lsbCBjYXVzZSB0aGUgY2hhbm5lbCB0byBjb250aW51ZSBpdHMgY3VycmVudCBvcGVyYXRpb24KKyAqIHdpdGggbm8gaWxsIGVmZmVjdC4KKyAqLworaW50IG14c19kbWFfZnJlZXplKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJd3JpdGVsKDEgPDwgKGNoYW5uZWwgKyBBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9PRkZTRVQpLAorCQkmYXBiaF9yZWdzLT5od19hcGJoX2NoYW5uZWxfY3RybF9zZXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbmZyZWV6ZSBhIERNQSBjaGFubmVsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiBteHNfZG1hX2ZyZWV6ZSgpLCBlbmFibGluZyB0aGUgRE1BCisgKiBjaGFubmVsIHRvIGNvbnRpbnVlIGZyb20gd2hlcmUgaXQgd2FzIGZyb3plbi4KKyAqLworaW50IG14c19kbWFfdW5mcmVlemUoaW50IGNoYW5uZWwpCit7CisJc3RydWN0IG14MjhfYXBiaF9yZWdzICphcGJoX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfYXBiaF9yZWdzICopTVhTX0FQQkhfQkFTRTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl3cml0ZWwoMSA8PCAoY2hhbm5lbCArIEFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX09GRlNFVCksCisJCSZhcGJoX3JlZ3MtPmh3X2FwYmhfY2hhbm5lbF9jdHJsX2Nscik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYSBETUEgY2hhbm5lbCdzIGhhcmR3YXJlIHNlbWFwaG9yZS4KKyAqCisgKiBBcyB1c2VkIGJ5IHRoZSBNWFMgcGxhdGZvcm0ncyBETUEgc29mdHdhcmUsIHRoZSBETUEgY2hhbm5lbCdzIGhhcmR3YXJlCisgKiBzZW1hcGhvcmUgcmVmbGVjdHMgdGhlIG51bWJlciBvZiBETUEgY29tbWFuZHMgdGhlIGhhcmR3YXJlIHdpbGwgcHJvY2VzcywgYnV0CisgKiBoYXMgbm90IHlldCBmaW5pc2hlZC4gVGhpcyBpcyBhIHZvbGF0aWxlIHZhbHVlIHJlYWQgZGlyZWN0bHkgZnJvbSBoYXJkd2FyZSwKKyAqIHNvIGl0IG11c3QgYmUgYmUgdmlld2VkIGFzIGltbWVkaWF0ZWx5IHN0YWxlLgorICoKKyAqIElmIHRoZSBjaGFubmVsIGlzIG5vdCBtYXJrZWQgYnVzeSwgb3IgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYWxsIGl0cworICogY29tbWFuZHMsIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHplcm8uCisgKgorICogU2VlIG14c19kbWFfYXBwZW5kKCkgZm9yIGRldGFpbHMgb24gaG93IERNQSBjb21tYW5kIGJsb2NrcyBtdXN0IGJlIGNvbmZpZ3VyZWQKKyAqIHRvIG1haW50YWluIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgc2VtYXBob3JlJ3MgdmFsdWUuCisgKi8KK2ludCBteHNfZG1hX3JlYWRfc2VtYXBob3JlKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJdWludDMyX3QgdG1wOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRtcCA9IHJlYWRsKCZhcGJoX3JlZ3MtPmNoW2NoYW5uZWxdLmh3X2FwYmhfY2hfc2VtYSk7CisKKwl0bXAgJj0gQVBCSF9DSG5fU0VNQV9QSE9SRV9NQVNLOworCXRtcCA+Pj0gQVBCSF9DSG5fU0VNQV9QSE9SRV9PRkZTRVQ7CisKKwlyZXR1cm4gdG1wOworfQorCisvKgorICogRW5hYmxlIG9yIGRpc2FibGUgRE1BIGludGVycnVwdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGdpdmVuIERNQSBjaGFubmVsIHRvIGludGVycnVwdCB0aGUgQ1BVLgorICovCitpbnQgbXhzX2RtYV9lbmFibGVfaXJxKGludCBjaGFubmVsLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGVuYWJsZSkKKwkJd3JpdGVsKDEgPDwgKGNoYW5uZWwgKyBBUEJIX0NUUkwxX0NIX0NNRENNUExUX0lSUV9FTl9PRkZTRVQpLAorCQkJJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMV9zZXQpOworCWVsc2UKKwkJd3JpdGVsKDEgPDwgKGNoYW5uZWwgKyBBUEJIX0NUUkwxX0NIX0NNRENNUExUX0lSUV9FTl9PRkZTRVQpLAorCQkJJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMV9jbHIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIERNQSBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKyAqLworaW50IG14c19kbWFfaXJxX2lzX3BlbmRpbmcoaW50IGNoYW5uZWwpCit7CisJc3RydWN0IG14MjhfYXBiaF9yZWdzICphcGJoX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfYXBiaF9yZWdzICopTVhTX0FQQkhfQkFTRTsKKwl1aW50MzJfdCB0bXA7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdG1wID0gcmVhZGwoJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMSk7CisJdG1wIHw9IHJlYWRsKCZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDIpOworCisJcmV0dXJuICh0bXAgPj4gY2hhbm5lbCkgJiAxOworfQorCisvKgorICogQ2xlYXIgRE1BIGludGVycnVwdC4KKyAqCisgKiBUaGUgc29mdHdhcmUgdGhhdCBpcyB1c2luZyB0aGUgRE1BIGNoYW5uZWwgbXVzdCByZWdpc3RlciB0byByZWNlaXZlIGl0cworICogaW50ZXJydXB0cyBhbmQsIHdoZW4gdGhleSBhcnJpdmUsIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIHRoZW0uCisgKi8KK2ludCBteHNfZG1hX2Fja19pcnEoaW50IGNoYW5uZWwpCit7CisJc3RydWN0IG14MjhfYXBiaF9yZWdzICphcGJoX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfYXBiaF9yZWdzICopTVhTX0FQQkhfQkFTRTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl3cml0ZWwoMSA8PCBjaGFubmVsLCAmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwxX2Nscik7CisJd3JpdGVsKDEgPDwgY2hhbm5lbCwgJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMl9jbHIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXF1ZXN0IHRvIHJlc2VydmUgYSBETUEgY2hhbm5lbAorICovCitpbnQgbXhzX2RtYV9yZXF1ZXN0KGludCBjaGFubmVsKQoreworCXN0cnVjdCBteHNfZG1hX2NoYW4gKnBjaGFuOworCisJaWYgKChjaGFubmVsIDwgMCkgfHwgKGNoYW5uZWwgPj0gTVhTX01BWF9ETUFfQ0hBTk5FTFMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBjaGFuID0gbXhzX2RtYV9jaGFubmVscyArIGNoYW5uZWw7CisJaWYgKChwY2hhbi0+ZmxhZ3MgJiBNWFNfRE1BX0ZMQUdTX1ZBTElEKSAhPSBNWFNfRE1BX0ZMQUdTX1ZBTElEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwY2hhbi0+ZmxhZ3MgJiBNWFNfRE1BX0ZMQUdTX0FMTE9DQVRFRCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXBjaGFuLT5mbGFncyB8PSBNWFNfRE1BX0ZMQUdTX0FMTE9DQVRFRDsKKwlwY2hhbi0+YWN0aXZlX251bSA9IDA7CisJcGNoYW4tPnBlbmRpbmdfbnVtID0gMDsKKworCUlOSVRfTElTVF9IRUFEKCZwY2hhbi0+YWN0aXZlKTsKKwlJTklUX0xJU1RfSEVBRCgmcGNoYW4tPmRvbmUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWxlYXNlIGEgRE1BIGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhIERNQSBjaGFubmVsIGZyb20gaXRzIGN1cnJlbnQgb3duZXIuCisgKgorICogVGhlIGNoYW5uZWwgd2lsbCBOT1QgYmUgcmVsZWFzZWQgaWYgaXQncyBtYXJrZWQgImJ1c3kiIChzZWUKKyAqIG14c19kbWFfZW5hYmxlKCkpLgorICovCitpbnQgbXhzX2RtYV9yZWxlYXNlKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteHNfZG1hX2NoYW4gKnBjaGFuOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBjaGFuID0gbXhzX2RtYV9jaGFubmVscyArIGNoYW5uZWw7CisKKwlpZiAocGNoYW4tPmZsYWdzICYgTVhTX0RNQV9GTEFHU19CVVNZKQorCQlyZXR1cm4gLUVCVVNZOworCisJcGNoYW4tPmRldiA9IDA7CisJcGNoYW4tPmFjdGl2ZV9udW0gPSAwOworCXBjaGFuLT5wZW5kaW5nX251bSA9IDA7CisJcGNoYW4tPmZsYWdzICY9IH5NWFNfRE1BX0ZMQUdTX0FMTE9DQVRFRDsKKworCXJldHVybiAwOworfQorCisvKgorICogQWxsb2NhdGUgRE1BIGRlc2NyaXB0b3IKKyAqLworc3RydWN0IG14c19kbWFfZGVzYyAqbXhzX2RtYV9kZXNjX2FsbG9jKHZvaWQpCit7CisJc3RydWN0IG14c19kbWFfZGVzYyAqcGRlc2M7CisKKwlwZGVzYyA9IG1lbWFsaWduKE1YU19ETUFfQUxJR05NRU5ULCBzaXplb2Yoc3RydWN0IG14c19kbWFfZGVzYykpOworCisJaWYgKHBkZXNjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KHBkZXNjLCAwLCBzaXplb2YoKnBkZXNjKSk7CisJcGRlc2MtPmFkZHJlc3MgPSAoZG1hX2FkZHJfdClwZGVzYzsKKworCXJldHVybiBwZGVzYzsKK307CisKKy8qCisgKiBGcmVlIERNQSBkZXNjcmlwdG9yCisgKi8KK3ZvaWQgbXhzX2RtYV9kZXNjX2ZyZWUoc3RydWN0IG14c19kbWFfZGVzYyAqcGRlc2MpCit7CisJaWYgKHBkZXNjID09IE5VTEwpCisJCXJldHVybjsKKworCWZyZWUocGRlc2MpOworfQorCisvKgorICogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBjb21tYW5kIHdpdGhpbiBhIGRlc2NyaXB0b3IuCisgKi8KK3Vuc2lnbmVkIGludCBteHNfZG1hX2NtZF9hZGRyZXNzKHN0cnVjdCBteHNfZG1hX2Rlc2MgKmRlc2MpCit7CisJcmV0dXJuIGRlc2MtPmFkZHJlc3MgKyBvZmZzZXRvZihzdHJ1Y3QgbXhzX2RtYV9kZXNjLCBjbWQpOworfQorCisvKgorICogQ2hlY2sgaWYgZGVzY3JpcHRvciBpcyBvbiBhIGNoYW5uZWwncyBhY3RpdmUgbGlzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0YXRlIG9mIGEgZGVzY3JpcHRvcidzICJyZWFkeSIgZmxhZy4gVGhpcyBmbGFnIGlzCisgKiB1c3VhbGx5IHNldCBvbmx5IGlmIHRoZSBkZXNjcmlwdG9yIGFwcGVhcnMgb24gYSBjaGFubmVsJ3MgYWN0aXZlIGxpc3QuIFRoZQorICogZGVzY3JpcHRvciBtYXkgb3IgbWF5IG5vdCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGhhcmR3YXJlLgorICoKKyAqIFRoZSAicmVhZHkiIGZsYWcgaXMgc2V0IHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgc3VibWl0dGVkIHRvIGEgY2hhbm5lbCBieSBhCisgKiBjYWxsIHRvIG14c19kbWFfYXBwZW5kKCkgb3IgbXhzX2RtYV9hcHBlbmRfbGlzdCgpLiBUaGUgInJlYWR5IiBmbGFnIGlzCisgKiBjbGVhcmVkIHdoZW4gYSBwcm9jZXNzZWQgZGVzY3JpcHRvciBpcyBtb3ZlZCBvZmYgdGhlIGFjdGl2ZSBsaXN0IGJ5IGEgY2FsbAorICogdG8gbXhzX2RtYV9maW5pc2goKS4gVGhlICJyZWFkeSIgZmxhZyBpcyBOT1QgY2xlYXJlZCBpZiB0aGUgZGVzY3JpcHRvciBpcworICogYWJvcnRlZCBieSBhIGNhbGwgdG8gbXhzX2RtYV9kaXNhYmxlKCkuCisgKi8KK2ludCBteHNfZG1hX2Rlc2NfcGVuZGluZyhzdHJ1Y3QgbXhzX2RtYV9kZXNjICpwZGVzYykKK3sKKwlyZXR1cm4gcGRlc2MtPmZsYWdzICYgTVhTX0RNQV9ERVNDX1JFQURZOworfQorCisvKgorICogQWRkIGEgRE1BIGRlc2NyaXB0b3IgdG8gYSBjaGFubmVsLgorICoKKyAqIElmIHRoZSBkZXNjcmlwdG9yIGxpc3QgZm9yIHRoaXMgY2hhbm5lbCBpcyBub3QgZW1wdHksIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGUKKyAqIENIQUlOIGJpdCBhbmQgdGhlIE5FWFRDTURfQUREUiBmaWVsZHMgaW4gdGhlIGxhc3QgZGVzY3JpcHRvcidzIERNQSBjb21tYW5kIHNvCisgKiBpdCB3aWxsIGNoYWluIHRvIHRoZSBuZXcgZGVzY3JpcHRvcidzIGNvbW1hbmQuCisgKgorICogVGhlbiwgdGhpcyBmdW5jdGlvbiBtYXJrcyB0aGUgbmV3IGRlc2NyaXB0b3IgYXMgInJlYWR5LCIgYWRkcyBpdCB0byB0aGUgZW5kCisgKiBvZiB0aGUgYWN0aXZlIGRlc2NyaXB0b3IgbGlzdCwgYW5kIGluY3JlbWVudHMgdGhlIGNvdW50IG9mIHBlbmRpbmcKKyAqIGRlc2NyaXB0b3JzLgorICoKKyAqIFRoZSBNWFMgcGxhdGZvcm0gRE1BIHNvZnR3YXJlIGltcG9zZXMgc29tZSBydWxlcyBvbiBETUEgY29tbWFuZHMgdG8gbWFpbnRhaW4KKyAqIGltcG9ydGFudCBpbnZhcmlhbnRzLiBUaGVzZSBydWxlcyBhcmUgTk9UIGNoZWNrZWQsIGJ1dCB0aGV5IG11c3QgYmUgY2FyZWZ1bGx5CisgKiBhcHBsaWVkIGJ5IHNvZnR3YXJlIHRoYXQgdXNlcyBNWFMgRE1BIGNoYW5uZWxzLgorICoKKyAqIEludmFyaWFudDoKKyAqICAgICBUaGUgRE1BIGNoYW5uZWwncyBoYXJkd2FyZSBzZW1hcGhvcmUgbXVzdCByZWZsZWN0IHRoZSBudW1iZXIgb2YgRE1BCisgKiAgICAgY29tbWFuZHMgdGhlIGhhcmR3YXJlIHdpbGwgcHJvY2VzcywgYnV0IGhhcyBub3QgeWV0IGZpbmlzaGVkLgorICoKKyAqIEV4cGxhbmF0aW9uOgorICogICAgIEEgRE1BIGNoYW5uZWwgYmVnaW5zIHByb2Nlc3NpbmcgY29tbWFuZHMgd2hlbiBpdHMgaGFyZHdhcmUgc2VtYXBob3JlIGlzCisgKiAgICAgd3JpdHRlbiB3aXRoIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCBpdCBzdG9wcyBwcm9jZXNzaW5nIGNvbW1hbmRzCisgKiAgICAgd2hlbiB0aGUgc2VtYXBob3JlIHJldHVybnMgdG8gemVyby4KKyAqCisgKiAgICAgV2hlbiBhIGNoYW5uZWwgZmluaXNoZXMgYSBETUEgY29tbWFuZCwgaXQgd2lsbCBkZWNyZW1lbnQgaXRzIHNlbWFwaG9yZSBpZgorICogICAgIHRoZSBERUNSRU1FTlRfU0VNQVBIT1JFIGJpdCBpcyBzZXQgaW4gdGhhdCBjb21tYW5kJ3MgZmxhZ3MgYml0cy4KKyAqCisgKiAgICAgSW4gcHJpbmNpcGxlLCBpdCdzIG5vdCBuZWNlc3NhcnkgZm9yIHRoZSBERUNSRU1FTlRfU0VNQVBIT1JFIHRvIGJlIHNldCwKKyAqICAgICB1bmxlc3MgaXQgc3VpdHMgdGhlIHB1cnBvc2VzIG9mIHRoZSBzb2Z0d2FyZS4gRm9yIGV4YW1wbGUsIG9uZSBjb3VsZAorICogICAgIGNvbnN0cnVjdCBhIHNlcmllcyBvZiBmaXZlIERNQSBjb21tYW5kcywgd2l0aCB0aGUgREVDUkVNRU5UX1NFTUFQSE9SRQorICogICAgIGJpdCBzZXQgb25seSBpbiB0aGUgbGFzdCBvbmUuIFRoZW4sIHNldHRpbmcgdGhlIERNQSBjaGFubmVsJ3MgaGFyZHdhcmUKKyAqICAgICBzZW1hcGhvcmUgdG8gb25lIHdvdWxkIGNhdXNlIHRoZSBlbnRpcmUgc2VyaWVzIG9mIGZpdmUgY29tbWFuZHMgdG8gYmUKKyAqICAgICBwcm9jZXNzZWQuIEhvd2V2ZXIsIHRoaXMgZXhhbXBsZSB3b3VsZCB2aW9sYXRlIHRoZSBpbnZhcmlhbnQgZ2l2ZW4gYWJvdmUuCisgKgorICogUnVsZToKKyAqICAgIEFMTCBETUEgY29tbWFuZHMgTVVTVCBoYXZlIHRoZSBERUNSRU1FTlRfU0VNQVBIT1JFIGJpdCBzZXQgc28gdGhhdCB0aGUgRE1BCisgKiAgICBjaGFubmVsJ3MgaGFyZHdhcmUgc2VtYXBob3JlIHdpbGwgYmUgZGVjcmVtZW50ZWQgRVZFUlkgdGltZSBhIGNvbW1hbmQgaXMKKyAqICAgIHByb2Nlc3NlZC4KKyAqLworaW50IG14c19kbWFfZGVzY19hcHBlbmQoaW50IGNoYW5uZWwsIHN0cnVjdCBteHNfZG1hX2Rlc2MgKnBkZXNjKQoreworCXN0cnVjdCBteHNfZG1hX2NoYW4gKnBjaGFuOworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmxhc3Q7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGNoYW4gPSBteHNfZG1hX2NoYW5uZWxzICsgY2hhbm5lbDsKKworCXBkZXNjLT5jbWQubmV4dCA9IG14c19kbWFfY21kX2FkZHJlc3MocGRlc2MpOworCXBkZXNjLT5mbGFncyB8PSBNWFNfRE1BX0RFU0NfRklSU1QgfCBNWFNfRE1BX0RFU0NfTEFTVDsKKworCWlmICghbGlzdF9lbXB0eSgmcGNoYW4tPmFjdGl2ZSkpIHsKKwkJbGFzdCA9IGxpc3RfZW50cnkocGNoYW4tPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgbXhzX2RtYV9kZXNjLAorCQkJCQlub2RlKTsKKworCQlwZGVzYy0+ZmxhZ3MgJj0gfk1YU19ETUFfREVTQ19GSVJTVDsKKwkJbGFzdC0+ZmxhZ3MgJj0gfk1YU19ETUFfREVTQ19MQVNUOworCisJCWxhc3QtPmNtZC5uZXh0ID0gbXhzX2RtYV9jbWRfYWRkcmVzcyhwZGVzYyk7CisJCWxhc3QtPmNtZC5kYXRhIHw9IE1YU19ETUFfREVTQ19DSEFJTjsKKwl9CisJcGRlc2MtPmZsYWdzIHw9IE1YU19ETUFfREVTQ19SRUFEWTsKKwlpZiAocGRlc2MtPmZsYWdzICYgTVhTX0RNQV9ERVNDX0ZJUlNUKQorCQlwY2hhbi0+cGVuZGluZ19udW0rKzsKKwlsaXN0X2FkZF90YWlsKCZwZGVzYy0+bm9kZSwgJnBjaGFuLT5hY3RpdmUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHJpZXZlIHByb2Nlc3NlZCBETUEgZGVzY3JpcHRvcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBtb3ZlcyBhbGwgdGhlIGRlc2NyaXB0b3JzIGZyb20gdGhlIERNQSBjaGFubmVsJ3MgImRvbmUiIGxpc3QgdG8KKyAqIHRoZSBoZWFkIG9mIHRoZSBnaXZlbiBsaXN0LgorICovCitpbnQgbXhzX2RtYV9nZXRfZmluaXNoZWQoaW50IGNoYW5uZWwsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG14c19kbWFfY2hhbiAqcGNoYW47CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlwY2hhbiA9IG14c19kbWFfY2hhbm5lbHMgKyBjaGFubmVsOworCisJbGlzdF9zcGxpY2UoJnBjaGFuLT5kb25lLCBoZWFkKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2xlYW4gdXAgcHJvY2Vzc2VkIERNQSBkZXNjcmlwdG9ycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgcHJvY2Vzc2VkIERNQSBkZXNjcmlwdG9ycyBmcm9tIHRoZSAiYWN0aXZlIiBsaXN0LiBQYXNzCisgKiBpbiBhIG5vbi1OVUxMIGxpc3QgaGVhZCB0byBnZXQgdGhlIGRlc2NyaXB0b3JzIG1vdmVkIHRvIHlvdXIgbGlzdC4gUGFzcyBOVUxMCisgKiB0byBnZXQgdGhlIGRlc2NyaXB0b3JzIG1vdmVkIHRvIHRoZSBjaGFubmVsJ3MgImRvbmUiIGxpc3QuIERlc2NyaXB0b3JzIG9uCisgKiB0aGUgImRvbmUiIGxpc3QgY2FuIGJlIHJldHJpZXZlZCB3aXRoIG14c19kbWFfZ2V0X2ZpbmlzaGVkKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXJrcyB0aGUgRE1BIGNoYW5uZWwgYXMgIm5vdCBidXN5IiBpZiBubyB1bnByb2Nlc3NlZAorICogZGVzY3JpcHRvcnMgcmVtYWluIG9uIHRoZSAiYWN0aXZlIiBsaXN0LgorICovCitpbnQgbXhzX2RtYV9maW5pc2goaW50IGNoYW5uZWwsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJaW50IHNlbTsKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpwY2hhbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcTsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpwZGVzYzsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwY2hhbiA9IG14c19kbWFfY2hhbm5lbHMgKyBjaGFubmVsOworCisJc2VtID0gbXhzX2RtYV9yZWFkX3NlbWFwaG9yZShjaGFubmVsKTsKKwlpZiAoc2VtIDwgMCkKKwkJcmV0dXJuIHNlbTsKKworCWlmIChzZW0gPT0gcGNoYW4tPmFjdGl2ZV9udW0pCisJCXJldHVybiAwOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZwY2hhbi0+YWN0aXZlKSB7CisJCWlmICgocGNoYW4tPmFjdGl2ZV9udW0pIDw9IHNlbSkKKwkJCWJyZWFrOworCisJCXBkZXNjID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbXhzX2RtYV9kZXNjLCBub2RlKTsKKwkJcGRlc2MtPmZsYWdzICY9IH5NWFNfRE1BX0RFU0NfUkVBRFk7CisKKwkJaWYgKGhlYWQpCisJCQlsaXN0X21vdmVfdGFpbChwLCBoZWFkKTsKKwkJZWxzZQorCQkJbGlzdF9tb3ZlX3RhaWwocCwgJnBjaGFuLT5kb25lKTsKKworCQlpZiAocGRlc2MtPmZsYWdzICYgTVhTX0RNQV9ERVNDX0xBU1QpCisJCQlwY2hhbi0+YWN0aXZlX251bS0tOworCX0KKworCWlmIChzZW0gPT0gMCkKKwkJcGNoYW4tPmZsYWdzICY9IH5NWFNfRE1BX0ZMQUdTX0JVU1k7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhaXQgZm9yIERNQSBjaGFubmVsIHRvIGNvbXBsZXRlCisgKi8KK2ludCBteHNfZG1hX3dhaXRfY29tcGxldGUodWludDMyX3QgdGltZW91dCwgdW5zaWduZWQgaW50IGNoYW4pCit7CisJc3RydWN0IG14MjhfYXBiaF9yZWdzICphcGJoX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfYXBiaF9yZWdzICopTVhTX0FQQkhfQkFTRTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobXgyOF93YWl0X21hc2tfc2V0KCZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDFfcmVnLAorCQkJCTEgPDwgY2hhbiwgdGltZW91dCkpIHsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJbXhzX2RtYV9yZXNldChjaGFuKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEV4ZWN1dGUgdGhlIERNQSBjaGFubmVsCisgKi8KK2ludCBteHNfZG1hX2dvKGludCBjaGFuKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSAxMDAwMDsKKwlpbnQgcmV0OworCisJTElTVF9IRUFEKHRtcF9kZXNjX2xpc3QpOworCisJbXhzX2RtYV9lbmFibGVfaXJxKGNoYW4sIDEpOworCW14c19kbWFfZW5hYmxlKGNoYW4pOworCisJLyogV2FpdCBmb3IgRE1BIHRvIGZpbmlzaC4gKi8KKwlyZXQgPSBteHNfZG1hX3dhaXRfY29tcGxldGUodGltZW91dCwgY2hhbik7CisKKwkvKiBDbGVhciBvdXQgdGhlIGRlc2NyaXB0b3JzIHdlIGp1c3QgcmFuLiAqLworCW14c19kbWFfZmluaXNoKGNoYW4sICZ0bXBfZGVzY19saXN0KTsKKworCS8qIFNodXQgdGhlIERNQSBjaGFubmVsIGRvd24uICovCisJbXhzX2RtYV9hY2tfaXJxKGNoYW4pOworCW14c19kbWFfcmVzZXQoY2hhbik7CisJbXhzX2RtYV9lbmFibGVfaXJxKGNoYW4sIDApOworCW14c19kbWFfZGlzYWJsZShjaGFuKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBETUEgaGFyZHdhcmUKKyAqLworaW50IG14c19kbWFfaW5pdCh2b2lkKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJc3RydWN0IG14c19kbWFfY2hhbiAqcGNoYW47CisJaW50IHJldCwgY2hhbm5lbDsKKworCW14MjhfcmVzZXRfYmxvY2soJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMF9yZWcpOworCisjaWZkZWYgQ09ORklHX0FQQkhfRE1BX0JVUlNUOAorCXdyaXRlbChBUEJIX0NUUkwwX0FIQl9CVVJTVDhfRU4sCisJCSZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDBfc2V0KTsKKyNlbHNlCisJd3JpdGVsKEFQQkhfQ1RSTDBfQUhCX0JVUlNUOF9FTiwKKwkJJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMF9jbHIpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVBCSF9ETUFfQlVSU1QKKwl3cml0ZWwoQVBCSF9DVFJMMF9BUEJfQlVSU1RfRU4sCisJCSZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDBfc2V0KTsKKyNlbHNlCisJd3JpdGVsKEFQQkhfQ1RSTDBfQVBCX0JVUlNUX0VOLAorCQkmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwwX2Nscik7CisjZW5kaWYKKworCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBNWFNfTUFYX0RNQV9DSEFOTkVMUzsgY2hhbm5lbCsrKSB7CisJCXBjaGFuID0gbXhzX2RtYV9jaGFubmVscyArIGNoYW5uZWw7CisJCXBjaGFuLT5mbGFncyA9IE1YU19ETUFfRkxBR1NfVkFMSUQ7CisKKwkJcmV0ID0gbXhzX2RtYV9yZXF1ZXN0KGNoYW5uZWwpOworCisJCWlmIChyZXQpIHsKKwkJCXByaW50ZigiTVhTIERNQTogQ2FuJ3QgYWNxdWlyZSBETUEgY2hhbm5lbCAlaVxuIiwKKwkJCQljaGFubmVsKTsKKworCQkJZ290byBlcnI7CisJCX0KKworCQlteHNfZG1hX3Jlc2V0KGNoYW5uZWwpOworCQlteHNfZG1hX2Fja19pcnEoY2hhbm5lbCk7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoLS1jaGFubmVsID49IDApCisJCW14c19kbWFfcmVsZWFzZShjaGFubmVsKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9mcGdhL2l2bV9jb3JlLmMgYi9kcml2ZXJzL2ZwZ2EvaXZtX2NvcmUuYwppbmRleCAyYjVhNDg1Li5iNWE0N2QxIDEwMDc1NQotLS0gYS9kcml2ZXJzL2ZwZ2EvaXZtX2NvcmUuYworKysgYi9kcml2ZXJzL2ZwZ2EvaXZtX2NvcmUuYwpAQCAtMjEwMiw3ICsyMTAyLDYgQEAKIAl1bnNpZ25lZCBjaGFyIHVjU3RhdGUgICAgICAgICAgICAgPSAwOwogCXVuc2lnbmVkIHNob3J0IHVzRGVsYXkgICAgICAgICAgICA9IDA7CiAJdW5zaWduZWQgc2hvcnQgdXNUb2dnbGUgICAgICAgICAgID0gMDsKLQl1bnNpZ25lZCBjaGFyIHVzQnl0ZSAgICAgICAgICAgICAgPSAwOwogCiAJZ191c0ludGVsQnVmZmVyU2l6ZSA9ICh1bnNpZ25lZCBzaG9ydClpc3BWTURhdGFTaXplKCk7CiAKQEAgLTIxNzEsNyArMjE3MCw2IEBACiAJCXVjU3RhdGUgICAgICAgICAgICA9IDA7CiAJCXVzRGVsYXkgICAgICAgICAgICA9IDA7CiAJCXVzVG9nZ2xlICAgICAgICAgICA9IDA7Ci0JCXVzQnl0ZSAgICAgICAgICAgICA9IDA7CiAJCXVzQ29udGludWUJCSAgID0gMTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IGY1MDU4MTMuLmUyMmMwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTMwLDExICszMCwxMyBAQAogQ09CSlMtJChDT05GSUdfTUFSVkVMTF9HUElPKQkrPSBtdmdwaW8ubwogQ09CSlMtJChDT05GSUdfTUFSVkVMTF9NRlApCSs9IG12bWZwLm8KIENPQkpTLSQoQ09ORklHX01YQ19HUElPKQkrPSBteGNfZ3Bpby5vCitDT0JKUy0kKENPTkZJR19NWFNfR1BJTykJKz0gbXhzX2dwaW8ubwogQ09CSlMtJChDT05GSUdfUENBOTUzWCkJCSs9IHBjYTk1M3gubwogQ09CSlMtJChDT05GSUdfUENBOTY5OCkJCSs9IHBjYTk2OTgubwogQ09CSlMtJChDT05GSUdfUzVQKQkJKz0gczVwX2dwaW8ubwogQ09CSlMtJChDT05GSUdfVEVHUkEyX0dQSU8pCSs9IHRlZ3JhMl9ncGlvLm8KIENPQkpTLSQoQ09ORklHX0RBOFhYX0dQSU8pCSs9IGRhOHh4X2dwaW8ubworQ09CSlMtJChDT05GSUdfQUxURVJBX1BJTykJKz0gYWx0ZXJhX3Bpby5vCiAKIENPQkpTCTo9ICQoQ09CSlMteSkKIFNSQ1MgCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vYWx0ZXJhX3Bpby5jIGIvZHJpdmVycy9ncGlvL2FsdGVyYV9waW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAzNzYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL2FsdGVyYV9waW8uYwpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIERyaXZlciBmb3IgQWx0ZXJhJ3MgUElPIGlwIGNvcmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgIE1pc3NpbmcgTGluayBFbGVjdHJvbmljcworICogICAgICAgICAgICAgICAgICAgICBKb2FjaGltIEZvZXJzdGVyIDxqb2FjaGltQG1pc3NpbmdsaW5rZWxlY3Ryb25pY3MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFRvIHVzZSB0aGlzIGRyaXZlciwgaW4geW91ciBib2FyZCdzIGNvbmZpZy4gaGVhZGVyOgorICogI2RlZmluZSBDT05GSUdfQUxURVJBX1BJTworICogI2RlZmluZSBDT05GSUdfU1lTX0FMVEVSQV9QSU9fTlVNIDxudW1iZXItb2YtcGlvLWNvcmVzPgorICogI2RlZmluZSBDT05GSUdfU1lTX0FMVEVSQV9QSU9fR1BJT19OVU0gPHRvdGFsLW51bWJlci1vZi1ncGlvcz4KKyAqIEFuZCBpbiB5b3VyIGJvYXJkJ3MgZWFybHkgc2V0dXAgcm91dGluZToKKyAqIGFsdGVyYV9waW9faW5pdCg8YmFzZWFkZHI+LCA8d2lkdGg+LCAnaSd8J28nfCd0JywKKyAqICAgICAgICAgICAgICAgICA8cmVzZXQtdmFsdWU+LCA8bmVnLW1hc2s+LCAibGFiZWwiKTsKKyAqICAtICdpJ3wnbyd8J3QnOiBQSU8gaXMgaW5wdXQtb25seS9vdXRwdXQtb25seS90cmktc3RhdGUKKyAqICAtIDxyZXNldC12YWx1ZT46IGZvciBjb3JyZWN0IGluaXRpYWwgc3RhdHVzIGRpc3BsYXksIG91dHB1dC1vbmx5CisgKiAgLSA8bmVnLW1hc2s+IGlzIG1lYW50IHRvIGJlIHVzZWQgdG8gaW4gY2FzZXMgb2YgYWN0aXZlLWxvdworICogICAgR1BJT3MsIHN1Y2ggYXMgTEVEcyBhbmQgYnV0dG9ucyAob24vcHJlc3NlZCA9PSAwKS4gRWFjaCBiaXQKKyAqICAgIHdoaWNoIGlzIDEgaW4gPG5lZy1tYXNrPiBpbnZlcnRzIHRoZSBjb3JyZXNwb25kaW5nIEdQSU8ncyB2YWx1ZQorICogICAgYmVmb3JlIHNldC9hZnRlciBnZXQuIFNvOiBncGlvX3NldF92YWx1ZShncGlvLCAxKSA9PiBMRUQgb24gLgorICoKKyAqIERvIE5PVCBkZWZpbmUgQ09ORklHX1NZU19HUElPX0JBU0UgIQorICoKKyAqIE9wdGlvbmFsbHksIGluIHlvdXIgYm9hcmQncyBjb25maWcuIGhlYWRlcjoKKyAqIC0gVG8gZm9yY2UgYSBHUElPIG51bWJlcmluZyBzY2hlbWUgbGlrZSBpbiBMaW51eCAuLi4KKyAqICNkZWZpbmUgQ09ORklHX0dQSU9fRE9XTlRPX05VTUJFUklORworICogLi4uIHN0YXJ0aW5nIHdpdGggMjU1IChkZWZhdWx0KQorICogI2RlZmluZSBDT05GSUdfR1BJT19ET1dOVE9fTUFYIDI1NQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKworI2lmZGVmIENPTkZJR19HUElPX0RPV05UT19OVU1CRVJJTkcKKyNpZm5kZWYgQ09ORklHX0dQSU9fRE9XTlRPX01BWAorI2RlZmluZSBDT05GSUdfR1BJT19ET1dOVE9fTUFYIDI1NQorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBBTFRFUkFfUElPX0RBVEEJCTB4MAorI2RlZmluZSBBTFRFUkFfUElPX0RJUgkJMHg0CisKKyNkZWZpbmUgR1BJT19MQUJFTF9TSVpFCQk5CisKKworc3RhdGljIHN0cnVjdCBhbHRlcmFfcGlvIHsKKwl1MzIgYmFzZTsKKwl1OCB3aWR0aDsKKwljaGFyIGlvdDsKKwl1MzIgbmVnbWFzazsKKwl1MzIgc2hfZGF0YTsKKwl1MzIgc2hfZGlyOworCWludCBnaWR4OworCWNoYXIgbGFiZWxbR1BJT19MQUJFTF9TSVpFXTsKK30gcGlvc1tDT05GSUdfU1lTX0FMVEVSQV9QSU9fTlVNXTsKKworc3RhdGljIGludCBwaW9fbnVtOworCitzdGF0aWMgc3RydWN0IGFsdGVyYV9waW9fZ3BpbyB7CisJdW5zaWduZWQgbnVtOworCXN0cnVjdCBhbHRlcmFfcGlvICpwaW87CisJY2hhciByZXFsYWJlbFtHUElPX0xBQkVMX1NJWkVdOworfSBncGlvc1tDT05GSUdfU1lTX0FMVEVSQV9QSU9fR1BJT19OVU1dOworCitzdGF0aWMgaW50IHBpb19ncGlvX251bTsKKworCitzdGF0aWMgaW50IGFsdGVyYV9waW9fZ2lkeCh1bnNpZ25lZCBncGlvKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBpb19ncGlvX251bTsgKytpKSB7CisJCWlmIChncGlvID09IGdwaW9zW2ldLm51bSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSBwaW9fZ3Bpb19udW0pCisJCXJldHVybiAtMTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHN0cnVjdCBhbHRlcmFfcGlvICphbHRlcmFfcGlvX2dldF9hbmRfbWFzayh1bnNpZ25lZCBncGlvLCB1MzIgKm1hc2spCit7CisJaW50IGdpZHggPSBhbHRlcmFfcGlvX2dpZHgoZ3Bpbyk7CisJaWYgKGdpZHggPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobWFzaykKKwkJKm1hc2sgPSAxIDw8IChnaWR4IC0gZ3Bpb3NbZ2lkeF0ucGlvLT5naWR4KTsKKwlyZXR1cm4gZ3Bpb3NbZ2lkeF0ucGlvOworfQorCisjZGVmaW5lIGFsdGVyYV9waW9fdXNlX2dpZHgoX2dpZHgsIF9yZXFsYWJlbCkgXAorCXsgc3RybmNweShncGlvc1tfZ2lkeF0ucmVxbGFiZWwsIF9yZXFsYWJlbCwgR1BJT19MQUJFTF9TSVpFKTsgfQorI2RlZmluZSBhbHRlcmFfcGlvX3VudXNlX2dpZHgoX2dpZHgpIHsgZ3Bpb3NbX2dpZHhdLnJlcWxhYmVsWzBdID0gJ1wwJzsgfQorI2RlZmluZSBhbHRlcmFfcGlvX2lzX2dpZHhfdXNlZChfZ2lkeCkgKGdwaW9zW19naWR4XS5yZXFsYWJlbFswXSAhPSAnXDAnKQorCitzdGF0aWMgaW50IGFsdGVyYV9waW9fZ3Bpb19pbml0KHN0cnVjdCBhbHRlcmFfcGlvICpwaW8sIHU4IHdpZHRoKQoreworCXU4IGdpZHggPSBwaW9fZ3Bpb19udW07CisJaW50IGk7CisKKwlpZiAoIXdpZHRoKQorCQlyZXR1cm4gLTE7CisJaWYgKChwaW9fZ3Bpb19udW0gKyB3aWR0aCkgPiBDT05GSUdfU1lTX0FMVEVSQV9QSU9fR1BJT19OVU0pCisJCXJldHVybiAtMTsKKworCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgKytpKSB7CisjaWZkZWYgQ09ORklHX0dQSU9fRE9XTlRPX05VTUJFUklORworCQlncGlvc1twaW9fZ3Bpb19udW0gKyBpXS5udW0gPSBcCisJCQlDT05GSUdfR1BJT19ET1dOVE9fTUFYICsgMSAtIGdpZHggLSB3aWR0aCArIGk7CisjZWxzZQorCQlncGlvc1twaW9fZ3Bpb19udW0gKyBpXS5udW0gPSBwaW9fZ3Bpb19udW0gKyBpOworI2VuZGlmCisJCWdwaW9zW3Bpb19ncGlvX251bSArIGldLnBpbyA9IHBpbzsKKwkJYWx0ZXJhX3Bpb191bnVzZV9naWR4KHBpb19ncGlvX251bSArIGkpOworCX0KKwlwaW9fZ3Bpb19udW0gKz0gd2lkdGg7CisJcmV0dXJuIGdpZHg7Cit9CisKK2ludCBhbHRlcmFfcGlvX2luaXQodTMyIGJhc2UsIHU4IHdpZHRoLCBjaGFyIGlvdCwgdTMyIHJzdHZhbCwgdTMyIG5lZ21hc2ssCisJCSBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlpZiAocGlvX251bSA+PSBDT05GSUdfU1lTX0FMVEVSQV9QSU9fTlVNKQorCQlyZXR1cm4gLTE7CisKKwlwaW9zW3Bpb19udW1dLmJhc2UgPSBiYXNlOworCXBpb3NbcGlvX251bV0ud2lkdGggPSB3aWR0aDsKKwlwaW9zW3Bpb19udW1dLmlvdCA9IGlvdDsKKwlzd2l0Y2ggKGlvdCkgeworCWNhc2UgJ2knOgorCQkvKiBpbnB1dCBvbmx5ICovCisJCXBpb3NbcGlvX251bV0uc2hfZGlyID0gMDsKKwkJcGlvc1twaW9fbnVtXS5zaF9kYXRhID0gcmVhZGwoYmFzZSArIEFMVEVSQV9QSU9fREFUQSk7CisJCWJyZWFrOworCWNhc2UgJ28nOgorCQkvKiBvdXRwdXQgb25seSAqLworCQlwaW9zW3Bpb19udW1dLnNoX2RpciA9IDB4ZmZmZmZmZmYgJiAoKDEgPDwgd2lkdGgpIC0gMSk7CisJCXBpb3NbcGlvX251bV0uc2hfZGF0YSA9IHJzdHZhbDsKKwkJYnJlYWs7CisJY2FzZSAndCc6CisJCS8qIGJpZGlyLCB0cmktc3RhdGUgKi8KKwkJcGlvc1twaW9fbnVtXS5zaF9kaXIgPSByZWFkbChiYXNlICsgQUxURVJBX1BJT19ESVIpOworCQlwaW9zW3Bpb19udW1dLnNoX2RhdGEgPSByZWFkbChiYXNlICsgQUxURVJBX1BJT19EQVRBKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKwlwaW9zW3Bpb19udW1dLm5lZ21hc2sgPSBuZWdtYXNrICYgKCgxIDw8IHdpZHRoKSAtIDEpOworCXBpb3NbcGlvX251bV0uZ2lkeCA9IGFsdGVyYV9waW9fZ3Bpb19pbml0KCZwaW9zW3Bpb19udW1dLCB3aWR0aCk7CisJaWYgKHBpb3NbcGlvX251bV0uZ2lkeCA8IDApCisJCXJldHVybiAtMTsKKwlzdHJuY3B5KHBpb3NbcGlvX251bV0ubGFiZWwsIGxhYmVsLCBHUElPX0xBQkVMX1NJWkUpOworCXJldHVybiBwaW9fbnVtKys7Cit9CisKK3ZvaWQgYWx0ZXJhX3Bpb19pbmZvKHZvaWQpCit7CisJaW50IGk7CisJaW50IGo7CisJaW50IGdpZHg7CisJdTMyIG1hc2s7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGlvX251bTsgKytpKSB7CisJCXByaW50ZigiQWx0ZXJhIFBJTyAlIDJkLCBAMHglMDh4LCAiCisJCQkid2lkdGg6ICV1LCBsYWJlbDogJXNcbiIsCisJCSAgICAgICBpLCBwaW9zW2ldLmJhc2UsIHBpb3NbaV0ud2lkdGgsIHBpb3NbaV0ubGFiZWwpOworCQlnaWR4ID0gcGlvc1tpXS5naWR4OworCQlmb3IgKGogPSBnaWR4OyBqIDwgKGdpZHggKyBwaW9zW2ldLndpZHRoKTsgKytqKSB7CisJCQltYXNrID0gMSA8PCAoaiAtIGdpZHgpOworCQkJcHJpbnRmKCJcdEdQSU8gJSA0ZDogJXMgJXMgWyVjXSAlc1xuIiwKKwkJCQlncGlvc1tqXS5udW0sCisJCQkJZ3Bpb3Nbal0ucGlvLT5zaF9kaXIgJiBtYXNrID8gIm91dCIgOiAiIGluIiwKKwkJCQlncGlvX2dldF92YWx1ZShncGlvc1tqXS5udW0pID8gInNldCIgOiAiY2xyIiwKKwkJCQlhbHRlcmFfcGlvX2lzX2dpZHhfdXNlZChqKSA/ICd4JyA6ICcgJywKKwkJCQlncGlvc1tqXS5yZXFsYWJlbCk7CisJCX0KKwl9Cit9CisKKworaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlpbnQgZ2lkeCA9IGFsdGVyYV9waW9fZ2lkeChncGlvKTsKKwlpZiAoZ2lkeCA8IDApCisJCXJldHVybiBnaWR4OworCWlmIChhbHRlcmFfcGlvX2lzX2dpZHhfdXNlZChnaWR4KSkKKwkJcmV0dXJuIC0xOworCisJYWx0ZXJhX3Bpb191c2VfZ2lkeChnaWR4LCBsYWJlbCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKK3sKKwlpbnQgZ2lkeCA9IGFsdGVyYV9waW9fZ2lkeChncGlvKTsKKwlpZiAoZ2lkeCA8IDApCisJCXJldHVybiBnaWR4OworCWlmICghYWx0ZXJhX3Bpb19pc19naWR4X3VzZWQoZ2lkeCkpCisJCXJldHVybiAtMTsKKworCWFsdGVyYV9waW9fdW51c2VfZ2lkeChnaWR4KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCit7CisJdTMyIG1hc2s7CisJc3RydWN0IGFsdGVyYV9waW8gKnBpbzsKKworCXBpbyA9IGFsdGVyYV9waW9fZ2V0X2FuZF9tYXNrKGdwaW8sICZtYXNrKTsKKwlpZiAoIXBpbykKKwkJcmV0dXJuIC0xOworCWlmIChwaW8tPmlvdCA9PSAnbycpCisJCXJldHVybiAtMTsKKworCXdyaXRlbChwaW8tPnNoX2RpciAmPSB+bWFzaywgcGlvLT5iYXNlICsgQUxURVJBX1BJT19ESVIpOworCXJldHVybiAwOworfQorCitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwl1MzIgbWFzazsKKwlzdHJ1Y3QgYWx0ZXJhX3BpbyAqcGlvOworCisJcGlvID0gYWx0ZXJhX3Bpb19nZXRfYW5kX21hc2soZ3BpbywgJm1hc2spOworCWlmICghcGlvKQorCQlyZXR1cm4gLTE7CisJaWYgKHBpby0+aW90ID09ICdpJykKKwkJcmV0dXJuIC0xOworCisJdmFsdWUgPSAocGlvLT5uZWdtYXNrICYgbWFzaykgPyAhdmFsdWUgOiB2YWx1ZTsKKwlpZiAodmFsdWUpCisJCXBpby0+c2hfZGF0YSB8PSBtYXNrOworCWVsc2UKKwkJcGlvLT5zaF9kYXRhICY9IH5tYXNrOworCXdyaXRlbChwaW8tPnNoX2RhdGEsIHBpby0+YmFzZSArIEFMVEVSQV9QSU9fREFUQSk7CisJd3JpdGVsKHBpby0+c2hfZGlyIHw9IG1hc2ssIHBpby0+YmFzZSArIEFMVEVSQV9QSU9fRElSKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJdTMyIG1hc2s7CisJc3RydWN0IGFsdGVyYV9waW8gKnBpbzsKKwl1MzIgdmFsOworCisJcGlvID0gYWx0ZXJhX3Bpb19nZXRfYW5kX21hc2soZ3BpbywgJm1hc2spOworCWlmICghcGlvKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKHBpby0+c2hfZGlyICYgbWFzaykgfHwgKHBpby0+aW90ID09ICdvJykpCisJCXZhbCA9IHBpby0+c2hfZGF0YSAmIG1hc2s7CisJZWxzZQorCQl2YWwgPSByZWFkbChwaW8tPmJhc2UgKyBBTFRFUkFfUElPX0RBVEEpICYgbWFzazsKKwlyZXR1cm4gKHBpby0+bmVnbWFzayAmIG1hc2spID8gIXZhbCA6IHZhbDsKK30KKwordm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJdTMyIG1hc2s7CisJc3RydWN0IGFsdGVyYV9waW8gKnBpbzsKKworCXBpbyA9IGFsdGVyYV9waW9fZ2V0X2FuZF9tYXNrKGdwaW8sICZtYXNrKTsKKwlpZiAoIXBpbykKKwkJcmV0dXJuOworCWlmIChwaW8tPmlvdCA9PSAnaScpCisJCXJldHVybjsKKworCXZhbHVlID0gKHBpby0+bmVnbWFzayAmIG1hc2spID8gIXZhbHVlIDogdmFsdWU7CisJaWYgKHZhbHVlKQorCQlwaW8tPnNoX2RhdGEgfD0gbWFzazsKKwllbHNlCisJCXBpby0+c2hfZGF0YSAmPSB+bWFzazsKKwl3cml0ZWwocGlvLT5zaF9kYXRhLCBwaW8tPmJhc2UgKyBBTFRFUkFfUElPX0RBVEEpOworCXJldHVybjsKK30KKworaW50IGdwaW9faXNfdmFsaWQoaW50IG51bWJlcikKK3sKKwlpbnQgZ2lkeCA9IGFsdGVyYV9waW9fZ2lkeChudW1iZXIpOworCisJaWYgKGdpZHggPCAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9teHNfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL214c19ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlOTU5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9teHNfZ3Bpby5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBHUElPIGNvbnRyb2wgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxuZXRkZXYuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pb211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisKKyNpZglkZWZpbmVkKENPTkZJR19NWDIzKQorI2RlZmluZQlQSU5DVFJMX0JBTktTCQkzCisjZGVmaW5lCVBJTkNUUkxfRE9VVChuKQkJKDB4MDUwMCArICgobikgKiAweDEwKSkKKyNkZWZpbmUJUElOQ1RSTF9ESU4obikJCSgweDA2MDAgKyAoKG4pICogMHgxMCkpCisjZGVmaW5lCVBJTkNUUkxfRE9FKG4pCQkoMHgwNzAwICsgKChuKSAqIDB4MTApKQorI2RlZmluZQlQSU5DVFJMX1BJTjJJUlEobikJKDB4MDgwMCArICgobikgKiAweDEwKSkKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTihuKQkoMHgwOTAwICsgKChuKSAqIDB4MTApKQorI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQobikJKDB4MGMwMCArICgobikgKiAweDEwKSkKKyNlbGlmCWRlZmluZWQoQ09ORklHX01YMjgpCisjZGVmaW5lCVBJTkNUUkxfQkFOS1MJCTUKKyNkZWZpbmUJUElOQ1RSTF9ET1VUKG4pCQkoMHgwNzAwICsgKChuKSAqIDB4MTApKQorI2RlZmluZQlQSU5DVFJMX0RJTihuKQkJKDB4MDkwMCArICgobikgKiAweDEwKSkKKyNkZWZpbmUJUElOQ1RSTF9ET0UobikJCSgweDBiMDAgKyAoKG4pICogMHgxMCkpCisjZGVmaW5lCVBJTkNUUkxfUElOMklSUShuKQkoMHgxMDAwICsgKChuKSAqIDB4MTApKQorI2RlZmluZQlQSU5DVFJMX0lSUUVOKG4pCSgweDExMDAgKyAoKG4pICogMHgxMCkpCisjZGVmaW5lCVBJTkNUUkxfSVJRU1RBVChuKQkoMHgxNDAwICsgKChuKSAqIDB4MTApKQorI2Vsc2UKKyNlcnJvciAiUGxlYXNlIHNlbGVjdCBDT05GSUdfTVgyMyBvciBDT05GSUdfTVgyOCIKKyNlbmRpZgorCisjZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDAKKyNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDEKKyNkZWZpbmUgR1BJT19JTlRfUklTRV9FREdFCTB4MgorI2RlZmluZSBHUElPX0lOVF9ISUdIX0xFVgkweDMKKyNkZWZpbmUgR1BJT19JTlRfTEVWX01BU0sJKDEgPDwgMCkKKyNkZWZpbmUgR1BJT19JTlRfUE9MX01BU0sJKDEgPDwgMSkKKwordm9pZCBteHNfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUElOQ1RSTF9CQU5LUzsgaSsrKSB7CisJCXdyaXRlbCgwLCBNWFNfUElOQ1RSTF9CQVNFICsgUElOQ1RSTF9QSU4ySVJRKGkpKTsKKwkJd3JpdGVsKDAsIE1YU19QSU5DVFJMX0JBU0UgKyBQSU5DVFJMX0lSUUVOKGkpKTsKKwkJLyogVXNlIFNDVCBhZGRyZXNzIGhlcmUgdG8gY2xlYXIgdGhlIElSUVNUQVQgYml0cyAqLworCQl3cml0ZWwoMHhmZmZmZmZmZiwgTVhTX1BJTkNUUkxfQkFTRSArIFBJTkNUUkxfSVJRU1RBVChpKSArIDgpOworCX0KK30KKworaW50IGdwaW9fZ2V0X3ZhbHVlKGludCBncCkKK3sKKwl1aW50MzJfdCBiYW5rID0gUEFEX0JBTksoZ3ApOworCXVpbnQzMl90IG9mZnNldCA9IFBJTkNUUkxfRElOKGJhbmspOworCXN0cnVjdCBteDI4X3JlZ2lzdGVyICpyZWcgPQorCQkoc3RydWN0IG14MjhfcmVnaXN0ZXIgKikoTVhTX1BJTkNUUkxfQkFTRSArIG9mZnNldCk7CisKKwlyZXR1cm4gKHJlYWRsKCZyZWctPnJlZykgPj4gUEFEX1BJTihncCkpICYgMTsKK30KKwordm9pZCBncGlvX3NldF92YWx1ZShpbnQgZ3AsIGludCB2YWx1ZSkKK3sKKwl1aW50MzJfdCBiYW5rID0gUEFEX0JBTksoZ3ApOworCXVpbnQzMl90IG9mZnNldCA9IFBJTkNUUkxfRE9VVChiYW5rKTsKKwlzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnID0KKwkJKHN0cnVjdCBteDI4X3JlZ2lzdGVyICopKE1YU19QSU5DVFJMX0JBU0UgKyBvZmZzZXQpOworCisJaWYgKHZhbHVlKQorCQl3cml0ZWwoMSA8PCBQQURfUElOKGdwKSwgJnJlZy0+cmVnX3NldCk7CisJZWxzZQorCQl3cml0ZWwoMSA8PCBQQURfUElOKGdwKSwgJnJlZy0+cmVnX2Nscik7Cit9CisKK2ludCBncGlvX2RpcmVjdGlvbl9pbnB1dChpbnQgZ3ApCit7CisJdWludDMyX3QgYmFuayA9IFBBRF9CQU5LKGdwKTsKKwl1aW50MzJfdCBvZmZzZXQgPSBQSU5DVFJMX0RPRShiYW5rKTsKKwlzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnID0KKwkJKHN0cnVjdCBteDI4X3JlZ2lzdGVyICopKE1YU19QSU5DVFJMX0JBU0UgKyBvZmZzZXQpOworCisJd3JpdGVsKDEgPDwgUEFEX1BJTihncCksICZyZWctPnJlZ19jbHIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQoaW50IGdwLCBpbnQgdmFsdWUpCit7CisJdWludDMyX3QgYmFuayA9IFBBRF9CQU5LKGdwKTsKKwl1aW50MzJfdCBvZmZzZXQgPSBQSU5DVFJMX0RPRShiYW5rKTsKKwlzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnID0KKwkJKHN0cnVjdCBteDI4X3JlZ2lzdGVyICopKE1YU19QSU5DVFJMX0JBU0UgKyBvZmZzZXQpOworCisJd3JpdGVsKDEgPDwgUEFEX1BJTihncCksICZyZWctPnJlZ19zZXQpOworCisJZ3Bpb19zZXRfdmFsdWUoZ3AsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitpbnQgZ3Bpb19yZXF1ZXN0KGludCBncCwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJaWYgKFBBRF9CQU5LKGdwKSA+IFBJTkNUUkxfQkFOS1MpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ3Bpb19mcmVlKGludCBncCkKK3sKK30KKwordm9pZCBncGlvX3RvZ2dsZV92YWx1ZShpbnQgZ3ApCit7CisJZ3Bpb19zZXRfdmFsdWUoZ3AsICFncGlvX2dldF92YWx1ZShncCkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk2OTguYyBiL2RyaXZlcnMvZ3Bpby9wY2E5Njk4LmMKaW5kZXggYjk0NmVmYS4uZmU2ZDJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BjYTk2OTguYworKysgYi9kcml2ZXJzL2dwaW8vcGNhOTY5OC5jCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxwY2E5Njk4Lmg+CiAKIC8qCkBAIC0zOSwxOSArNDAsMjAgQEAKICNkZWZpbmUgUENBOTY5OF9SRUdfQ09ORklHCQkweDE4CiAKICNkZWZpbmUgUENBOTY5OF9CVUZGRVJfU0laRQkJNQorI2RlZmluZSBQQ0E5Njk4X0dQSU9fQ09VTlQJCTQwCiAKLXN0YXRpYyBpbnQgcGNhOTY5OF9yZWFkNDAodTggY2hpcCwgdTggb2Zmc2V0LCB1OCAqYnVmZmVyKQorc3RhdGljIGludCBwY2E5Njk4X3JlYWQ0MCh1OCBhZGRyLCB1OCBvZmZzZXQsIHU4ICpidWZmZXIpCiB7CiAJdTggY29tbWFuZCA9IG9mZnNldCB8IDB4ODA7ICAvKiBhdXRvaW5jcmVtZW50ICovCiAKLQlyZXR1cm4gaTJjX3JlYWQoY2hpcCwgY29tbWFuZCwgMSwgYnVmZmVyLCBQQ0E5Njk4X0JVRkZFUl9TSVpFKTsKKwlyZXR1cm4gaTJjX3JlYWQoYWRkciwgY29tbWFuZCwgMSwgYnVmZmVyLCBQQ0E5Njk4X0JVRkZFUl9TSVpFKTsKIH0KIAotc3RhdGljIGludCBwY2E5Njk4X3dyaXRlNDAodTggY2hpcCwgdTggb2Zmc2V0LCB1OCAqYnVmZmVyKQorc3RhdGljIGludCBwY2E5Njk4X3dyaXRlNDAodTggYWRkciwgdTggb2Zmc2V0LCB1OCAqYnVmZmVyKQogewogCXU4IGNvbW1hbmQgPSBvZmZzZXQgfCAweDgwOyAgLyogYXV0b2luY3JlbWVudCAqLwogCi0JcmV0dXJuIGkyY193cml0ZShjaGlwLCBjb21tYW5kLCAxLCBidWZmZXIsIFBDQTk2OThfQlVGRkVSX1NJWkUpOworCXJldHVybiBpMmNfd3JpdGUoYWRkciwgY29tbWFuZCwgMSwgYnVmZmVyLCBQQ0E5Njk4X0JVRkZFUl9TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgcGNhOTY5OF9zZXRfYml0KHVuc2lnbmVkIGdwaW8sIHU4ICpidWZmZXIsIHVuc2lnbmVkIHZhbHVlKQpAQCAtNjUsNDEgKzY3LDU5IEBACiAJCWJ1ZmZlcltieXRlXSAmPSB+KDEgPDwgYml0KTsKIH0KIAotaW50IHBjYTk2OThfZGlyZWN0aW9uX2lucHV0KHU4IGNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK2ludCBwY2E5Njk4X3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCit7CisJaWYgKGdwaW8gPj0gUENBOTY5OF9HUElPX0NPVU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCit2b2lkIHBjYTk2OThfZnJlZSh1bnNpZ25lZCBncGlvKQoreworfQorCitpbnQgcGNhOTY5OF9kaXJlY3Rpb25faW5wdXQodTggYWRkciwgdW5zaWduZWQgZ3BpbykKIHsKIAl1OCBkYXRhW1BDQTk2OThfQlVGRkVSX1NJWkVdOwogCWludCByZXM7CiAKLQlyZXMgPSBwY2E5Njk4X3JlYWQ0MChjaGlwLCBQQ0E5Njk4X1JFR19DT05GSUcsIGRhdGEpOworCXJlcyA9IHBjYTk2OThfcmVhZDQwKGFkZHIsIFBDQTk2OThfUkVHX0NPTkZJRywgZGF0YSk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCXBjYTk2OThfc2V0X2JpdChvZmZzZXQsIGRhdGEsIDEpOwotCXJldHVybiBwY2E5Njk4X3dyaXRlNDAoY2hpcCwgUENBOTY5OF9SRUdfQ09ORklHLCBkYXRhKTsKKwlwY2E5Njk4X3NldF9iaXQoZ3BpbywgZGF0YSwgMSk7CisKKwlyZXR1cm4gcGNhOTY5OF93cml0ZTQwKGFkZHIsIFBDQTk2OThfUkVHX0NPTkZJRywgZGF0YSk7CiB9CiAKLWludCBwY2E5Njk4X2RpcmVjdGlvbl9vdXRwdXQodTggY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoraW50IHBjYTk2OThfZGlyZWN0aW9uX291dHB1dCh1OCBhZGRyLCB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJdTggZGF0YVtQQ0E5Njk4X0JVRkZFUl9TSVpFXTsKIAlpbnQgcmVzOwogCi0JcmVzID0gcGNhOTY5OF9yZWFkNDAoY2hpcCwgUENBOTY5OF9SRUdfQ09ORklHLCBkYXRhKTsKKwlyZXMgPSBwY2E5Njk4X3NldF92YWx1ZShhZGRyLCBncGlvLCB2YWx1ZSk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCXBjYTk2OThfc2V0X2JpdChvZmZzZXQsIGRhdGEsIDApOwotCXJldHVybiBwY2E5Njk4X3dyaXRlNDAoY2hpcCwgUENBOTY5OF9SRUdfQ09ORklHLCBkYXRhKTsKKwlyZXMgPSBwY2E5Njk4X3JlYWQ0MChhZGRyLCBQQ0E5Njk4X1JFR19DT05GSUcsIGRhdGEpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlwY2E5Njk4X3NldF9iaXQoZ3BpbywgZGF0YSwgMCk7CisKKwlyZXR1cm4gcGNhOTY5OF93cml0ZTQwKGFkZHIsIFBDQTk2OThfUkVHX0NPTkZJRywgZGF0YSk7CiB9CiAKLWludCBwY2E5Njk4X2dldF9pbnB1dCh1OCBjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCitpbnQgcGNhOTY5OF9nZXRfdmFsdWUodTggYWRkciwgdW5zaWduZWQgZ3BpbykKIHsKLQl1bnNpZ25lZCBjb25maWdfYnl0ZSA9IG9mZnNldCAvIDg7Ci0JdW5zaWduZWQgY29uZmlnX2JpdCA9IG9mZnNldCAlIDg7CisJdW5zaWduZWQgY29uZmlnX2J5dGUgPSBncGlvIC8gODsKKwl1bnNpZ25lZCBjb25maWdfYml0ID0gZ3BpbyAlIDg7CiAJdW5zaWduZWQgdmFsdWU7CiAJdTggZGF0YVtQQ0E5Njk4X0JVRkZFUl9TSVpFXTsKIAlpbnQgcmVzOwogCi0JcmVzID0gcGNhOTY5OF9yZWFkNDAoY2hpcCwgUENBOTY5OF9SRUdfSU5QVVQsIGRhdGEpOworCXJlcyA9IHBjYTk2OThfcmVhZDQwKGFkZHIsIFBDQTk2OThfUkVHX0lOUFVULCBkYXRhKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gLTE7CiAKQEAgLTEwOCwxNiArMTI4LDE2IEBACiAJcmV0dXJuICEhdmFsdWU7CiB9CiAKLWludCBwY2E5Njk4X3NldF9vdXRwdXQodTggY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCitpbnQgcGNhOTY5OF9zZXRfdmFsdWUodTggYWRkciwgdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewogCXU4IGRhdGFbUENBOTY5OF9CVUZGRVJfU0laRV07CiAJaW50IHJlczsKIAotCXJlcyA9IHBjYTk2OThfcmVhZDQwKGNoaXAsIFBDQTk2OThfUkVHX09VVFBVVCwgZGF0YSk7CisJcmVzID0gcGNhOTY5OF9yZWFkNDAoYWRkciwgUENBOTY5OF9SRUdfT1VUUFVULCBkYXRhKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCi0JbWVtc2V0KGRhdGEsIHNpemVvZihkYXRhKSwgMCk7Ci0JcGNhOTY5OF9zZXRfYml0KG9mZnNldCwgZGF0YSwgdmFsdWUpOwotCXJldHVybiBwY2E5Njk4X3dyaXRlNDAoY2hpcCwgUENBOTY5OF9SRUdfT1VUUFVULCBkYXRhKTsKKwlwY2E5Njk4X3NldF9iaXQoZ3BpbywgZGF0YSwgdmFsdWUpOworCisJcmV0dXJuIHBjYTk2OThfd3JpdGU0MChhZGRyLCBQQ0E5Njk4X1JFR19PVVRQVVQsIGRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9NYWtlZmlsZQppbmRleCBhNDgwNDdhLi41MDRkYjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9NYWtlZmlsZQpAQCAtMzEsNiArMzEsNyBAQAogQ09CSlMtJChDT05GSUdfSTJDX01WVFdTSSkgKz0gbXZ0d3NpLm8KIENPQkpTLSQoQ09ORklHX0kyQ19NVikgKz0gbXZfaTJjLm8KIENPQkpTLSQoQ09ORklHX0kyQ19NWEMpICs9IG14Y19pMmMubworQ09CSlMtJChDT05GSUdfSTJDX01YUykgKz0gbXhzX2kyYy5vCiBDT0JKUy0kKENPTkZJR19EUklWRVJfT01BUDE1MTBfSTJDKSArPSBvbWFwMTUxMF9pMmMubwogQ09CSlMtJChDT05GSUdfRFJJVkVSX09NQVAyNFhYX0kyQykgKz0gb21hcDI0eHhfaTJjLm8KIENPQkpTLSQoQ09ORklHX0RSSVZFUl9PTUFQMzRYWF9JMkMpICs9IG9tYXAyNHh4X2kyYy5vCkBAIC00Miw2ICs0Myw3IEBACiBDT0JKUy0kKENPTkZJR19TUEVBUl9JMkMpICs9IHNwcl9pMmMubwogQ09CSlMtJChDT05GSUdfVFNJMTA4X0kyQykgKz0gdHNpMTA4X2kyYy5vCiBDT0JKUy0kKENPTkZJR19VODUwMF9JMkMpICs9IHU4NTAwX2kyYy5vCitDT0JKUy0kKENPTkZJR19TSF9JMkMpICs9IHNoX2kyYy5vCiAKIENPQkpTCTo9ICQoQ09CSlMteSkKIFNSQ1MJOj0gJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2RhdmluY2lfaTJjLmMgYi9kcml2ZXJzL2kyYy9kYXZpbmNpX2kyYy5jCmluZGV4IDVlMzQwNmQuLjJhYmRkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2RhdmluY2lfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvZGF2aW5jaV9pMmMuYwpAQCAtNzgsMTMgKzc4LDExIEBACiAKIHZvaWQgZmx1c2hfcngodm9pZCkKIHsKLQlpbnQJZHVtbXk7Ci0KIAl3aGlsZSAoMSkgewogCQlpZiAoIShSRUcoSTJDX1NUQVQpICYgSTJDX1NUQVRfUlJEWSkpCiAJCQlicmVhazsKIAotCQlkdW1teSA9IFJFRyhJMkNfRFJSKTsKKwkJUkVHKEkyQ19EUlIpOwogCQlSRUcoSTJDX1NUQVQpID0gSTJDX1NUQVRfUlJEWTsKIAkJdWRlbGF5KDEwMDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2ZzbF9pMmMuYyBiL2RyaXZlcnMvaTJjL2ZzbF9pMmMuYwppbmRleCAyNThiZTBhLi41YjAxN2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9mc2xfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvZnNsX2kyYy5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIHZvaWQKIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkKQogewotCXN0cnVjdCBmc2xfaTJjICpkZXY7CisJY29uc3Qgc3RydWN0IGZzbF9pMmMgKmRldjsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKIAlpbnQgYnVzX251bSwgaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvbXhzX2kyYy5jIGIvZHJpdmVycy9pMmMvbXhzX2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmVhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9teHNfaTJjLmMKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IEkyQyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBQYXJ0bHkgYmFzZWQgb24gTGludXgga2VybmVsIGkyYy1teHMuYyBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgV29sZnJhbSBTYW5nLCBQZW5ndXRyb25peCBlLksuCisgKgorICogV2hpY2ggd2FzIGJhc2VkIG9uIGEgKG5vbi13b3JraW5nKSBkcml2ZXIgd2hpY2ggd2FzOgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKworI2RlZmluZQlNWFNfSTJDX01BWF9USU1FT1VUCTEwMDAwMDAKKwordm9pZCBteHNfaTJjX3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IG14MjhfaTJjX3JlZ3MgKmkyY19yZWdzID0gKHN0cnVjdCBteDI4X2kyY19yZWdzICopTVhTX0kyQzBfQkFTRTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXgyOF9yZXNldF9ibG9jaygmaTJjX3JlZ3MtPmh3X2kyY19jdHJsMF9yZWcpOworCWlmIChyZXQpIHsKKwkJZGVidWcoIk1YUyBJMkM6IEJsb2NrIHJlc2V0IHRpbWVvdXRcbiIpOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsKEkyQ19DVFJMMV9EQVRBX0VOR0lORV9DTVBMVF9JUlEgfCBJMkNfQ1RSTDFfTk9fU0xBVkVfQUNLX0lSUSB8CisJCUkyQ19DVFJMMV9FQVJMWV9URVJNX0lSUSB8IEkyQ19DVFJMMV9NQVNURVJfTE9TU19JUlEgfAorCQlJMkNfQ1RSTDFfU0xBVkVfU1RPUF9JUlEgfCBJMkNfQ1RSTDFfU0xBVkVfSVJRLAorCQkmaTJjX3JlZ3MtPmh3X2kyY19jdHJsMV9jbHIpOworCisJd3JpdGVsKEkyQ19RVUVVRUNUUkxfUElPX1FVRVVFX01PREUsICZpMmNfcmVncy0+aHdfaTJjX3F1ZXVlY3RybF9zZXQpOworfQorCit2b2lkIG14c19pMmNfc2V0dXBfcmVhZCh1aW50OF90IGNoaXAsIGludCBsZW4pCit7CisJc3RydWN0IG14MjhfaTJjX3JlZ3MgKmkyY19yZWdzID0gKHN0cnVjdCBteDI4X2kyY19yZWdzICopTVhTX0kyQzBfQkFTRTsKKworCXdyaXRlbChJMkNfUVVFVUVDTURfUkVUQUlOX0NMT0NLIHwgSTJDX1FVRVVFQ01EX1BSRV9TRU5EX1NUQVJUIHwKKwkJSTJDX1FVRVVFQ01EX01BU1RFUl9NT0RFIHwgSTJDX1FVRVVFQ01EX0RJUkVDVElPTiB8CisJCSgxIDw8IEkyQ19RVUVVRUNNRF9YRkVSX0NPVU5UX09GRlNFVCksCisJCSZpMmNfcmVncy0+aHdfaTJjX3F1ZXVlY21kKTsKKworCXdyaXRlbCgoY2hpcCA8PCAxKSB8IDEsICZpMmNfcmVncy0+aHdfaTJjX2RhdGEpOworCisJd3JpdGVsKEkyQ19RVUVVRUNNRF9TRU5EX05BS19PTl9MQVNUIHwgSTJDX1FVRVVFQ01EX01BU1RFUl9NT0RFIHwKKwkJKGxlbiA8PCBJMkNfUVVFVUVDTURfWEZFUl9DT1VOVF9PRkZTRVQpIHwKKwkJSTJDX1FVRVVFQ01EX1BPU1RfU0VORF9TVE9QLCAmaTJjX3JlZ3MtPmh3X2kyY19xdWV1ZWNtZCk7CisKKwl3cml0ZWwoSTJDX1FVRVVFQ1RSTF9RVUVVRV9SVU4sICZpMmNfcmVncy0+aHdfaTJjX3F1ZXVlY3RybF9zZXQpOworfQorCit2b2lkIG14c19pMmNfd3JpdGUodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwKKwkJCXVjaGFyICpidWYsIGludCBibGVuLCBpbnQgc3RvcCkKK3sKKwlzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqaTJjX3JlZ3MgPSAoc3RydWN0IG14MjhfaTJjX3JlZ3MgKilNWFNfSTJDMF9CQVNFOworCXVpbnQzMl90IGRhdGE7CisJaW50IGksIHJlbWFpbiwgb2ZmOworCisJaWYgKChhbGVuID4gNCkgfHwgKGFsZW4gPT0gMCkpIHsKKwkJZGVidWcoIk1YUyBJMkM6IEludmFsaWQgYWRkcmVzcyBsZW5ndGhcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHN0b3ApCisJCXN0b3AgPSBJMkNfUVVFVUVDTURfUE9TVF9TRU5EX1NUT1A7CisKKwl3cml0ZWwoSTJDX1FVRVVFQ01EX1BSRV9TRU5EX1NUQVJUIHwKKwkJSTJDX1FVRVVFQ01EX01BU1RFUl9NT0RFIHwgSTJDX1FVRVVFQ01EX0RJUkVDVElPTiB8CisJCSgoYmxlbiArIGFsZW4gKyAxKSA8PCBJMkNfUVVFVUVDTURfWEZFUl9DT1VOVF9PRkZTRVQpIHwgc3RvcCwKKwkJJmkyY19yZWdzLT5od19pMmNfcXVldWVjbWQpOworCisJZGF0YSA9IChjaGlwIDw8IDEpIDw8IDI0OworCisJZm9yIChpID0gMDsgaSA8IGFsZW47IGkrKykgeworCQlkYXRhID4+PSA4OworCQlkYXRhIHw9ICgoY2hhciAqKSZhZGRyKVtpXSA8PCAyNDsKKwkJaWYgKChpICYgMykgPT0gMikKKwkJCXdyaXRlbChkYXRhLCAmaTJjX3JlZ3MtPmh3X2kyY19kYXRhKTsKKwl9CisKKwlvZmYgPSBpOworCWZvciAoOyBpIDwgb2ZmICsgYmxlbjsgaSsrKSB7CisJCWRhdGEgPj49IDg7CisJCWRhdGEgfD0gYnVmW2kgLSBvZmZdIDw8IDI0OworCQlpZiAoKGkgJiAzKSA9PSAyKQorCQkJd3JpdGVsKGRhdGEsICZpMmNfcmVncy0+aHdfaTJjX2RhdGEpOworCX0KKworCXJlbWFpbiA9IDI0IC0gKChpICYgMykgKiA4KTsKKwlpZiAocmVtYWluKQorCQl3cml0ZWwoZGF0YSA+PiByZW1haW4sICZpMmNfcmVncy0+aHdfaTJjX2RhdGEpOworCisJd3JpdGVsKEkyQ19RVUVVRUNUUkxfUVVFVUVfUlVOLCAmaTJjX3JlZ3MtPmh3X2kyY19xdWV1ZWN0cmxfc2V0KTsKK30KKworaW50IG14c19pMmNfd2FpdF9mb3JfYWNrKHZvaWQpCit7CisJc3RydWN0IG14MjhfaTJjX3JlZ3MgKmkyY19yZWdzID0gKHN0cnVjdCBteDI4X2kyY19yZWdzICopTVhTX0kyQzBfQkFTRTsKKwl1aW50MzJfdCB0bXA7CisJaW50IHRpbWVvdXQgPSBNWFNfSTJDX01BWF9USU1FT1VUOworCisJZm9yICg7OykgeworCQl0bXAgPSByZWFkbCgmaTJjX3JlZ3MtPmh3X2kyY19jdHJsMSk7CisJCWlmICh0bXAgJiBJMkNfQ1RSTDFfTk9fU0xBVkVfQUNLX0lSUSkgeworCQkJZGVidWcoIk1YUyBJMkM6IE5vIHNsYXZlIEFDS1xuIik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmICh0bXAgJiAoCisJCQlJMkNfQ1RSTDFfRUFSTFlfVEVSTV9JUlEgfCBJMkNfQ1RSTDFfTUFTVEVSX0xPU1NfSVJRIHwKKwkJCUkyQ19DVFJMMV9TTEFWRV9TVE9QX0lSUSB8IEkyQ19DVFJMMV9TTEFWRV9JUlEpKSB7CisJCQlkZWJ1ZygiTVhTIEkyQzogRXJyb3IgKENUUkwxID0gJTA4eClcbiIsIHRtcCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmICh0bXAgJiBJMkNfQ1RSTDFfREFUQV9FTkdJTkVfQ01QTFRfSVJRKQorCQkJYnJlYWs7CisKKwkJaWYgKCF0aW1lb3V0LS0pIHsKKwkJCWRlYnVnKCJNWFMgSTJDOiBPcGVyYXRpb24gdGltZWQgb3V0XG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJbXhzX2kyY19yZXNldCgpOworCXJldHVybiAxOworfQorCitpbnQgaTJjX3JlYWQodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqaTJjX3JlZ3MgPSAoc3RydWN0IG14MjhfaTJjX3JlZ3MgKilNWFNfSTJDMF9CQVNFOworCXVpbnQzMl90IHRtcCA9IDA7CisJaW50IHJldDsKKwlpbnQgaTsKKworCW14c19pMmNfd3JpdGUoY2hpcCwgYWRkciwgYWxlbiwgTlVMTCwgMCwgMCk7CisJcmV0ID0gbXhzX2kyY193YWl0X2Zvcl9hY2soKTsKKwlpZiAocmV0KSB7CisJCWRlYnVnKCJNWFMgSTJDOiBGYWlsZWQgd3JpdGluZyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlteHNfaTJjX3NldHVwX3JlYWQoY2hpcCwgbGVuKTsKKwlyZXQgPSBteHNfaTJjX3dhaXRfZm9yX2FjaygpOworCWlmIChyZXQpIHsKKwkJZGVidWcoIk1YUyBJMkM6IEZhaWxlZCByZWFkaW5nIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoIShpICYgMykpIHsKKwkJCXdoaWxlIChyZWFkbCgmaTJjX3JlZ3MtPmh3X2kyY19xdWV1ZXN0YXQpICYKKwkJCQlJMkNfUVVFVUVTVEFUX1JEX1FVRVVFX0VNUFRZKQorCQkJCTsKKwkJCXRtcCA9IHJlYWRsKCZpMmNfcmVncy0+aHdfaTJjX3F1ZXVlZGF0YSk7CisJCX0KKwkJYnVmZmVyW2ldID0gdG1wICYgMHhmZjsKKwkJdG1wID4+PSA4OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgaTJjX3dyaXRlKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsIGludCBsZW4pCit7CisJaW50IHJldDsKKwlteHNfaTJjX3dyaXRlKGNoaXAsIGFkZHIsIGFsZW4sIGJ1ZmZlciwgbGVuLCAxKTsKKwlyZXQgPSBteHNfaTJjX3dhaXRfZm9yX2FjaygpOworCWlmIChyZXQpCisJCWRlYnVnKCJNWFMgSTJDOiBGYWlsZWQgd3JpdGluZyBhZGRyZXNzXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpMmNfcHJvYmUodWNoYXIgY2hpcCkKK3sKKwlpbnQgcmV0OworCW14c19pMmNfd3JpdGUoY2hpcCwgMCwgMSwgTlVMTCwgMCwgMSk7CisJcmV0ID0gbXhzX2kyY193YWl0X2Zvcl9hY2soKTsKKwlteHNfaTJjX3Jlc2V0KCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpMmNfaW5pdChpbnQgc3BlZWQsIGludCBzbGF2ZWFkZCkKK3sKKwlzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqaTJjX3JlZ3MgPSAoc3RydWN0IG14MjhfaTJjX3JlZ3MgKilNWFNfSTJDMF9CQVNFOworCisJbXhzX2kyY19yZXNldCgpOworCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgMTAwMDAwOgorCQl3cml0ZWwoKDB4MDA3OCA8PCBJMkNfVElNSU5HMF9ISUdIX0NPVU5UX09GRlNFVCkgfAorCQkJKDB4MDAzMCA8PCBJMkNfVElNSU5HMF9SQ1ZfQ09VTlRfT0ZGU0VUKSwKKwkJCSZpMmNfcmVncy0+aHdfaTJjX3RpbWluZzApOworCQl3cml0ZWwoKDB4MDA4MCA8PCBJMkNfVElNSU5HMV9MT1dfQ09VTlRfT0ZGU0VUKSB8CisJCQkoMHgwMDMwIDw8IEkyQ19USU1JTkcxX1hNSVRfQ09VTlRfT0ZGU0VUKSwKKwkJCSZpMmNfcmVncy0+aHdfaTJjX3RpbWluZzEpOworCQlicmVhazsKKwljYXNlIDQwMDAwMDoKKwkJd3JpdGVsKCgweDAwMGYgPDwgSTJDX1RJTUlORzBfSElHSF9DT1VOVF9PRkZTRVQpIHwKKwkJCSgweDAwMDcgPDwgSTJDX1RJTUlORzBfUkNWX0NPVU5UX09GRlNFVCksCisJCQkmaTJjX3JlZ3MtPmh3X2kyY190aW1pbmcwKTsKKwkJd3JpdGVsKCgweDAwMWYgPDwgSTJDX1RJTUlORzFfTE9XX0NPVU5UX09GRlNFVCkgfAorCQkJKDB4MDAwZiA8PCBJMkNfVElNSU5HMV9YTUlUX0NPVU5UX09GRlNFVCksCisJCQkmaTJjX3JlZ3MtPmh3X2kyY190aW1pbmcxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJNWFMgSTJDOiBJbnZhbGlkIHNwZWVkIHNlbGVjdGVkICglZCBIeilcbiIsIHNwZWVkKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlbCgoMHgwMDE1IDw8IEkyQ19USU1JTkcyX0JVU19GUkVFX09GRlNFVCkgfAorCQkoMHgwMDBkIDw8IEkyQ19USU1JTkcyX0xFQURJTl9DT1VOVF9PRkZTRVQpLAorCQkmaTJjX3JlZ3MtPmh3X2kyY190aW1pbmcyKTsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL3NoX2kyYy5jIGIvZHJpdmVycy9pMmMvc2hfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4Y2I5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL3NoX2kyYy5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9idWhpcm8gSXdhbWF0c3UgPG5vYnVoaXJvLml3YW1hdHN1LnlqQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogRXZlcnkgcmVnaXN0ZXIgaXMgMzJiaXQgYWxpZ25lZCwgYnV0IG9ubHkgOGJpdHMgaW4gc2l6ZSAqLworI2RlZmluZSB1cmVnKG5hbWUpIHU4IG5hbWU7IHU4IF9fcGFkXyMjbmFtZSMjMDsgdTE2IF9fcGFkXyMjbmFtZSMjMTsKK3N0cnVjdCBzaF9pMmMgeworCXVyZWcoaWNkcik7CisJdXJlZyhpY2NyKTsKKwl1cmVnKGljc3IpOworCXVyZWcoaWNpYyk7CisJdXJlZyhpY2NsKTsKKwl1cmVnKGljY2gpOworfTsKKyN1bmRlZiB1cmVnCisKK3N0YXRpYyBzdHJ1Y3Qgc2hfaTJjICpiYXNlOworCisvKiBJQ0NSICovCisjZGVmaW5lIFNIX0kyQ19JQ0NSX0lDRQkJKDEgPDwgNykKKyNkZWZpbmUgU0hfSTJDX0lDQ1JfUkFDSwkoMSA8PCA2KQorI2RlZmluZSBTSF9JMkNfSUNDUl9SVFMJCSgxIDw8IDQpCisjZGVmaW5lIFNIX0kyQ19JQ0NSX0JVU1kJKDEgPDwgMikKKyNkZWZpbmUgU0hfSTJDX0lDQ1JfU0NQCQkoMSA8PCAwKQorCisvKiBJQ1NSIC8gSUNJQyAqLworI2RlZmluZSBTSF9JQ19CVVNZCSgxIDw8IDMpCisjZGVmaW5lIFNIX0lDX1RBQ0sJKDEgPDwgMikKKyNkZWZpbmUgU0hfSUNfV0FJVAkoMSA8PCAxKQorI2RlZmluZSBTSF9JQ19EVEUJKDEgPDwgMCkKKworc3RhdGljIHU4IGljY2wsIGljY2g7CisKKyNkZWZpbmUgSVJRX1dBSVQgMTAwMAorCitzdGF0aWMgdm9pZCBpcnFfd2FpdChzdHJ1Y3Qgc2hfaTJjICpiYXNlKQoreworCWludCBpOworCXU4IHN0YXR1czsKKworCWZvciAoaSA9IDAgOyBpIDwgSVJRX1dBSVQgOyBpKyspIHsKKwkJc3RhdHVzID0gcmVhZGIoJmJhc2UtPmljc3IpOworCQlpZiAoU0hfSUNfV0FJVCAmIHN0YXR1cykKKwkJCWJyZWFrOworCisJCXVkZWxheSgxMCk7CisJfQorCisJd3JpdGViKHN0YXR1cyAmIH5TSF9JQ19XQUlULCAmYmFzZS0+aWNzcik7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kdGUoc3RydWN0IHNoX2kyYyAqYmFzZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgSVJRX1dBSVQgOyBpKyspIHsKKwkJaWYgKFNIX0lDX0RURSAmIHJlYWRiKCZiYXNlLT5pY3NyKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KK30KKworc3RhdGljIHZvaWQgaXJxX2J1c3koc3RydWN0IHNoX2kyYyAqYmFzZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgSVJRX1dBSVQgOyBpKyspIHsKKwkJaWYgKCEoU0hfSUNfQlVTWSAmIHJlYWRiKCZiYXNlLT5pY3NyKSkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGkyY19zZXRfYWRkcihzdHJ1Y3Qgc2hfaTJjICpiYXNlLCB1OCBpZCwgdTggcmVnLCBpbnQgc3RvcCkKK3sKKwl3cml0ZWIocmVhZGIoJmJhc2UtPmljY3IpICYgflNIX0kyQ19JQ0NSX0lDRSwgJmJhc2UtPmljY3IpOworCXdyaXRlYihyZWFkYigmYmFzZS0+aWNjcikgfCBTSF9JMkNfSUNDUl9JQ0UsICZiYXNlLT5pY2NyKTsKKworCXdyaXRlYihpY2NsLCAmYmFzZS0+aWNjbCk7CisJd3JpdGViKGljY2gsICZiYXNlLT5pY2NoKTsKKwl3cml0ZWIoMCwgJmJhc2UtPmljaWMpOworCisJd3JpdGViKChTSF9JMkNfSUNDUl9JQ0V8U0hfSTJDX0lDQ1JfUlRTfFNIX0kyQ19JQ0NSX0JVU1kpLCAmYmFzZS0+aWNjcik7CisJaXJxX2R0ZShiYXNlKTsKKworCXdyaXRlYihpZCA8PCAxLCAmYmFzZS0+aWNkcik7CisJaXJxX2R0ZShiYXNlKTsKKworCXdyaXRlYihyZWcsICZiYXNlLT5pY2RyKTsKKwlpZiAoc3RvcCkKKwkJd3JpdGViKChTSF9JMkNfSUNDUl9JQ0V8U0hfSTJDX0lDQ1JfUlRTKSwgJmJhc2UtPmljY3IpOworCisJaXJxX2R0ZShiYXNlKTsKK30KKworc3RhdGljIHZvaWQgaTJjX2ZpbmlzaChzdHJ1Y3Qgc2hfaTJjICpiYXNlKQoreworCXdyaXRlYigwLCAmYmFzZS0+aWNzcik7CisJd3JpdGViKHJlYWRiKCZiYXNlLT5pY2NyKSAmIH5TSF9JMkNfSUNDUl9JQ0UsICZiYXNlLT5pY2NyKTsKK30KKworc3RhdGljIHZvaWQgaTJjX3Jhd193cml0ZShzdHJ1Y3Qgc2hfaTJjICpiYXNlLCB1OCBpZCwgdTggcmVnLCB1OCB2YWwpCit7CisJaTJjX3NldF9hZGRyKGJhc2UsIGlkLCByZWcsIDApOworCXVkZWxheSgxMCk7CisKKwl3cml0ZWIodmFsLCAmYmFzZS0+aWNkcik7CisJaXJxX2R0ZShiYXNlKTsKKworCXdyaXRlYigoU0hfSTJDX0lDQ1JfSUNFIHwgU0hfSTJDX0lDQ1JfUlRTKSwgJmJhc2UtPmljY3IpOworCWlycV9kdGUoYmFzZSk7CisJaXJxX2J1c3koYmFzZSk7CisKKwlpMmNfZmluaXNoKGJhc2UpOworfQorCitzdGF0aWMgdTggaTJjX3Jhd19yZWFkKHN0cnVjdCBzaF9pMmMgKmJhc2UsIHU4IGlkLCB1OCByZWcpCit7CisJdTggcmV0OworCisJaTJjX3NldF9hZGRyKGJhc2UsIGlkLCByZWcsIDEpOworCXVkZWxheSgxMDApOworCisJd3JpdGViKChTSF9JMkNfSUNDUl9JQ0V8U0hfSTJDX0lDQ1JfUlRTfFNIX0kyQ19JQ0NSX0JVU1kpLCAmYmFzZS0+aWNjcik7CisJaXJxX2R0ZShiYXNlKTsKKworCXdyaXRlYihpZCA8PCAxIHwgMHgwMSwgJmJhc2UtPmljZHIpOworCWlycV9kdGUoYmFzZSk7CisKKwl3cml0ZWIoKFNIX0kyQ19JQ0NSX0lDRXxTSF9JMkNfSUNDUl9TQ1ApLCAmYmFzZS0+aWNjcik7CisJaXJxX2R0ZShiYXNlKTsKKworCXJldCA9IHJlYWRiKCZiYXNlLT5pY2RyKTsKKworCXdyaXRlYigoU0hfSTJDX0lDQ1JfSUNFfFNIX0kyQ19JQ0NSX1JBQ0spLCAmYmFzZS0+aWNjcik7CisJcmVhZGIoJmJhc2UtPmljZHIpOyAvKiBEdW1teSByZWFkICovCisJaXJxX2J1c3koYmFzZSk7CisKKwlpMmNfZmluaXNoKGJhc2UpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19JMkNfTVVMVElfQlVTCitzdGF0aWMgdW5zaWduZWQgaW50IGN1cnJlbnRfYnVzOworCisvKioKKyAqIGkyY19zZXRfYnVzX251bSAtIGNoYW5nZSBhY3RpdmUgSTJDIGJ1cworICoJQGJ1czogYnVzIGluZGV4LCB6ZXJvIGJhc2VkCisgKglAcmV0dXJuczogMCBvbiBzdWNjZXNzLCBub24tMCBvbiBmYWlsdXJlCisgKi8KK2ludCBpMmNfc2V0X2J1c19udW0odW5zaWduZWQgaW50IGJ1cykKK3sKKwlpZiAoKGJ1cyA8IDApIHx8IChidXMgPj0gQ09ORklHX1NZU19NQVhfSTJDX0JVUykpIHsKKwkJcHJpbnRmKCJCYWQgYnVzOiAlZFxuIiwgYnVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN3aXRjaCAoYnVzKSB7CisJY2FzZSAwOgorCQliYXNlID0gKHZvaWQgKilDT05GSUdfU0hfSTJDX0JBU0UwOworCQlicmVhazsKKwljYXNlIDE6CisJCWJhc2UgPSAodm9pZCAqKUNPTkZJR19TSF9JMkNfQkFTRTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJY3VycmVudF9idXMgPSBidXM7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpMmNfZ2V0X2J1c19udW0gLSByZXR1cm5zIGluZGV4IG9mIGFjdGl2ZSBJMkMgYnVzCisgKi8KK3Vuc2lnbmVkIGludCBpMmNfZ2V0X2J1c19udW0odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9idXM7Cit9CisjZW5kaWYKKworI2RlZmluZSBTSF9JMkNfSUNDTF9DQUxDKGNsaywgZGF0ZSwgdF9sb3csIHRfaGlnaCkgXAorCQkoKGNsayAvIHJhdGUpICogKHRfbG93IC8gdF9sb3cgKyB0X2hpZ2gpKQorI2RlZmluZSBTSF9JMkNfSUNDSF9DQUxDKGNsaywgZGF0ZSwgdF9sb3csIHRfaGlnaCkgXAorCQkoKGNsayAvIHJhdGUpICogKHRfaGlnaCAvIHRfbG93ICsgdF9oaWdoKSkKKwordm9pZCBpMmNfaW5pdChpbnQgc3BlZWQsIGludCBzbGF2ZWFkZHIpCit7CisJaW50IG51bSwgZGVub20sIHRtcDsKKworI2lmZGVmIENPTkZJR19JMkNfTVVMVElfQlVTCisJY3VycmVudF9idXMgPSAwOworI2VuZGlmCisJYmFzZSA9IChzdHJ1Y3Qgc2hfaTJjICopQ09ORklHX1NIX0kyQ19CQVNFMDsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSB2YWx1ZSBmb3IgaWNjbC4gRnJvbSB0aGUgZGF0YSBzaGVldDoKKwkgKiBpY2NsID0gKHAtY2xvY2sgLyB0cmFuc2Zlci1yYXRlKSAqIChMIC8gKEwgKyBIKSkKKwkgKiB3aGVyZSBMIGFuZCBIIGFyZSB0aGUgU0NMIGxvdyBhbmQgaGlnaCByYXRpby4KKwkgKi8KKwludW0gPSBDT05GSUdfU0hfSTJDX0NMT0NLICogQ09ORklHX1NIX0kyQ19EQVRBX0xPVzsKKwlkZW5vbSA9IHNwZWVkICogKENPTkZJR19TSF9JMkNfREFUQV9ISUdIICsgQ09ORklHX1NIX0kyQ19EQVRBX0xPVyk7CisJdG1wID0gbnVtICogMTAgLyBkZW5vbTsKKwlpZiAodG1wICUgMTAgPj0gNSkKKwkJaWNjbCA9ICh1OCkoKG51bS9kZW5vbSkgKyAxKTsKKwllbHNlCisJCWljY2wgPSAodTgpKG51bS9kZW5vbSk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIHZhbHVlIGZvciBpY2NoLiBGcm9tIHRoZSBkYXRhIHNoZWV0OgorCSAgIGljY2ggPSAocCBjbG9jayAvIHRyYW5zZmVyIHJhdGUpICogKEggLyAoTCArIEgpKSAqLworCW51bSA9IENPTkZJR19TSF9JMkNfQ0xPQ0sgKiBDT05GSUdfU0hfSTJDX0RBVEFfSElHSDsKKwl0bXAgPSBudW0gKiAxMCAvIGRlbm9tOworCWlmICh0bXAgJSAxMCA+PSA1KQorCQlpY2NoID0gKHU4KSgobnVtL2Rlbm9tKSArIDEpOworCWVsc2UKKwkJaWNjaCA9ICh1OCkobnVtL2Rlbm9tKTsKK30KKworLyoKKyAqIGkyY19yZWFkOiAtIFJlYWQgbXVsdGlwbGUgYnl0ZXMgZnJvbSBhbiBpMmMgZGV2aWNlCisgKgorICogVGhlIGhpZ2hlciBsZXZlbCByb3V0aW5lcyB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgb25seQorICogY2FsbGVkIHdpdGggbGVuIDwgcGFnZSBsZW5ndGggb2YgdGhlIGRldmljZSAoc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSkKKyAqCisgKiBAY2hpcDogICBhZGRyZXNzIG9mIHRoZSBjaGlwIHdoaWNoIGlzIHRvIGJlIHJlYWQKKyAqIEBhZGRyOiAgIGkyYyBkYXRhIGFkZHJlc3Mgd2l0aGluIHRoZSBjaGlwCisgKiBAYWxlbjogICBsZW5ndGggb2YgdGhlIGkyYyBkYXRhIGFkZHJlc3MgKDEuLjIgYnl0ZXMpCisgKiBAYnVmZmVyOiB3aGVyZSB0byB3cml0ZSB0aGUgZGF0YQorICogQGxlbjogICAgaG93IG11Y2ggYnl0ZSBkbyB3ZSB3YW50IHRvIHJlYWQKKyAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzCisgKi8KK2ludCBpMmNfcmVhZCh1OCBjaGlwLCB1MzIgYWRkciwgaW50IGFsZW4sIHU4ICpidWZmZXIsIGludCBsZW4pCit7CisJaW50IGkgPSAwOworCWZvciAoaSA9IDAgOyBpIDwgbGVuIDsgaSsrKQorCQlidWZmZXJbaV0gPSBpMmNfcmF3X3JlYWQoYmFzZSwgY2hpcCwgYWRkciArIGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpMmNfd3JpdGU6IC0gIFdyaXRlIG11bHRpcGxlIGJ5dGVzIHRvIGFuIGkyYyBkZXZpY2UKKyAqCisgKiBUaGUgaGlnaGVyIGxldmVsIHJvdXRpbmVzIHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5CisgKiBjYWxsZWQgd2l0aCBsZW4gPCBwYWdlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIChzZWUgY29uZmlndXJhdGlvbiBmaWxlKQorICoKKyAqIEBjaGlwOiAgIGFkZHJlc3Mgb2YgdGhlIGNoaXAgd2hpY2ggaXMgdG8gYmUgd3JpdHRlbgorICogQGFkZHI6ICAgaTJjIGRhdGEgYWRkcmVzcyB3aXRoaW4gdGhlIGNoaXAKKyAqIEBhbGVuOiAgIGxlbmd0aCBvZiB0aGUgaTJjIGRhdGEgYWRkcmVzcyAoMS4uMiBieXRlcykKKyAqIEBidWZmZXI6IHdoZXJlIHRvIGZpbmQgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbgorICogQGxlbjogICAgaG93IG11Y2ggYnl0ZSBkbyB3ZSB3YW50IHRvIHJlYWQKKyAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzCisgKi8KK2ludCBpMmNfd3JpdGUodTggY2hpcCwgdTMyIGFkZHIsIGludCBhbGVuLCB1OCAqYnVmZmVyLCBpbnQgbGVuKQoreworCWludCBpID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIDsgaSsrKQorCQlpMmNfcmF3X3dyaXRlKGJhc2UsIGNoaXAsIGFkZHIgKyBpLCBidWZmZXJbaV0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpMmNfcHJvYmU6IC0gVGVzdCBpZiBhIGNoaXAgYW5zd2VycyBmb3IgYSBnaXZlbiBpMmMgYWRkcmVzcworICoKKyAqIEBjaGlwOiAgIGFkZHJlc3Mgb2YgdGhlIGNoaXAgd2hpY2ggaXMgc2VhcmNoZWQgZm9yCisgKiBAcmV0dXJuOiAwIGlmIGEgY2hpcCB3YXMgZm91bmQsIC0xIG90aGVyd2hpc2UKKyAqLworaW50IGkyY19wcm9iZSh1OCBjaGlwKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQppbmRleCA5ZjlkYjc1Li41MDZmMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQpAQCAtMzYsNiArMzYsNyBAQAogQ09CSlMtJChDT05GSUdfQVJNX1BMMTgwX01NQ0kpICs9IGFybV9wbDE4MF9tbWNpLm8KIENPQkpTLSQoQ09ORklHX01WX1NESENJKSArPSBtdl9zZGhjaS5vCiBDT0JKUy0kKENPTkZJR19NWENfTU1DKSArPSBteGNtbWMubworQ09CSlMtJChDT05GSUdfTVhTX01NQykgKz0gbXhzbW1jLm8KIENPQkpTLSQoQ09ORklHX09NQVBfSFNNTUMpICs9IG9tYXBfaHNtbWMubwogQ09CSlMtJChDT05GSUdfUFhBX01NQykgKz0gcHhhX21tYy5vCiBDT0JKUy0kKENPTkZJR19QWEFfTU1DX0dFTkVSSUMpICs9IHB4YV9tbWNfZ2VuLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2FybV9wbDE4MF9tbWNpLmMgYi9kcml2ZXJzL21tYy9hcm1fcGwxODBfbW1jaS5jCmluZGV4IGVkMjk2ZWUuLmU2NDY3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2FybV9wbDE4MF9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvYXJtX3BsMTgwX21tY2kuYwpAQCAtMTExLDcgKzExMSw2IEBACiBzdGF0aWMgaW50IHJlYWRfYnl0ZXMoc3RydWN0IG1tYyAqZGV2LCB1MzIgKmRlc3QsIHUzMiBibGtjb3VudCwgdTMyIGJsa3NpemUpCiB7CiAJdTMyICp0ZW1wYnVmZiA9IGRlc3Q7Ci0JaW50IGk7CiAJdTY0IHhmZXJjb3VudCA9IGJsa2NvdW50ICogYmxrc2l6ZTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBkZXYtPnByaXY7CiAJdTMyIHN0YXR1cywgc3RhdHVzX2VycjsKQEAgLTEyMSwzMSArMTIwLDYgQEAKIAlzdGF0dXMgPSByZWFkbCgmaG9zdC0+YmFzZS0+c3RhdHVzKTsKIAlzdGF0dXNfZXJyID0gc3RhdHVzICYgKFNESV9TVEFfRENSQ0ZBSUwgfCBTRElfU1RBX0RUSU1FT1VUIHwKIAkJCSAgICAgICBTRElfU1RBX1JYT1ZFUlIpOwotCXdoaWxlICghc3RhdHVzX2VyciAmJgotCSAgICAgICAoeGZlcmNvdW50ID49IFNESV9GSUZPX0JVUlNUX1NJWkUgKiBzaXplb2YodTMyKSkpIHsKLQkJaWYgKHN0YXR1cyAmIFNESV9TVEFfUlhGSUZPQlIpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBTRElfRklGT19CVVJTVF9TSVpFOyBpKyspCi0JCQkJKih0ZW1wYnVmZiArIGkpID0gcmVhZGwoJmhvc3QtPmJhc2UtPmZpZm8pOwotCQkJdGVtcGJ1ZmYgKz0gU0RJX0ZJRk9fQlVSU1RfU0laRTsKLQkJCXhmZXJjb3VudCAtPSBTRElfRklGT19CVVJTVF9TSVpFICogc2l6ZW9mKHUzMik7Ci0JCX0KLQkJc3RhdHVzID0gcmVhZGwoJmhvc3QtPmJhc2UtPnN0YXR1cyk7Ci0JCXN0YXR1c19lcnIgPSBzdGF0dXMgJgotCQkJKFNESV9TVEFfRENSQ0ZBSUwgfCBTRElfU1RBX0RUSU1FT1VUIHwgU0RJX1NUQV9SWE9WRVJSKTsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgU0RJX1NUQV9EVElNRU9VVCkgewotCQlwcmludGYoIlJlYWQgZGF0YSB0aW1lZCBvdXQsIHhmZXJjb3VudDogJWxsdSwgc3RhdHVzOiAweCUwOFhcbiIsCi0JCQl4ZmVyY291bnQsIHN0YXR1cyk7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0gZWxzZSBpZiAoc3RhdHVzICYgU0RJX1NUQV9EQ1JDRkFJTCkgewotCQlwcmludGYoIlJlYWQgZGF0YSBibGsgQ1JDIGVycm9yOiAweCV4XG4iLCBzdGF0dXMpOwotCQlyZXR1cm4gLUVJTFNFUTsKLQl9IGVsc2UgaWYgKHN0YXR1cyAmIFNESV9TVEFfUlhPVkVSUikgewotCQlwcmludGYoIlJlYWQgZGF0YSBSWCBvdmVyZmxvdyBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCXdoaWxlICgoIXN0YXR1c19lcnIpICYmICh4ZmVyY291bnQgPj0gc2l6ZW9mKHUzMikpKSB7CiAJCWlmIChzdGF0dXMgJiBTRElfU1RBX1JYREFWTCkgewogCQkJKih0ZW1wYnVmZikgPSByZWFkbCgmaG9zdC0+YmFzZS0+Zmlmbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9kYXZpbmNpX21tYy5jIGIvZHJpdmVycy9tbWMvZGF2aW5jaV9tbWMuYwppbmRleCA1ZDkxOGU2Li5jZTk2NzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9kYXZpbmNpX21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2RhdmluY2lfbW1jLmMKQEAgLTY5LDggKzY5LDggQEAKIHN0YXRpYyBpbnQKIGRtbWNfd2FpdF9maWZvX3N0YXR1cyh2b2xhdGlsZSBzdHJ1Y3QgZGF2aW5jaV9tbWNfcmVncyAqcmVncywgdWludCBzdGF0dXMpCiB7Ci0JdWludCBtbWNzdGF0dXMxLCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7Ci0JbW1jc3RhdHVzMSA9IGdldF92YWwoJnJlZ3MtPm1tY3N0MSk7CisJdWludCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7CisKIAl3aGlsZSAoLS13ZG9nICYmICgoZ2V0X3ZhbCgmcmVncy0+bW1jc3QxKSAmIHN0YXR1cykgIT0gc3RhdHVzKSkKIAkJdWRlbGF5KDEwKTsKIApAQCAtODYsOSArODYsOCBAQAogLyogQnVzeSBiaXQgd2FpdCBsb29wIGZvciBNTUNTVDEgKi8KIHN0YXRpYyBpbnQgZG1tY19idXN5X3dhaXQodm9sYXRpbGUgc3RydWN0IGRhdmluY2lfbW1jX3JlZ3MgKnJlZ3MpCiB7Ci0JdWludCBtbWNzdGF0dXMxLCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7CisJdWludCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7CiAKLQltbWNzdGF0dXMxID0gZ2V0X3ZhbCgmcmVncy0+bW1jc3QxKTsKIAl3aGlsZSAoLS13ZG9nICYmIChnZXRfdmFsKCZyZWdzLT5tbWNzdDEpICYgTU1DU1QxX0JVU1kpKQogCQl1ZGVsYXkoMTApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9teHNtbWMuYyBiL2RyaXZlcnMvbW1jL214c21tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTk0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9teHNtbWMuYwpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggU1NQIE1NQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBUZXJyeSBMdgorICoKKyAqIENvcHlyaWdodCAyMDA3LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKiBBbmR5IEZsZW1pbmcKKyAqCisgKiBCYXNlZCB2YWd1ZWx5IG9uIHRoZSBweGEgbW1jIGNvZGU6CisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIEt5bGUgSGFycmlzLCBOZXh1cyBUZWNobm9sb2dpZXMsIEluYy4ga2hhcnJpc0BuZXh1cy10ZWNoLm5ldAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8bW1jLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorCitzdHJ1Y3QgbXhzbW1jX3ByaXYgeworCWludAkJCWlkOworCXN0cnVjdCBteDI4X3NzcF9yZWdzCSpyZWdzOworCXVpbnQzMl90CQljbGtzZXFfYnlwYXNzOworCXVpbnQzMl90CQkqY2xrY3RybF9zc3A7CisJdWludDMyX3QJCWJ1c3dpZHRoOworCWludAkJCSgqbW1jX2lzX3dwKShpbnQpOworfTsKKworI2RlZmluZQlNWFNNTUNfTUFYX1RJTUVPVVQJMTAwMDAKKworLyoKKyAqIFNlbmRzIGEgY29tbWFuZCBvdXQgb24gdGhlIGJ1cy4gIFRha2VzIHRoZSBtbWMgcG9pbnRlciwKKyAqIGEgY29tbWFuZCBwb2ludGVyLCBhbmQgYW4gb3B0aW9uYWwgZGF0YSBwb2ludGVyLgorICovCitzdGF0aWMgaW50CitteHNtbWNfc2VuZF9jbWQoc3RydWN0IG1tYyAqbW1jLCBzdHJ1Y3QgbW1jX2NtZCAqY21kLCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG14c21tY19wcml2ICpwcml2ID0gKHN0cnVjdCBteHNtbWNfcHJpdiAqKW1tYy0+cHJpdjsKKwlzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MgPSBwcml2LT5yZWdzOworCXVpbnQzMl90IHJlZzsKKwlpbnQgdGltZW91dDsKKwl1aW50MzJfdCBkYXRhX2NvdW50OworCXVpbnQzMl90ICpkYXRhX3B0cjsKKwl1aW50MzJfdCBjdHJsMDsKKworCWRlYnVnKCJNTUMlZDogQ01EJWRcbiIsIG1tYy0+YmxvY2tfZGV2LmRldiwgY21kLT5jbWRpZHgpOworCisJLyogQ2hlY2sgYnVzIGJ1c3kgKi8KKwl0aW1lb3V0ID0gTVhTTU1DX01BWF9USU1FT1VUOworCXdoaWxlICgtLXRpbWVvdXQpIHsKKwkJdWRlbGF5KDEwMDApOworCQlyZWcgPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXMpOworCQlpZiAoIShyZWcgJgorCQkJKFNTUF9TVEFUVVNfQlVTWSB8IFNTUF9TVEFUVVNfREFUQV9CVVNZIHwKKwkJCVNTUF9TVEFUVVNfQ01EX0JVU1kpKSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJcHJpbnRmKCJNTUMlZDogQnVzIGJ1c3kgdGltZW91dCFcbiIsIG1tYy0+YmxvY2tfZGV2LmRldik7CisJCXJldHVybiBUSU1FT1VUOworCX0KKworCS8qIFNlZSBpZiBjYXJkIGlzIHByZXNlbnQgKi8KKwlpZiAocmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc3RhdHVzKSAmIFNTUF9TVEFUVVNfQ0FSRF9ERVRFQ1QpIHsKKwkJcHJpbnRmKCJNTUMlZDogTm8gY2FyZCBkZXRlY3RlZCFcbiIsIG1tYy0+YmxvY2tfZGV2LmRldik7CisJCXJldHVybiBOT19DQVJEX0VSUjsKKwl9CisKKwkvKiBTdGFydCBidWlsZGluZyBDVFJMMCBjb250ZW50cyAqLworCWN0cmwwID0gcHJpdi0+YnVzd2lkdGg7CisKKwkvKiBTZXQgdXAgY29tbWFuZCAqLworCWlmICghKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9DUkMpKQorCQljdHJsMCB8PSBTU1BfQ1RSTDBfSUdOT1JFX0NSQzsKKwlpZiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQX1BSRVNFTlQpCS8qIE5lZWQgdG8gZ2V0IHJlc3BvbnNlICovCisJCWN0cmwwIHw9IFNTUF9DVFJMMF9HRVRfUkVTUDsKKwlpZiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQXzEzNikJLyogSXQncyBhIDEzNiBiaXRzIHJlc3BvbnNlICovCisJCWN0cmwwIHw9IFNTUF9DVFJMMF9MT05HX1JFU1A7CisKKwkvKiBDb21tYW5kIGluZGV4ICovCisJcmVnID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3BfY21kMCk7CisJcmVnICY9IH4oU1NQX0NNRDBfQ01EX01BU0sgfCBTU1BfQ01EMF9BUFBFTkRfOENZQyk7CisJcmVnIHw9IGNtZC0+Y21kaWR4IDw8IFNTUF9DTUQwX0NNRF9PRkZTRVQ7CisJaWYgKGNtZC0+Y21kaWR4ID09IE1NQ19DTURfU1RPUF9UUkFOU01JU1NJT04pCisJCXJlZyB8PSBTU1BfQ01EMF9BUFBFTkRfOENZQzsKKwl3cml0ZWwocmVnLCAmc3NwX3JlZ3MtPmh3X3NzcF9jbWQwKTsKKworCS8qIENvbW1hbmQgYXJndW1lbnQgKi8KKwl3cml0ZWwoY21kLT5jbWRhcmcsICZzc3BfcmVncy0+aHdfc3NwX2NtZDEpOworCisJLyogU2V0IHVwIGRhdGEgKi8KKwlpZiAoZGF0YSkgeworCQkvKiBSRUFEIG9yIFdSSVRFICovCisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCWN0cmwwIHw9IFNTUF9DVFJMMF9SRUFEOworCQl9IGVsc2UgaWYgKHByaXYtPm1tY19pc193cChtbWMtPmJsb2NrX2Rldi5kZXYpKSB7CisJCQlwcmludGYoIk1NQyVkOiBDYW4gbm90IHdyaXRlIGEgbG9ja2VkIGNhcmQhXG4iLAorCQkJCW1tYy0+YmxvY2tfZGV2LmRldik7CisJCQlyZXR1cm4gVU5VU0FCTEVfRVJSOworCQl9CisKKwkJY3RybDAgfD0gU1NQX0NUUkwwX0RBVEFfWEZFUjsKKwkJcmVnID0gKChkYXRhLT5ibG9ja3MgLSAxKSA8PAorCQkJU1NQX0JMT0NLX1NJWkVfQkxPQ0tfQ09VTlRfT0ZGU0VUKSB8CisJCQkoKGZmcyhkYXRhLT5ibG9ja3NpemUpIC0gMSkgPDwKKwkJCVNTUF9CTE9DS19TSVpFX0JMT0NLX1NJWkVfT0ZGU0VUKTsKKwkJd3JpdGVsKHJlZywgJnNzcF9yZWdzLT5od19zc3BfYmxvY2tfc2l6ZSk7CisKKwkJcmVnID0gZGF0YS0+YmxvY2tzaXplICogZGF0YS0+YmxvY2tzOworCQl3cml0ZWwocmVnLCAmc3NwX3JlZ3MtPmh3X3NzcF94ZmVyX3NpemUpOworCX0KKworCS8qIEtpY2sgb2ZmIHRoZSBjb21tYW5kICovCisJY3RybDAgfD0gU1NQX0NUUkwwX1dBSVRfRk9SX0lSUSB8IFNTUF9DVFJMMF9FTkFCTEUgfCBTU1BfQ1RSTDBfUlVOOworCXdyaXRlbChjdHJsMCwgJnNzcF9yZWdzLT5od19zc3BfY3RybDApOworCisJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwl0aW1lb3V0ID0gTVhTTU1DX01BWF9USU1FT1VUOworCXdoaWxlICgtLXRpbWVvdXQpIHsKKwkJdWRlbGF5KDEwMDApOworCQlyZWcgPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXMpOworCQlpZiAoIShyZWcgJiBTU1BfU1RBVFVTX0NNRF9CVVNZKSkKKwkJCWJyZWFrOworCX0KKworCWlmICghdGltZW91dCkgeworCQlwcmludGYoIk1NQyVkOiBDb21tYW5kICVkIGJ1c3lcbiIsCisJCQltbWMtPmJsb2NrX2Rldi5kZXYsIGNtZC0+Y21kaWR4KTsKKwkJcmV0dXJuIFRJTUVPVVQ7CisJfQorCisJLyogQ2hlY2sgY29tbWFuZCB0aW1lb3V0ICovCisJaWYgKHJlZyAmIFNTUF9TVEFUVVNfUkVTUF9USU1FT1VUKSB7CisJCXByaW50ZigiTU1DJWQ6IENvbW1hbmQgJWQgdGltZW91dCAoc3RhdHVzIDB4JTA4eClcbiIsCisJCQltbWMtPmJsb2NrX2Rldi5kZXYsIGNtZC0+Y21kaWR4LCByZWcpOworCQlyZXR1cm4gVElNRU9VVDsKKwl9CisKKwkvKiBDaGVjayBjb21tYW5kIGVycm9ycyAqLworCWlmIChyZWcgJiAoU1NQX1NUQVRVU19SRVNQX0NSQ19FUlIgfCBTU1BfU1RBVFVTX1JFU1BfRVJSKSkgeworCQlwcmludGYoIk1NQyVkOiBDb21tYW5kICVkIGVycm9yIChzdGF0dXMgMHglMDh4KSFcbiIsCisJCQltbWMtPmJsb2NrX2Rldi5kZXYsIGNtZC0+Y21kaWR4LCByZWcpOworCQlyZXR1cm4gQ09NTV9FUlI7CisJfQorCisJLyogQ29weSByZXNwb25zZSB0byByZXNwb25zZSBidWZmZXIgKi8KKwlpZiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQXzEzNikgeworCQljbWQtPnJlc3BvbnNlWzNdID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc2RyZXNwMCk7CisJCWNtZC0+cmVzcG9uc2VbMl0gPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zZHJlc3AxKTsKKwkJY21kLT5yZXNwb25zZVsxXSA9IHJlYWRsKCZzc3BfcmVncy0+aHdfc3NwX3NkcmVzcDIpOworCQljbWQtPnJlc3BvbnNlWzBdID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc2RyZXNwMyk7CisJfSBlbHNlCisJCWNtZC0+cmVzcG9uc2VbMF0gPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zZHJlc3AwKTsKKworCS8qIFJldHVybiBpZiBubyBkYXRhIHRvIHByb2Nlc3MgKi8KKwlpZiAoIWRhdGEpCisJCXJldHVybiAwOworCisJLyogUHJvY2VzcyB0aGUgZGF0YSAqLworCWRhdGFfY291bnQgPSBkYXRhLT5ibG9ja3NpemUgKiBkYXRhLT5ibG9ja3M7CisJdGltZW91dCA9IE1YU01NQ19NQVhfVElNRU9VVDsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CisJCWRhdGFfcHRyID0gKHVpbnQzMl90ICopZGF0YS0+ZGVzdDsKKwkJd2hpbGUgKGRhdGFfY291bnQgJiYgLS10aW1lb3V0KSB7CisJCQlyZWcgPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXMpOworCQkJaWYgKCEocmVnICYgU1NQX1NUQVRVU19GSUZPX0VNUFRZKSkgeworCQkJCSpkYXRhX3B0cisrID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3BfZGF0YSk7CisJCQkJZGF0YV9jb3VudCAtPSA0OworCQkJCXRpbWVvdXQgPSBNWFNNTUNfTUFYX1RJTUVPVVQ7CisJCQl9IGVsc2UKKwkJCQl1ZGVsYXkoMTAwMCk7CisJCX0KKwl9IGVsc2UgeworCQlkYXRhX3B0ciA9ICh1aW50MzJfdCAqKWRhdGEtPnNyYzsKKwkJdGltZW91dCAqPSAxMDA7CisJCXdoaWxlIChkYXRhX2NvdW50ICYmIC0tdGltZW91dCkgeworCQkJcmVnID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc3RhdHVzKTsKKwkJCWlmICghKHJlZyAmIFNTUF9TVEFUVVNfRklGT19GVUxMKSkgeworCQkJCXdyaXRlbCgqZGF0YV9wdHIrKywgJnNzcF9yZWdzLT5od19zc3BfZGF0YSk7CisJCQkJZGF0YV9jb3VudCAtPSA0OworCQkJCXRpbWVvdXQgPSBNWFNNTUNfTUFYX1RJTUVPVVQ7CisJCQl9IGVsc2UKKwkJCQl1ZGVsYXkoMTAwMCk7CisJCX0KKwl9CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJcHJpbnRmKCJNTUMlZDogRGF0YSB0aW1lb3V0IHdpdGggY29tbWFuZCAlZCAoc3RhdHVzIDB4JTA4eCkhXG4iLAorCQkJbW1jLT5ibG9ja19kZXYuZGV2LCBjbWQtPmNtZGlkeCwgcmVnKTsKKwkJcmV0dXJuIENPTU1fRVJSOworCX0KKworCS8qIENoZWNrIGRhdGEgZXJyb3JzICovCisJcmVnID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc3RhdHVzKTsKKwlpZiAocmVnICYKKwkJKFNTUF9TVEFUVVNfVElNRU9VVCB8IFNTUF9TVEFUVVNfREFUQV9DUkNfRVJSIHwKKwkJU1NQX1NUQVRVU19GSUZPX09WUkZMVyB8IFNTUF9TVEFUVVNfRklGT19VTkRSRkxXKSkgeworCQlwcmludGYoIk1NQyVkOiBEYXRhIGVycm9yIHdpdGggY29tbWFuZCAlZCAoc3RhdHVzIDB4JTA4eCkhXG4iLAorCQkJbW1jLT5ibG9ja19kZXYuZGV2LCBjbWQtPmNtZGlkeCwgcmVnKTsKKwkJcmV0dXJuIENPTU1fRVJSOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBteHNtbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jICptbWMpCit7CisJc3RydWN0IG14c21tY19wcml2ICpwcml2ID0gKHN0cnVjdCBteHNtbWNfcHJpdiAqKW1tYy0+cHJpdjsKKwlzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MgPSBwcml2LT5yZWdzOworCisJLyogU2V0IHRoZSBjbG9jayBzcGVlZCAqLworCWlmIChtbWMtPmNsb2NrKQorCQlteDI4X3NldF9zc3BfYnVzY2xvY2socHJpdi0+aWQsIG1tYy0+Y2xvY2sgLyAxMDAwKTsKKworCXN3aXRjaCAobW1jLT5idXNfd2lkdGgpIHsKKwljYXNlIDE6CisJCXByaXYtPmJ1c3dpZHRoID0gU1NQX0NUUkwwX0JVU19XSURUSF9PTkVfQklUOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByaXYtPmJ1c3dpZHRoID0gU1NQX0NUUkwwX0JVU19XSURUSF9GT1VSX0JJVDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlwcml2LT5idXN3aWR0aCA9IFNTUF9DVFJMMF9CVVNfV0lEVEhfRUlHSFRfQklUOworCQlicmVhazsKKwl9CisKKwkvKiBTZXQgdGhlIGJ1cyB3aWR0aCAqLworCWNscnNldGJpdHNfbGUzMigmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMCwKKwkJCVNTUF9DVFJMMF9CVVNfV0lEVEhfTUFTSywgcHJpdi0+YnVzd2lkdGgpOworCisJZGVidWcoIk1NQyVkOiBTZXQgJWQgYml0cyBidXMgd2lkdGhcbiIsCisJCW1tYy0+YmxvY2tfZGV2LmRldiwgbW1jLT5idXNfd2lkdGgpOworfQorCitzdGF0aWMgaW50IG14c21tY19pbml0KHN0cnVjdCBtbWMgKm1tYykKK3sKKwlzdHJ1Y3QgbXhzbW1jX3ByaXYgKnByaXYgPSAoc3RydWN0IG14c21tY19wcml2ICopbW1jLT5wcml2OworCXN0cnVjdCBteDI4X3NzcF9yZWdzICpzc3BfcmVncyA9IHByaXYtPnJlZ3M7CisKKwkvKiBSZXNldCBTU1AgKi8KKwlteDI4X3Jlc2V0X2Jsb2NrKCZzc3BfcmVncy0+aHdfc3NwX2N0cmwwX3JlZyk7CisKKwkvKiA4IGJpdHMgd29yZCBsZW5ndGggaW4gTU1DIG1vZGUgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnNzcF9yZWdzLT5od19zc3BfY3RybDEsCisJCVNTUF9DVFJMMV9TU1BfTU9ERV9NQVNLIHwgU1NQX0NUUkwxX1dPUkRfTEVOR1RIX01BU0ssCisJCVNTUF9DVFJMMV9TU1BfTU9ERV9TRF9NTUMgfCBTU1BfQ1RSTDFfV09SRF9MRU5HVEhfRUlHSFRfQklUUyk7CisKKwkvKiBTZXQgaW5pdGlhbCBiaXQgY2xvY2sgNDAwIEtIeiAqLworCW14Mjhfc2V0X3NzcF9idXNjbG9jayhwcml2LT5pZCwgNDAwKTsKKworCS8qIFNlbmQgaW5pdGlhbCA3NCBjbG9jayBjeWNsZXMgKDE4NSB1cyBAIDQwMCBLSHopKi8KKwl3cml0ZWwoU1NQX0NNRDBfQ09OVF9DTEtJTkdfRU4sICZzc3BfcmVncy0+aHdfc3NwX2NtZDBfc2V0KTsKKwl1ZGVsYXkoMjAwKTsKKwl3cml0ZWwoU1NQX0NNRDBfQ09OVF9DTEtJTkdfRU4sICZzc3BfcmVncy0+aHdfc3NwX2NtZDBfY2xyKTsKKworCXJldHVybiAwOworfQorCitpbnQgbXhzbW1jX2luaXRpYWxpemUoYmRfdCAqYmlzLCBpbnQgaWQsIGludCAoKndwKShpbnQpKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisJc3RydWN0IG1tYyAqbW1jID0gTlVMTDsKKwlzdHJ1Y3QgbXhzbW1jX3ByaXYgKnByaXYgPSBOVUxMOworCisJbW1jID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW1jKSk7CisJaWYgKCFtbWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG14c21tY19wcml2KSk7CisJaWYgKCFwcml2KSB7CisJCWZyZWUobW1jKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdi0+bW1jX2lzX3dwID0gd3A7CisJcHJpdi0+aWQgPSBpZDsKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSAwOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDBfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDFfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AxOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDJfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AyOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDNfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AzOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMzsKKwkJYnJlYWs7CisJfQorCisJc3ByaW50ZihtbWMtPm5hbWUsICJNWFMgTU1DIik7CisJbW1jLT5zZW5kX2NtZCA9IG14c21tY19zZW5kX2NtZDsKKwltbWMtPnNldF9pb3MgPSBteHNtbWNfc2V0X2lvczsKKwltbWMtPmluaXQgPSBteHNtbWNfaW5pdDsKKwltbWMtPnByaXYgPSBwcml2OworCisJbW1jLT52b2x0YWdlcyA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCisJbW1jLT5ob3N0X2NhcHMgPSBNTUNfTU9ERV80QklUIHwgTU1DX01PREVfOEJJVCB8CisJCQkgTU1DX01PREVfSFNfNTJNSHogfCBNTUNfTU9ERV9IUzsKKworCS8qCisJICogU1NQQ0xLID0gNDgwICogMTggLyAyOSAvIDEgPSAyOTcuNzMxIE1IegorCSAqIFNTUCBiaXQgcmF0ZSA9IFNTUENMSyAvIChDTE9DS19ESVZJREUgKiAoMSArIENMT0NLX1JBVEUpKSwKKwkgKiBDTE9DS19ESVZJREUgaGFzIHRvIGJlIGFuIGV2ZW4gdmFsdWUgZnJvbSAyIHRvIDI1NCwgYW5kCisJICogQ0xPQ0tfUkFURSBjb3VsZCBiZSBhbnkgaW50ZWdlciBmcm9tIDAgdG8gMjU1LgorCSAqLworCW1tYy0+Zl9taW4gPSA0MDAwMDA7CisJbW1jLT5mX21heCA9IG14Y19nZXRfY2xvY2soTVhDX1NTUDBfQ0xLICsgaWQpICogMTAwMCAvIDI7CisJbW1jLT5iX21heCA9IDA7CisKKwltbWNfcmVnaXN0ZXIobW1jKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL29tYXBfaHNtbWMuYwppbmRleCBlYmRhOTgwLi5jMzhiOWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvb21hcF9oc21tYy5jCkBAIC0zNiw4ICszNiw5IEBACiAvKiBJZiB3ZSBmYWlsIGFmdGVyIDEgc2Vjb25kIHdhaXQsIHNvbWV0aGluZyBpcyByZWFsbHkgYmFkICovCiAjZGVmaW5lIE1BWF9SRVRSWV9NUwkxMDAwCiAKLXN0YXRpYyBpbnQgbW1jX3JlYWRfZGF0YShoc21tY190ICptbWNfYmFzZSwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci1zdGF0aWMgaW50IG1tY193cml0ZV9kYXRhKGhzbW1jX3QgKm1tY19iYXNlLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXopOworc3RhdGljIGludCBtbWNfcmVhZF9kYXRhKHN0cnVjdCBoc21tYyAqbW1jX2Jhc2UsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIGludCBtbWNfd3JpdGVfZGF0YShzdHJ1Y3QgaHNtbWMgKm1tY19iYXNlLCBjb25zdCBjaGFyICpidWYsCisJCQl1bnNpZ25lZCBpbnQgc2l6KTsKIHN0YXRpYyBzdHJ1Y3QgbW1jIGhzbW1jX2RldlsyXTsKIAogI2lmIGRlZmluZWQoQ09ORklHX09NQVA0NFhYKSAmJiBkZWZpbmVkKENPTkZJR19UV0w2MDMwX1BPV0VSKQpAQCAtOTcsNyArOTgsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1tY19pbml0X3N0cmVhbShoc21tY190ICptbWNfYmFzZSkKK3ZvaWQgbW1jX2luaXRfc3RyZWFtKHN0cnVjdCBoc21tYyAqbW1jX2Jhc2UpCiB7CiAJdWxvbmcgc3RhcnQ7CiAKQEAgLTEyOCw3ICsxMjksNyBAQAogCiBzdGF0aWMgaW50IG1tY19pbml0X3NldHVwKHN0cnVjdCBtbWMgKm1tYykKIHsKLQloc21tY190ICptbWNfYmFzZSA9IChoc21tY190ICopbW1jLT5wcml2OworCXN0cnVjdCBoc21tYyAqbW1jX2Jhc2UgPSAoc3RydWN0IGhzbW1jICopbW1jLT5wcml2OwogCXVuc2lnbmVkIGludCByZWdfdmFsOwogCXVuc2lnbmVkIGludCBkc29yOwogCXVsb25nIHN0YXJ0OwpAQCAtMTkyLDcgKzE5Myw3IEBACiBzdGF0aWMgaW50IG1tY19zZW5kX2NtZChzdHJ1Y3QgbW1jICptbWMsIHN0cnVjdCBtbWNfY21kICpjbWQsCiAJCQlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7Ci0JaHNtbWNfdCAqbW1jX2Jhc2UgPSAoaHNtbWNfdCAqKW1tYy0+cHJpdjsKKwlzdHJ1Y3QgaHNtbWMgKm1tY19iYXNlID0gKHN0cnVjdCBoc21tYyAqKW1tYy0+cHJpdjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MsIG1tY19zdGF0OwogCXVsb25nIHN0YXJ0OwogCkBAIC0zMDUsNyArMzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtbWNfcmVhZF9kYXRhKGhzbW1jX3QgKm1tY19iYXNlLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCBtbWNfcmVhZF9kYXRhKHN0cnVjdCBoc21tYyAqbW1jX2Jhc2UsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgaW50ICpvdXRwdXRfYnVmID0gKHVuc2lnbmVkIGludCAqKWJ1ZjsKIAl1bnNpZ25lZCBpbnQgbW1jX3N0YXQ7CkBAIC0zNTYsNyArMzU3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtbWNfd3JpdGVfZGF0YShoc21tY190ICptbWNfYmFzZSwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3N0YXRpYyBpbnQgbW1jX3dyaXRlX2RhdGEoc3RydWN0IGhzbW1jICptbWNfYmFzZSwgY29uc3QgY2hhciAqYnVmLAorCQkJCXVuc2lnbmVkIGludCBzaXplKQogewogCXVuc2lnbmVkIGludCAqaW5wdXRfYnVmID0gKHVuc2lnbmVkIGludCAqKWJ1ZjsKIAl1bnNpZ25lZCBpbnQgbW1jX3N0YXQ7CkBAIC00MDksNyArNDExLDcgQEAKIAogc3RhdGljIHZvaWQgbW1jX3NldF9pb3Moc3RydWN0IG1tYyAqbW1jKQogewotCWhzbW1jX3QgKm1tY19iYXNlID0gKGhzbW1jX3QgKiltbWMtPnByaXY7CisJc3RydWN0IGhzbW1jICptbWNfYmFzZSA9IChzdHJ1Y3QgaHNtbWMgKiltbWMtPnByaXY7CiAJdW5zaWduZWQgaW50IGRzb3IgPSAwOwogCXVsb25nIHN0YXJ0OwogCkBAIC00NzMsMjAgKzQ3NSwyMCBAQAogCiAJc3dpdGNoIChkZXZfaW5kZXgpIHsKIAljYXNlIDA6Ci0JCW1tYy0+cHJpdiA9IChoc21tY190ICopT01BUF9IU01NQzFfQkFTRTsKKwkJbW1jLT5wcml2ID0gKHN0cnVjdCBoc21tYyAqKU9NQVBfSFNNTUMxX0JBU0U7CiAJCWJyZWFrOwogI2lmZGVmIE9NQVBfSFNNTUMyX0JBU0UKIAljYXNlIDE6Ci0JCW1tYy0+cHJpdiA9IChoc21tY190ICopT01BUF9IU01NQzJfQkFTRTsKKwkJbW1jLT5wcml2ID0gKHN0cnVjdCBoc21tYyAqKU9NQVBfSFNNTUMyX0JBU0U7CiAJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgT01BUF9IU01NQzNfQkFTRQogCWNhc2UgMjoKLQkJbW1jLT5wcml2ID0gKGhzbW1jX3QgKilPTUFQX0hTTU1DM19CQVNFOworCQltbWMtPnByaXYgPSAoc3RydWN0IGhzbW1jICopT01BUF9IU01NQzNfQkFTRTsKIAkJYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgotCQltbWMtPnByaXYgPSAoaHNtbWNfdCAqKU9NQVBfSFNNTUMxX0JBU0U7CisJCW1tYy0+cHJpdiA9IChzdHJ1Y3QgaHNtbWMgKilPTUFQX0hTTU1DMV9CQVNFOwogCQlyZXR1cm4gMTsKIAl9CiAJbW1jLT52b2x0YWdlcyA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0IHwgTU1DX1ZERF8xNjVfMTk1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvdGVncmEyX21tYy5jIGIvZHJpdmVycy9tbWMvdGVncmEyX21tYy5jCmluZGV4IDc4YjExOTAuLmNjZjQ4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3RlZ3JhMl9tbWMuYworKysgYi9kcml2ZXJzL21tYy90ZWdyYTJfbW1jLmMKQEAgLTgxLDcgKzgxLDggQEAKIAkgKiAxMSA9IFNlbGVjdHMgNjQtYml0IEFkZHJlc3MgQURNQTIKIAkgKi8KIAljdHJsID0gcmVhZGIoJmhvc3QtPnJlZy0+aG9zdGN0bCk7Ci0JY3RybCAmPSB+KDMgPDwgMyk7CQkJLyogU0RNQSAqLworCWN0cmwgJj0gflRFR1JBX01NQ19IT1NUQ1RMX0RNQVNFTF9NQVNLOworCWN0cmwgfD0gVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX1NETUE7CiAJd3JpdGViKGN0cmwsICZob3N0LT5yZWctPmhvc3RjdGwpOwogCiAJLyogV2UgZG8gbm90IGhhbmRsZSBETUEgYm91bmRhcmllcywgc28gc2V0IGl0IHRvIG1heCAoNTEyIEtpQikgKi8KQEAgLTEwMyw0MyArMTA0LDM2IEBACiAJICogRU5CTEtDTlRbMV0JOiBCbG9jayBDb3VudCBFbmFibGUKIAkgKiBFTkRNQVswXQk6IERNQSBFbmFibGUKIAkgKi8KLQltb2RlID0gKDEgPDwgMSkgfCAoMSA8PCAwKTsKKwltb2RlID0gKFRFR1JBX01NQ19UUk5NT0RfRE1BX0VOQUJMRSB8CisJCVRFR1JBX01NQ19UUk5NT0RfQkxPQ0tfQ09VTlRfRU5BQkxFKTsKKwogCWlmIChkYXRhLT5ibG9ja3MgPiAxKQotCQltb2RlIHw9ICgxIDw8IDUpOworCQltb2RlIHw9IFRFR1JBX01NQ19UUk5NT0RfTVVMVElfQkxPQ0tfU0VMRUNUOworCiAJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKLQkJbW9kZSB8PSAoMSA8PCA0KTsKKwkJbW9kZSB8PSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfWEZFUl9ESVJfU0VMX1JFQUQ7CiAKIAl3cml0ZXcobW9kZSwgJmhvc3QtPnJlZy0+dHJubW9kKTsKIH0KIAotc3RhdGljIGludCBtbWNfc2VuZF9jbWQoc3RydWN0IG1tYyAqbW1jLCBzdHJ1Y3QgbW1jX2NtZCAqY21kLAotCQkJc3RydWN0IG1tY19kYXRhICpkYXRhKQorc3RhdGljIGludCBtbWNfd2FpdF9pbmhpYml0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwKKwkJCSAgICBzdHJ1Y3QgbW1jX2NtZCAqY21kLAorCQkJICAgIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1tY19ob3N0ICopbW1jLT5wcml2OwotCWludCBmbGFncywgaTsKLQl1bnNpZ25lZCBpbnQgdGltZW91dDsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQl1bnNpZ25lZCBpbnQgcmV0cnkgPSAweDEwMDAwMDsKLQlkZWJ1ZygiIG1tY19zZW5kX2NtZCBjYWxsZWRcbiIpOwotCi0JLyogV2FpdCBtYXggMTAgbXMgKi8KLQl0aW1lb3V0ID0gMTA7Ci0KIAkvKgogCSAqIFBSTlNUUwotCSAqIENNRElOSERBVFsxXQk6IENvbW1hbmQgSW5oaWJpdCAoREFUKQotCSAqIENNRElOSENNRFswXQk6IENvbW1hbmQgSW5oaWJpdCAoQ01EKQorCSAqIENNRElOSERBVFsxXSA6IENvbW1hbmQgSW5oaWJpdCAoREFUKQorCSAqIENNRElOSENNRFswXSA6IENvbW1hbmQgSW5oaWJpdCAoQ01EKQogCSAqLwotCW1hc2sgPSAoMSA8PCAwKTsKLQlpZiAoKGRhdGEgIT0gTlVMTCkgfHwgKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9CVVNZKSkKLQkJbWFzayB8PSAoMSA8PCAxKTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFRFR1JBX01NQ19QUk5TVFNfQ01EX0lOSElCSVRfQ01EOwogCiAJLyoKIAkgKiBXZSBzaG91bGRuJ3Qgd2FpdCBmb3IgZGF0YSBpbmhpYml0IGZvciBzdG9wIGNvbW1hbmRzLCBldmVuCiAJICogdGhvdWdoIHRoZXkgbWlnaHQgdXNlIGJ1c3kgc2lnbmFsaW5nCiAJICovCi0JaWYgKGRhdGEpCi0JCW1hc2sgJj0gfigxIDw8IDEpOworCWlmICgoZGF0YSA9PSBOVUxMKSAmJiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQX0JVU1kpKQorCQltYXNrIHw9IFRFR1JBX01NQ19QUk5TVFNfQ01EX0lOSElCSVRfREFUOwogCiAJd2hpbGUgKHJlYWRsKCZob3N0LT5yZWctPnBybnN0cykgJiBtYXNrKSB7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKQEAgLTE1MCw2ICsxNDQsMjQgQEAKIAkJdWRlbGF5KDEwMDApOwogCX0KIAorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tY19zZW5kX2NtZChzdHJ1Y3QgbW1jICptbWMsIHN0cnVjdCBtbWNfY21kICpjbWQsCisJCQlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gKHN0cnVjdCBtbWNfaG9zdCAqKW1tYy0+cHJpdjsKKwlpbnQgZmxhZ3MsIGk7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBpbnQgcmV0cnkgPSAweDEwMDAwMDsKKwlkZWJ1ZygiIG1tY19zZW5kX2NtZCBjYWxsZWRcbiIpOworCisJcmVzdWx0ID0gbW1jX3dhaXRfaW5oaWJpdChob3N0LCBjbWQsIGRhdGEsIDEwIC8qIG1zICovKTsKKworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCiAJaWYgKGRhdGEpCiAJCW1tY19wcmVwYXJlX2RhdGEoaG9zdCwgZGF0YSk7CiAKQEAgLTE3NSwyMCArMTg3LDIwIEBACiAJICoJMTEgPSBMZW5ndGggNDggQ2hlY2sgYnVzeSBhZnRlciByZXNwb25zZQogCSAqLwogCWlmICghKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9QUkVTRU5UKSkKLQkJZmxhZ3MgPSAwOworCQlmbGFncyA9IFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9OT19SRVNQT05TRTsKIAllbHNlIGlmIChjbWQtPnJlc3BfdHlwZSAmIE1NQ19SU1BfMTM2KQotCQlmbGFncyA9ICgxIDw8IDApOworCQlmbGFncyA9IFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9MRU5HVEhfMTM2OwogCWVsc2UgaWYgKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9CVVNZKQotCQlmbGFncyA9ICgzIDw8IDApOworCQlmbGFncyA9IFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9MRU5HVEhfNDhfQlVTWTsKIAllbHNlCi0JCWZsYWdzID0gKDIgPDwgMCk7CisJCWZsYWdzID0gVEVHUkFfTU1DX0NNRFJFR19SRVNQX1RZUEVfU0VMRUNUX0xFTkdUSF80ODsKIAogCWlmIChjbWQtPnJlc3BfdHlwZSAmIE1NQ19SU1BfQ1JDKQotCQlmbGFncyB8PSAoMSA8PCAzKTsKKwkJZmxhZ3MgfD0gVEVHUkFfTU1DX1RSTk1PRF9DTURfQ1JDX0NIRUNLOwogCWlmIChjbWQtPnJlc3BfdHlwZSAmIE1NQ19SU1BfT1BDT0RFKQotCQlmbGFncyB8PSAoMSA8PCA0KTsKKwkJZmxhZ3MgfD0gVEVHUkFfTU1DX1RSTk1PRF9DTURfSU5ERVhfQ0hFQ0s7CiAJaWYgKGRhdGEpCi0JCWZsYWdzIHw9ICgxIDw8IDUpOworCQlmbGFncyB8PSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfUFJFU0VOVF9TRUxFQ1RfREFUQV9UUkFOU0ZFUjsKIAogCWRlYnVnKCJjbWQ6ICVkXG4iLCBjbWQtPmNtZGlkeCk7CiAKQEAgLTE5Nyw3ICsyMDksNyBAQAogCWZvciAoaSA9IDA7IGkgPCByZXRyeTsgaSsrKSB7CiAJCW1hc2sgPSByZWFkbCgmaG9zdC0+cmVnLT5ub3JpbnRzdHMpOwogCQkvKiBDb21tYW5kIENvbXBsZXRlICovCi0JCWlmIChtYXNrICYgKDEgPDwgMCkpIHsKKwkJaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX0NNRF9DT01QTEVURSkgewogCQkJaWYgKCFkYXRhKQogCQkJCXdyaXRlbChtYXNrLCAmaG9zdC0+cmVnLT5ub3JpbnRzdHMpOwogCQkJYnJlYWs7CkBAIC0yMDksMTEgKzIyMSwxMSBAQAogCQlyZXR1cm4gVElNRU9VVDsKIAl9CiAKLQlpZiAobWFzayAmICgxIDw8IDE2KSkgeworCWlmIChtYXNrICYgVEVHUkFfTU1DX05PUklOVFNUU19DTURfVElNRU9VVCkgewogCQkvKiBUaW1lb3V0IEVycm9yICovCiAJCWRlYnVnKCJ0aW1lb3V0OiAlMDh4IGNtZCAlZFxuIiwgbWFzaywgY21kLT5jbWRpZHgpOwogCQlyZXR1cm4gVElNRU9VVDsKLQl9IGVsc2UgaWYgKG1hc2sgJiAoMSA8PCAxNSkpIHsKKwl9IGVsc2UgaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX0VSUl9JTlRFUlJVUFQpIHsKIAkJLyogRXJyb3IgSW50ZXJydXB0ICovCiAJCWRlYnVnKCJlcnJvcjogJTA4eCBjbWQgJWRcbiIsIG1hc2ssIGNtZC0+Y21kaWR4KTsKIAkJcmV0dXJuIC0xOwpAQCAtMjU2LDIzICsyNjgsNDQgQEAKIAl9CiAKIAlpZiAoZGF0YSkgeworCQl1bnNpZ25lZCBsb25nCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCiAJCXdoaWxlICgxKSB7CiAJCQltYXNrID0gcmVhZGwoJmhvc3QtPnJlZy0+bm9yaW50c3RzKTsKIAotCQkJaWYgKG1hc2sgJiAoMSA8PCAxNSkpIHsKKwkJCWlmIChtYXNrICYgVEVHUkFfTU1DX05PUklOVFNUU19FUlJfSU5URVJSVVBUKSB7CiAJCQkJLyogRXJyb3IgSW50ZXJydXB0ICovCiAJCQkJd3JpdGVsKG1hc2ssICZob3N0LT5yZWctPm5vcmludHN0cyk7CiAJCQkJcHJpbnRmKCIlczogZXJyb3IgZHVyaW5nIHRyYW5zZmVyOiAweCUwOHhcbiIsCiAJCQkJCQlfX2Z1bmNfXywgbWFzayk7CiAJCQkJcmV0dXJuIC0xOwotCQkJfSBlbHNlIGlmIChtYXNrICYgKDEgPDwgMykpIHsKLQkJCQkvKiBETUEgSW50ZXJydXB0ICovCisJCQl9IGVsc2UgaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX0RNQV9JTlRFUlJVUFQpIHsKKwkJCQkvKgorCQkJCSAqIERNQSBJbnRlcnJ1cHQsIHJlc3RhcnQgdGhlIHRyYW5zZmVyIHdoZXJlCisJCQkJICogaXQgd2FzIGludGVycnVwdGVkLgorCQkJCSAqLworCQkJCXVuc2lnbmVkIGludCBhZGRyZXNzID0gcmVhZGwoJmhvc3QtPnJlZy0+c3lzYWQpOworCiAJCQkJZGVidWcoIkRNQSBlbmRcbiIpOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIGlmIChtYXNrICYgKDEgPDwgMSkpIHsKKwkJCQl3cml0ZWwoVEVHUkFfTU1DX05PUklOVFNUU19ETUFfSU5URVJSVVBULAorCQkJCSAgICAgICAmaG9zdC0+cmVnLT5ub3JpbnRzdHMpOworCQkJCXdyaXRlbChhZGRyZXNzLCAmaG9zdC0+cmVnLT5zeXNhZCk7CisJCQl9IGVsc2UgaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX1hGRVJfQ09NUExFVEUpIHsKIAkJCQkvKiBUcmFuc2ZlciBDb21wbGV0ZSAqLwogCQkJCWRlYnVnKCJyL3cgaXMgZG9uZVxuIik7CiAJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGdldF90aW1lcihzdGFydCkgPiAyMDAwVUwpIHsKKwkJCQl3cml0ZWwobWFzaywgJmhvc3QtPnJlZy0+bm9yaW50c3RzKTsKKwkJCQlwcmludGYoIiVzOiBNTUMgVGltZW91dFxuIgorCQkJCSAgICAgICAiICAgIEludGVycnVwdCBzdGF0dXMgICAgICAgIDB4JTA4eFxuIgorCQkJCSAgICAgICAiICAgIEludGVycnVwdCBzdGF0dXMgZW5hYmxlIDB4JTA4eFxuIgorCQkJCSAgICAgICAiICAgIEludGVycnVwdCBzaWduYWwgZW5hYmxlIDB4JTA4eFxuIgorCQkJCSAgICAgICAiICAgIFByZXNlbnQgc3RhdHVzICAgICAgICAgIDB4JTA4eFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sIG1hc2ssCisJCQkJICAgICAgIHJlYWRsKCZob3N0LT5yZWctPm5vcmludHN0c2VuKSwKKwkJCQkgICAgICAgcmVhZGwoJmhvc3QtPnJlZy0+bm9yaW50c2lnZW4pLAorCQkJCSAgICAgICByZWFkbCgmaG9zdC0+cmVnLT5wcm5zdHMpKTsKKwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0KIAkJd3JpdGVsKG1hc2ssICZob3N0LT5yZWctPm5vcmludHN0cyk7CkBAIC0zMTAsMTIgKzM0MywxNCBAQAogCSAqIEVOSU5UQ0xLWzBdCQk6IEludGVybmFsIENsb2NrIEVuYWJsZQogCSAqLwogCWRpdiA+Pj0gMTsKLQljbGsgPSAoZGl2IDw8IDgpIHwgKDEgPDwgMCk7CisJY2xrID0gKChkaXYgPDwgVEVHUkFfTU1DX0NMS0NPTl9TRENMS19GUkVRX1NFTF9TSElGVCkgfAorCSAgICAgICBURUdSQV9NTUNfQ0xLQ09OX0lOVEVSTkFMX0NMT0NLX0VOQUJMRSk7CiAJd3JpdGV3KGNsaywgJmhvc3QtPnJlZy0+Y2xrY29uKTsKIAogCS8qIFdhaXQgbWF4IDEwIG1zICovCiAJdGltZW91dCA9IDEwOwotCXdoaWxlICghKHJlYWR3KCZob3N0LT5yZWctPmNsa2NvbikgJiAoMSA8PCAxKSkpIHsKKwl3aGlsZSAoIShyZWFkdygmaG9zdC0+cmVnLT5jbGtjb24pICYKKwkJIFRFR1JBX01NQ19DTEtDT05fSU5URVJOQUxfQ0xPQ0tfU1RBQkxFKSkgewogCQlpZiAodGltZW91dCA9PSAwKSB7CiAJCQlwcmludGYoIiVzOiB0aW1lb3V0IGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CkBAIC0zMjQsNyArMzU5LDcgQEAKIAkJdWRlbGF5KDEwMDApOwogCX0KIAotCWNsayB8PSAoMSA8PCAyKTsKKwljbGsgfD0gVEVHUkFfTU1DX0NMS0NPTl9TRF9DTE9DS19FTkFCTEU7CiAJd3JpdGV3KGNsaywgJmhvc3QtPnJlZy0+Y2xrY29uKTsKIAogCWRlYnVnKCJtbWNfY2hhbmdlX2Nsb2NrOiBjbGtjb24gPSAlMDhYXG4iLCBjbGspOwpAQCAtMzc1LDcgKzQxMCw3IEBACiAJICogMSA9IHJlc2V0CiAJICogMCA9IHdvcmsKIAkgKi8KLQl3cml0ZWIoKDEgPDwgMCksICZob3N0LT5yZWctPnN3cnN0KTsKKwl3cml0ZWIoVEVHUkFfTU1DX1NXUlNUX1NXX1JFU0VUX0ZPUl9BTEwsICZob3N0LT5yZWctPnN3cnN0KTsKIAogCWhvc3QtPmNsb2NrID0gMDsKIApAQCAtMzgzLDcgKzQxOCw3IEBACiAJdGltZW91dCA9IDEwMDsKIAogCS8qIGh3IGNsZWFycyB0aGUgYml0IHdoZW4gaXQncyBkb25lICovCi0Jd2hpbGUgKHJlYWRiKCZob3N0LT5yZWctPnN3cnN0KSAmICgxIDw8IDApKSB7CisJd2hpbGUgKHJlYWRiKCZob3N0LT5yZWctPnN3cnN0KSAmIFRFR1JBX01NQ19TV1JTVF9TV19SRVNFVF9GT1JfQUxMKSB7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKIAkJCXByaW50ZigiJXM6IHRpbWVvdXQgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKQEAgLTQxMywxMiArNDQ4LDE3IEBACiAJICogTk9STUFMIEludGVycnVwdCBTdGF0dXMgRW5hYmxlIFJlZ2lzdGVyIGluaXQKIAkgKiBbNV0gRU5TVEFCVUZSRFJEWSA6IEJ1ZmZlciBSZWFkIFJlYWR5IFN0YXR1cyBFbmFibGUKIAkgKiBbNF0gRU5TVEFCVUZXVFJEWSA6IEJ1ZmZlciB3cml0ZSBSZWFkeSBTdGF0dXMgRW5hYmxlCisJICogWzNdIEVOU1RBRE1BSU5UICAgOiBETUEgYm91bmRhcnkgaW50ZXJydXB0CiAJICogWzFdIEVOU1RBU1RBTlNDTVBMVCA6IFRyYW5zZnJlIENvbXBsZXRlIFN0YXR1cyBFbmFibGUKIAkgKiBbMF0gRU5TVEFDTURDTVBMVCA6IENvbW1hbmQgQ29tcGxldGUgU3RhdHVzIEVuYWJsZQogCSovCiAJbWFzayA9IHJlYWRsKCZob3N0LT5yZWctPm5vcmludHN0c2VuKTsKIAltYXNrICY9IH4oMHhmZmZmKTsKLQltYXNrIHw9ICgxIDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAxKSB8ICgxIDw8IDApOworCW1hc2sgfD0gKFRFR1JBX01NQ19OT1JJTlRTVFNFTl9DTURfQ09NUExFVEUgfAorCQkgVEVHUkFfTU1DX05PUklOVFNUU0VOX1hGRVJfQ09NUExFVEUgfAorCQkgVEVHUkFfTU1DX05PUklOVFNUU0VOX0RNQV9JTlRFUlJVUFQgfAorCQkgVEVHUkFfTU1DX05PUklOVFNUU0VOX0JVRkZFUl9XUklURV9SRUFEWSB8CisJCSBURUdSQV9NTUNfTk9SSU5UU1RTRU5fQlVGRkVSX1JFQURfUkVBRFkpOwogCXdyaXRlbChtYXNrLCAmaG9zdC0+cmVnLT5ub3JpbnRzdHNlbik7CiAKIAkvKgpAQCAtNDI3LDcgKzQ2Nyw3IEBACiAJICovCiAJbWFzayA9IHJlYWRsKCZob3N0LT5yZWctPm5vcmludHNpZ2VuKTsKIAltYXNrICY9IH4oMHhmZmZmKTsKLQltYXNrIHw9ICgxIDw8IDEpOworCW1hc2sgfD0gVEVHUkFfTU1DX05PUklOVFNJR0VOX1hGRVJfQ09NUExFVEU7CiAJd3JpdGVsKG1hc2ssICZob3N0LT5yZWctPm5vcmludHNpZ2VuKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvdGVncmEyX21tYy5oIGIvZHJpdmVycy9tbWMvdGVncmEyX21tYy5oCmluZGV4IDI4Njk4ZTAuLjY3MTU4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3RlZ3JhMl9tbWMuaAorKysgYi9kcml2ZXJzL21tYy90ZWdyYTJfbW1jLmgKQEAgLTY4LDYgKzY4LDU1IEBACiAJdW5zaWduZWQgY2hhcglyZXM2WzB4MTAwXTsJLyogUkVTRVJWRUQsIG9mZnNldCAxMDBoLTFGRmggKi8KIH07CiAKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX01BU0sJCQkJKDMgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX1NETUEJCQkJKDAgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX0FETUEyXzMyQklUCQkJKDIgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX0FETUEyXzY0QklUCQkJKDMgPDwgMykKKworI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RNQV9FTkFCTEUJCQkJKDEgPDwgMCkKKyNkZWZpbmUgVEVHUkFfTU1DX1RSTk1PRF9CTE9DS19DT1VOVF9FTkFCTEUJCQkoMSA8PCAxKQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfWEZFUl9ESVJfU0VMX1dSSVRFCQkoMCA8PCA0KQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfWEZFUl9ESVJfU0VMX1JFQUQJCQkoMSA8PCA0KQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX01VTFRJX0JMT0NLX1NFTEVDVAkJCSgxIDw8IDUpCisKKyNkZWZpbmUgVEVHUkFfTU1DX0NNRFJFR19SRVNQX1RZUEVfU0VMRUNUX01BU0sJCQkoMyA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfQ01EUkVHX1JFU1BfVFlQRV9TRUxFQ1RfTk9fUkVTUE9OU0UJCSgwIDw8IDApCisjZGVmaW5lIFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9MRU5HVEhfMTM2CQkoMSA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfQ01EUkVHX1JFU1BfVFlQRV9TRUxFQ1RfTEVOR1RIXzQ4CQkoMiA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfQ01EUkVHX1JFU1BfVFlQRV9TRUxFQ1RfTEVOR1RIXzQ4X0JVU1kJKDMgPDwgMCkKKworI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0NNRF9DUkNfQ0hFQ0sJCQkJKDEgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX1RSTk1PRF9DTURfSU5ERVhfQ0hFQ0sJCQkoMSA8PCA0KQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfUFJFU0VOVF9TRUxFQ1RfREFUQV9UUkFOU0ZFUgkoMSA8PCA1KQorCisjZGVmaW5lIFRFR1JBX01NQ19QUk5TVFNfQ01EX0lOSElCSVRfQ01ECQkJKDEgPDwgMCkKKyNkZWZpbmUgVEVHUkFfTU1DX1BSTlNUU19DTURfSU5ISUJJVF9EQVQJCQkoMSA8PCAxKQorCisjZGVmaW5lIFRFR1JBX01NQ19DTEtDT05fSU5URVJOQUxfQ0xPQ0tfRU5BQkxFCQkJKDEgPDwgMCkKKyNkZWZpbmUgVEVHUkFfTU1DX0NMS0NPTl9JTlRFUk5BTF9DTE9DS19TVEFCTEUJCQkoMSA8PCAxKQorI2RlZmluZSBURUdSQV9NTUNfQ0xLQ09OX1NEX0NMT0NLX0VOQUJMRQkJCSgxIDw8IDIpCisKKyNkZWZpbmUgVEVHUkFfTU1DX0NMS0NPTl9TRENMS19GUkVRX1NFTF9TSElGVAkJCTgKKyNkZWZpbmUgVEVHUkFfTU1DX0NMS0NPTl9TRENMS19GUkVRX1NFTF9NQVNLCQkJKDB4ZmYgPDwgOCkKKworI2RlZmluZSBURUdSQV9NTUNfU1dSU1RfU1dfUkVTRVRfRk9SX0FMTAkJCSgxIDw8IDApCisjZGVmaW5lIFRFR1JBX01NQ19TV1JTVF9TV19SRVNFVF9GT1JfQ01EX0xJTkUJCQkoMSA8PCAxKQorI2RlZmluZSBURUdSQV9NTUNfU1dSU1RfU1dfUkVTRVRfRk9SX0RBVF9MSU5FCQkJKDEgPDwgMikKKworI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU1RTX0NNRF9DT01QTEVURQkJCSgxIDw8IDApCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNfWEZFUl9DT01QTEVURQkJCSgxIDw8IDEpCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNfRE1BX0lOVEVSUlVQVAkJCSgxIDw8IDMpCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNfRVJSX0lOVEVSUlVQVAkJCSgxIDw8IDE1KQorI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU1RTX0NNRF9USU1FT1VUCQkJCSgxIDw8IDE2KQorCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNFTl9DTURfQ09NUExFVEUJCQkoMSA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU1RTRU5fWEZFUl9DT01QTEVURQkJCSgxIDw8IDEpCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNFTl9ETUFfSU5URVJSVVBUCQkJKDEgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX05PUklOVFNUU0VOX0JVRkZFUl9XUklURV9SRUFEWQkJKDEgPDwgNCkKKyNkZWZpbmUgVEVHUkFfTU1DX05PUklOVFNUU0VOX0JVRkZFUl9SRUFEX1JFQURZCQkJKDEgPDwgNSkKKworI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU0lHRU5fWEZFUl9DT01QTEVURQkJCSgxIDw8IDEpCisKIHN0cnVjdCBtbWNfaG9zdCB7CiAJc3RydWN0IHRlZ3JhMl9tbWMgKnJlZzsKIAl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogU0RIQ0kgc3BlYy4gdmVyc2lvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGF0YWZsYXNoLmMgYi9kcml2ZXJzL210ZC9kYXRhZmxhc2guYwppbmRleCA5NmNkMzk1Li45ODFjY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9kYXRhZmxhc2guYwpAQCAtMzksNyArMzksNiBAQAogCWludCBpLCBqOwogCWludCBkZmNvZGU7CiAJaW50IHBhcnQ7Ci0JaW50IGxhc3RfcGFydDsKIAlpbnQgZm91bmRbQ09ORklHX1NZU19NQVhfREFUQUZMQVNIX0JBTktTXTsKIAl1bnNpZ25lZCBjaGFyIHByb3RlY3RlZDsKIApAQCAtMTM2LDcgKzEzNSw2IEBACiAJCQkJZGF0YWZsYXNoX2luZm9baV0uRGV2aWNlLnBhZ2VzX3NpemUpIC0gMTsKIAogCQlwYXJ0ID0gMDsKLQkJbGFzdF9wYXJ0ID0gMDsKIAkJLyogc2V0IHRoZSBhcmVhIGFkZHJlc3NlcyAqLwogCQlmb3IoaiA9IDA7IGogPCBOQl9EQVRBRkxBU0hfQVJFQTsgaisrKSB7CiAJCQlpZihmb3VuZFtpXSE9MCkgewpAQCAtMTQ3LDcgKzE0NSw2IEBACiAJCQkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5hcmVhX2xpc3Rbal0uZW5kID0KIAkJCQkJCWRhdGFmbGFzaF9pbmZvW2ldLmVuZF9hZGRyZXNzICsKIAkJCQkJCWRhdGFmbGFzaF9pbmZvW2ldLmxvZ2ljYWxfYWRkcmVzczsKLQkJCQkJbGFzdF9wYXJ0ID0gMTsKIAkJCQl9IGVsc2UgewogCQkJCQlkYXRhZmxhc2hfaW5mb1tpXS5EZXZpY2UuYXJlYV9saXN0W2pdLmVuZCA9CiAJCQkJCQlhcmVhX2xpc3RbcGFydF0uZW5kICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCmluZGV4IDI4YmQzNTAuLjM2ZWU0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQpAQCAtNTQsNiArNTQsNyBAQAogQ09CSlMtJChDT05GSUdfTkFORF9LTUVURVIxKSArPSBrbWV0ZXIxX25hbmQubwogQ09CSlMtJChDT05GSUdfTkFORF9NUEM1MTIxX05GQykgKz0gbXBjNTEyMV9uZmMubwogQ09CSlMtJChDT05GSUdfTkFORF9NWEMpICs9IG14Y19uYW5kLm8KK0NPQkpTLSQoQ09ORklHX05BTkRfTVhTKSArPSBteHNfbmFuZC5vCiBDT0JKUy0kKENPTkZJR19OQU5EX05ERkMpICs9IG5kZmMubwogQ09CSlMtJChDT05GSUdfTkFORF9OT01BRElLKSArPSBub21hZGlrLm8KIENPQkpTLSQoQ09ORklHX05BTkRfUzNDMjQxMCkgKz0gczNjMjQxMF9uYW5kLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhzX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhzX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTJhMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teHNfbmFuZC5jCkBAIC0wLDAgKzEsMTExOCBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggTkFORCBmbGFzaCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIEZyZWVzY2FsZSBHUE1JIE5GQyBOQU5EIEZsYXNoIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorCisjZGVmaW5lCU1YU19OQU5EX0RNQV9ERVNDUklQVE9SX0NPVU5UCQk0CisKKyNkZWZpbmUJTVhTX05BTkRfQ0hVTktfREFUQV9DSFVOS19TSVpFCQk1MTIKKyNkZWZpbmUJTVhTX05BTkRfTUVUQURBVEFfU0laRQkJCTEwCisKKyNkZWZpbmUJTVhTX05BTkRfQ09NTUFORF9CVUZGRVJfU0laRQkJMzIKKworI2RlZmluZQlNWFNfTkFORF9CQ0hfVElNRU9VVAkJCTEwMDAwCisKK3N0cnVjdCBteHNfbmFuZF9pbmZvIHsKKwlpbnQJCWN1cl9jaGlwOworCisJdWludDMyX3QJY21kX3F1ZXVlX2xlbjsKKworCXVpbnQ4X3QJCSpjbWRfYnVmOworCXVpbnQ4X3QJCSpkYXRhX2J1ZjsKKwl1aW50OF90CQkqb29iX2J1ZjsKKworCXVpbnQ4X3QJCW1hcmtpbmdfYmxvY2tfYmFkOworCXVpbnQ4X3QJCXJhd19vb2JfbW9kZTsKKworCS8qIEZ1bmN0aW9ucyB3aXRoIGFsdGVyZWQgYmVoYXZpb3VyICovCisJaW50CQkoKmhvb2tlZF9yZWFkX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJbG9mZl90IGZyb20sIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKKwlpbnQJCSgqaG9va2VkX3dyaXRlX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJbG9mZl90IHRvLCBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CisJaW50CQkoKmhvb2tlZF9ibG9ja19tYXJrYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQlsb2ZmX3Qgb2ZzKTsKKworCS8qIERNQSBkZXNjcmlwdG9ycyAqLworCXN0cnVjdCBteHNfZG1hX2Rlc2MJKipkZXNjOworCXVpbnQzMl90CQlkZXNjX2luZGV4OworfTsKKworc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZha2VfZWNjX2xheW91dDsKKworc3RhdGljIHN0cnVjdCBteHNfZG1hX2Rlc2MgKm14c19uYW5kX2dldF9kbWFfZGVzYyhzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkZXNjOworCisJaWYgKGluZm8tPmRlc2NfaW5kZXggPj0gTVhTX05BTkRfRE1BX0RFU0NSSVBUT1JfQ09VTlQpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogVG9vIG1hbnkgRE1BIGRlc2NyaXB0b3JzIHJlcXVlc3RlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWRlc2MgPSBpbmZvLT5kZXNjW2luZm8tPmRlc2NfaW5kZXhdOworCWluZm8tPmRlc2NfaW5kZXgrKzsKKworCXJldHVybiBkZXNjOworfQorCitzdGF0aWMgdm9pZCBteHNfbmFuZF9yZXR1cm5fZG1hX2Rlc2NzKHN0cnVjdCBteHNfbmFuZF9pbmZvICppbmZvKQoreworCWludCBpOworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmRlc2M7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ZGVzY19pbmRleDsgaSsrKSB7CisJCWRlc2MgPSBpbmZvLT5kZXNjW2ldOworCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBteHNfZG1hX2Rlc2MpKTsKKwkJZGVzYy0+YWRkcmVzcyA9IChkbWFfYWRkcl90KWRlc2M7CisJfQorCisJaW5mby0+ZGVzY19pbmRleCA9IDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBteHNfbmFuZF9lY2NfY2h1bmtfY250KHVpbnQzMl90IHBhZ2VfZGF0YV9zaXplKQoreworCXJldHVybiBwYWdlX2RhdGFfc2l6ZSAvIE1YU19OQU5EX0NIVU5LX0RBVEFfQ0hVTktfU0laRTsKK30KKworc3RhdGljIHVpbnQzMl90IG14c19uYW5kX2VjY19zaXplX2luX2JpdHModWludDMyX3QgZWNjX3N0cmVuZ3RoKQoreworCXJldHVybiBlY2Nfc3RyZW5ndGggKiAxMzsKK30KKworc3RhdGljIHVpbnQzMl90IG14c19uYW5kX2F1eF9zdGF0dXNfb2Zmc2V0KHZvaWQpCit7CisJcmV0dXJuIChNWFNfTkFORF9NRVRBREFUQV9TSVpFICsgMHgzKSAmIH4weDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbXhzX25hbmRfZ2V0X2VjY19zdHJlbmd0aCh1aW50MzJfdCBwYWdlX2RhdGFfc2l6ZSwKKwkJCQkJCXVpbnQzMl90IHBhZ2Vfb29iX3NpemUpCit7CisJaWYgKHBhZ2VfZGF0YV9zaXplID09IDIwNDgpCisJCXJldHVybiA4OworCisJaWYgKHBhZ2VfZGF0YV9zaXplID09IDQwOTYpIHsKKwkJaWYgKHBhZ2Vfb29iX3NpemUgPT0gMTI4KQorCQkJcmV0dXJuIDg7CisKKwkJaWYgKHBhZ2Vfb29iX3NpemUgPT0gMjE4KQorCQkJcmV0dXJuIDE2OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG14c19uYW5kX2dldF9tYXJrX29mZnNldCh1aW50MzJfdCBwYWdlX2RhdGFfc2l6ZSwKKwkJCQkJCXVpbnQzMl90IGVjY19zdHJlbmd0aCkKK3sKKwl1aW50MzJfdCBjaHVua19kYXRhX3NpemVfaW5fYml0czsKKwl1aW50MzJfdCBjaHVua19lY2Nfc2l6ZV9pbl9iaXRzOworCXVpbnQzMl90IGNodW5rX3RvdGFsX3NpemVfaW5fYml0czsKKwl1aW50MzJfdCBibG9ja19tYXJrX2NodW5rX251bWJlcjsKKwl1aW50MzJfdCBibG9ja19tYXJrX2NodW5rX2JpdF9vZmZzZXQ7CisJdWludDMyX3QgYmxvY2tfbWFya19iaXRfb2Zmc2V0OworCisJY2h1bmtfZGF0YV9zaXplX2luX2JpdHMgPSBNWFNfTkFORF9DSFVOS19EQVRBX0NIVU5LX1NJWkUgKiA4OworCWNodW5rX2VjY19zaXplX2luX2JpdHMgID0gbXhzX25hbmRfZWNjX3NpemVfaW5fYml0cyhlY2Nfc3RyZW5ndGgpOworCisJY2h1bmtfdG90YWxfc2l6ZV9pbl9iaXRzID0KKwkJCWNodW5rX2RhdGFfc2l6ZV9pbl9iaXRzICsgY2h1bmtfZWNjX3NpemVfaW5fYml0czsKKworCS8qIENvbXB1dGUgdGhlIGJpdCBvZmZzZXQgb2YgdGhlIGJsb2NrIG1hcmsgd2l0aGluIHRoZSBwaHlzaWNhbCBwYWdlLiAqLworCWJsb2NrX21hcmtfYml0X29mZnNldCA9IHBhZ2VfZGF0YV9zaXplICogODsKKworCS8qIFN1YnRyYWN0IHRoZSBtZXRhZGF0YSBiaXRzLiAqLworCWJsb2NrX21hcmtfYml0X29mZnNldCAtPSBNWFNfTkFORF9NRVRBREFUQV9TSVpFICogODsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgY2h1bmsgbnVtYmVyIChzdGFydGluZyBhdCB6ZXJvKSBpbiB3aGljaCB0aGUgYmxvY2sgbWFyaworCSAqIGFwcGVhcnMuCisJICovCisJYmxvY2tfbWFya19jaHVua19udW1iZXIgPQorCQkJYmxvY2tfbWFya19iaXRfb2Zmc2V0IC8gY2h1bmtfdG90YWxfc2l6ZV9pbl9iaXRzOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBiaXQgb2Zmc2V0IG9mIHRoZSBibG9jayBtYXJrIHdpdGhpbiBpdHMgY2h1bmssIGFuZAorCSAqIHZhbGlkYXRlIGl0LgorCSAqLworCWJsb2NrX21hcmtfY2h1bmtfYml0X29mZnNldCA9IGJsb2NrX21hcmtfYml0X29mZnNldCAtCisJCQkoYmxvY2tfbWFya19jaHVua19udW1iZXIgKiBjaHVua190b3RhbF9zaXplX2luX2JpdHMpOworCisJaWYgKGJsb2NrX21hcmtfY2h1bmtfYml0X29mZnNldCA+IGNodW5rX2RhdGFfc2l6ZV9pbl9iaXRzKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogTm93IHRoYXQgd2Uga25vdyB0aGUgY2h1bmsgbnVtYmVyIGluIHdoaWNoIHRoZSBibG9jayBtYXJrIGFwcGVhcnMsCisJICogd2UgY2FuIHN1YnRyYWN0IGFsbCB0aGUgRUNDIGJpdHMgdGhhdCBhcHBlYXIgYmVmb3JlIGl0LgorCSAqLworCWJsb2NrX21hcmtfYml0X29mZnNldCAtPQorCQlibG9ja19tYXJrX2NodW5rX251bWJlciAqIGNodW5rX2VjY19zaXplX2luX2JpdHM7CisKKwlyZXR1cm4gYmxvY2tfbWFya19iaXRfb2Zmc2V0OworfQorCitzdGF0aWMgdWludDMyX3QgbXhzX25hbmRfbWFya19ieXRlX29mZnNldChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwl1aW50MzJfdCBlY2Nfc3RyZW5ndGg7CisJZWNjX3N0cmVuZ3RoID0gbXhzX25hbmRfZ2V0X2VjY19zdHJlbmd0aChtdGQtPndyaXRlc2l6ZSwgbXRkLT5vb2JzaXplKTsKKwlyZXR1cm4gbXhzX25hbmRfZ2V0X21hcmtfb2Zmc2V0KG10ZC0+d3JpdGVzaXplLCBlY2Nfc3RyZW5ndGgpID4+IDM7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBteHNfbmFuZF9tYXJrX2JpdF9vZmZzZXQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJdWludDMyX3QgZWNjX3N0cmVuZ3RoOworCWVjY19zdHJlbmd0aCA9IG14c19uYW5kX2dldF9lY2Nfc3RyZW5ndGgobXRkLT53cml0ZXNpemUsIG10ZC0+b29ic2l6ZSk7CisJcmV0dXJuIG14c19uYW5kX2dldF9tYXJrX29mZnNldChtdGQtPndyaXRlc2l6ZSwgZWNjX3N0cmVuZ3RoKSAmIDB4NzsKK30KKworLyoKKyAqIFdhaXQgZm9yIEJDSCBjb21wbGV0ZSBJUlEgYW5kIGNsZWFyIHRoZSBJUlEKKyAqLworc3RhdGljIGludCBteHNfbmFuZF93YWl0X2Zvcl9iY2hfY29tcGxldGUodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9iY2hfcmVncyAqYmNoX3JlZ3MgPSAoc3RydWN0IG14MjhfYmNoX3JlZ3MgKilNWFNfQkNIX0JBU0U7CisJaW50IHRpbWVvdXQgPSBNWFNfTkFORF9CQ0hfVElNRU9VVDsKKwlpbnQgcmV0OworCisJcmV0ID0gbXgyOF93YWl0X21hc2tfc2V0KCZiY2hfcmVncy0+aHdfYmNoX2N0cmxfcmVnLAorCQlCQ0hfQ1RSTF9DT01QTEVURV9JUlEsIHRpbWVvdXQpOworCisJd3JpdGVsKEJDSF9DVFJMX0NPTVBMRVRFX0lSUSwgJmJjaF9yZWdzLT5od19iY2hfY3RybF9jbHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2UgaW5zdGFsbCBpbiB0aGUgY21kX2N0cmwgZnVuY3Rpb24gcG9pbnRlciBvZiB0aGUKKyAqIG93bmluZyBzdHJ1Y3QgbmFuZF9jaGlwLiBUaGUgb25seSBmdW5jdGlvbnMgaW4gdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICogdGhhdCB1c2UgdGhlc2UgZnVuY3Rpb25zIHBvaW50ZXJzIGFyZSBjbWRmdW5jIGFuZCBzZWxlY3RfY2hpcC4KKyAqCisgKiBJbiB0aGlzIGRyaXZlciwgd2UgaW1wbGVtZW50IG91ciBvd24gc2VsZWN0X2NoaXAsIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5CisgKiBiZSBjYWxsZWQgYnkgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbidzIGNtZGZ1bmMuIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuCisgKiBpZ25vcmUgdGhlIGNoaXAgZW5hYmxlIGJpdCBhbmQgY29uY2VudHJhdGUgb25seSBvbiBzZW5kaW5nIGJ5dGVzIHRvIHRoZSBOQU5ECisgKiBGbGFzaC4KKyAqLworc3RhdGljIHZvaWQgbXhzX25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkYXRhLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gbXRkLT5wcml2OworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmQ7CisJdWludDMyX3QgY2hhbm5lbCA9IE1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMCArIG5hbmRfaW5mby0+Y3VyX2NoaXA7CisJaW50IHJldDsKKworCS8qCisJICogSWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZSwgc29tZXRoaW5nIGlzIF9WRVJZXyB3cm9uZyBpbiBNVEQKKwkgKiBzdWJzeXN0ZW0hCisJICovCisJaWYgKG5hbmRfaW5mby0+Y21kX3F1ZXVlX2xlbiA9PSBNWFNfTkFORF9DT01NQU5EX0JVRkZFUl9TSVpFKSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IENvbW1hbmQgcXVldWUgdG9vIGxvbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFdmVyeSBvcGVyYXRpb24gYmVnaW5zIHdpdGggYSBjb21tYW5kIGJ5dGUgYW5kIGEgc2VyaWVzIG9mIHplcm8gb3IKKwkgKiBtb3JlIGFkZHJlc3MgYnl0ZXMuIFRoZXNlIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGVpdGhlciB0aGUgQWRkcmVzcworCSAqIExhdGNoIEVuYWJsZSAoQUxFKSBvciBDb21tYW5kIExhdGNoIEVuYWJsZSAoQ0xFKSBzaWduYWxzIGJlaW5nCisJICogYXNzZXJ0ZWQuIFdoZW4gTVREIGlzIHJlYWR5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQsIGl0IHdpbGwKKwkgKiBkZWFzZXJ0IGJvdGggbGF0Y2ggZW5hYmxlcy4KKwkgKgorCSAqIFJhdGhlciB0aGFuIHJ1biBhIHNlcGFyYXRlIERNQSBvcGVyYXRpb24gZm9yIGV2ZXJ5IHNpbmdsZSBieXRlLCB3ZQorCSAqIHF1ZXVlIHRoZW0gdXAgYW5kIHJ1biBhIHNpbmdsZSBETUEgb3BlcmF0aW9uIGZvciB0aGUgZW50aXJlIHNlcmllcworCSAqIG9mIGNvbW1hbmQgYW5kIGRhdGEgYnl0ZXMuCisJICovCisJaWYgKGN0cmwgJiAoTkFORF9BTEUgfCBOQU5EX0NMRSkpIHsKKwkJaWYgKGRhdGEgIT0gTkFORF9DTURfTk9ORSkKKwkJCW5hbmRfaW5mby0+Y21kX2J1ZltuYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4rK10gPSBkYXRhOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiBjb250cm9sIGFycml2ZXMgaGVyZSwgTVREIGhhcyBkZWFzc2VydGVkIGJvdGggdGhlIEFMRSBhbmQgQ0xFLAorCSAqIHdoaWNoIG1lYW5zIGl0J3MgcmVhZHkgdG8gcnVuIGFuIG9wZXJhdGlvbi4gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkKKwkgKiBieXRlcyB0byBzZW5kLgorCSAqLworCWlmIChuYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4gPT0gMCkKKwkJcmV0dXJuOworCisJLyogQ29tcGlsZSB0aGUgRE1BIGRlc2NyaXB0b3IgLS0gYSBkZXNjcmlwdG9yIHRoYXQgc2VuZHMgY29tbWFuZC4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9ETUFfUkVBRCB8IE1YU19ETUFfREVTQ19JUlEgfAorCQlNWFNfRE1BX0RFU0NfQ0hBSU4gfCBNWFNfRE1BX0RFU0NfREVDX1NFTSB8CisJCU1YU19ETUFfREVTQ19XQUlUNEVORCB8ICgzIDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKSB8CisJCShuYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4gPDwgTVhTX0RNQV9ERVNDX0JZVEVTX09GRlNFVCk7CisKKwlkLT5jbWQuYWRkcmVzcyA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+Y21kX2J1ZjsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9XUklURSB8CisJCUdQTUlfQ1RSTDBfV09SRF9MRU5HVEggfAorCQkobmFuZF9pbmZvLT5jdXJfY2hpcCA8PCBHUE1JX0NUUkwwX0NTX09GRlNFVCkgfAorCQlHUE1JX0NUUkwwX0FERFJFU1NfTkFORF9DTEUgfAorCQlHUE1JX0NUUkwwX0FERFJFU1NfSU5DUkVNRU5UIHwKKwkJbmFuZF9pbmZvLT5jbWRfcXVldWVfbGVuOworCisJbXhzX2RtYV9kZXNjX2FwcGVuZChjaGFubmVsLCBkKTsKKworCS8qIEV4ZWN1dGUgdGhlIERNQSBjaGFpbi4gKi8KKwlyZXQgPSBteHNfZG1hX2dvKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXByaW50ZigiTVhTIE5BTkQ6IEVycm9yIHNlbmRpbmcgY29tbWFuZFxuIik7CisKKwlteHNfbmFuZF9yZXR1cm5fZG1hX2Rlc2NzKG5hbmRfaW5mbyk7CisKKwkvKiBSZXNldCB0aGUgY29tbWFuZCBxdWV1ZS4gKi8KKwluYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4gPSAwOworfQorCisvKgorICogVGVzdCBpZiB0aGUgTkFORCBmbGFzaCBpcyByZWFkeS4KKyAqLworc3RhdGljIGludCBteHNfbmFuZF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gY2hpcC0+cHJpdjsKKwlzdHJ1Y3QgbXgyOF9ncG1pX3JlZ3MgKmdwbWlfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9ncG1pX3JlZ3MgKilNWFNfR1BNSV9CQVNFOworCXVpbnQzMl90IHRtcDsKKworCXRtcCA9IHJlYWRsKCZncG1pX3JlZ3MtPmh3X2dwbWlfc3RhdCk7CisJdG1wID4+PSAoR1BNSV9TVEFUX1JFQURZX0JVU1lfT0ZGU0VUICsgbmFuZF9pbmZvLT5jdXJfY2hpcCk7CisKKwlyZXR1cm4gdG1wICYgMTsKK30KKworLyoKKyAqIFNlbGVjdCB0aGUgTkFORCBjaGlwLgorICovCitzdGF0aWMgdm9pZCBteHNfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gbmFuZC0+cHJpdjsKKworCW5hbmRfaW5mby0+Y3VyX2NoaXAgPSBjaGlwOworfQorCisvKgorICogSGFuZGxlIGJsb2NrIG1hcmsgc3dhcHBpbmcuCisgKgorICogTm90ZSB0aGF0LCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCBkb2Vzbid0IGtub3cgd2hldGhlciBpdCdzCisgKiBzd2FwcGluZyB0aGUgYmxvY2sgbWFyaywgb3Igc3dhcHBpbmcgaXQgKmJhY2sqIC0tIGJ1dCBpdCBkb2Vzbid0IG1hdHRlcgorICogYmVjYXVzZSB0aGUgdGhlIG9wZXJhdGlvbiBpcyB0aGUgc2FtZS4KKyAqLworc3RhdGljIHZvaWQgbXhzX25hbmRfc3dhcF9ibG9ja19tYXJrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQl1aW50OF90ICpkYXRhX2J1ZiwgdWludDhfdCAqb29iX2J1ZikKK3sKKwl1aW50MzJfdCBiaXRfb2Zmc2V0OworCXVpbnQzMl90IGJ1Zl9vZmZzZXQ7CisKKwl1aW50MzJfdCBzcmM7CisJdWludDMyX3QgZHN0OworCisJYml0X29mZnNldCA9IG14c19uYW5kX21hcmtfYml0X29mZnNldChtdGQpOworCWJ1Zl9vZmZzZXQgPSBteHNfbmFuZF9tYXJrX2J5dGVfb2Zmc2V0KG10ZCk7CisKKwkvKgorCSAqIEdldCB0aGUgYnl0ZSBmcm9tIHRoZSBkYXRhIGFyZWEgdGhhdCBvdmVybGF5cyB0aGUgYmxvY2sgbWFyay4gU2luY2UKKwkgKiB0aGUgRUNDIGVuZ2luZSBhcHBsaWVzIGl0cyBvd24gdmlldyB0byB0aGUgYml0cyBpbiB0aGUgcGFnZSwgdGhlCisJICogcGh5c2ljYWwgYmxvY2sgbWFyayB3b24ndCAoaW4gZ2VuZXJhbCkgYXBwZWFyIG9uIGEgYnl0ZSBib3VuZGFyeSBpbgorCSAqIHRoZSBkYXRhLgorCSAqLworCXNyYyA9IGRhdGFfYnVmW2J1Zl9vZmZzZXRdID4+IGJpdF9vZmZzZXQ7CisJc3JjIHw9IGRhdGFfYnVmW2J1Zl9vZmZzZXQgKyAxXSA8PCAoOCAtIGJpdF9vZmZzZXQpOworCisJZHN0ID0gb29iX2J1ZlswXTsKKworCW9vYl9idWZbMF0gPSBzcmM7CisKKwlkYXRhX2J1ZltidWZfb2Zmc2V0XSAmPSB+KDB4ZmYgPDwgYml0X29mZnNldCk7CisJZGF0YV9idWZbYnVmX29mZnNldCArIDFdICY9IDB4ZmYgPDwgYml0X29mZnNldDsKKworCWRhdGFfYnVmW2J1Zl9vZmZzZXRdIHw9IGRzdCA8PCBiaXRfb2Zmc2V0OworCWRhdGFfYnVmW2J1Zl9vZmZzZXQgKyAxXSB8PSBkc3QgPj4gKDggLSBiaXRfb2Zmc2V0KTsKK30KKworLyoKKyAqIFJlYWQgZGF0YSBmcm9tIE5BTkQuCisgKi8KK3N0YXRpYyB2b2lkIG14c19uYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW5ndGgpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gbmFuZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkOworCXVpbnQzMl90IGNoYW5uZWwgPSBNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTAgKyBuYW5kX2luZm8tPmN1cl9jaGlwOworCWludCByZXQ7CisKKwlpZiAobGVuZ3RoID4gTkFORF9NQVhfUEFHRVNJWkUpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRE1BIGJ1ZmZlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghYnVmKSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IERNQSBidWZmZXIgaXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDb21waWxlIHRoZSBETUEgZGVzY3JpcHRvciAtIGEgZGVzY3JpcHRvciB0aGF0IHJlYWRzIGRhdGEuICovCisJZCA9IG14c19uYW5kX2dldF9kbWFfZGVzYyhuYW5kX2luZm8pOworCWQtPmNtZC5kYXRhID0KKwkJTVhTX0RNQV9ERVNDX0NPTU1BTkRfRE1BX1dSSVRFIHwgTVhTX0RNQV9ERVNDX0lSUSB8CisJCU1YU19ETUFfREVTQ19ERUNfU0VNIHwgTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwKKwkJKDEgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpIHwKKwkJKGxlbmd0aCA8PCBNWFNfRE1BX0RFU0NfQllURVNfT0ZGU0VUKTsKKworCWQtPmNtZC5hZGRyZXNzID0gKGRtYV9hZGRyX3QpbmFuZF9pbmZvLT5kYXRhX2J1ZjsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9SRUFEIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEEgfAorCQlsZW5ndGg7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyoKKwkgKiBBIERNQSBkZXNjcmlwdG9yIHRoYXQgd2FpdHMgZm9yIHRoZSBjb21tYW5kIHRvIGVuZCBhbmQgdGhlIGNoaXAgdG8KKwkgKiBiZWNvbWUgcmVhZHkuCisJICoKKwkgKiBJIHRoaW5rIHdlIGFjdHVhbGx5IHNob3VsZCAqbm90KiBiZSB3YWl0aW5nIGZvciB0aGUgY2hpcCB0byBiZWNvbWUKKwkgKiByZWFkeSBiZWNhdXNlLCBhZnRlciBhbGwsIHdlIGRvbid0IGNhcmUuIEkgdGhpbmsgdGhlIG9yaWdpbmFsIGNvZGUKKwkgKiBkaWQgdGhhdCBhbmQgbm8gb25lIGhhcyByZS10aG91Z2h0IGl0IHlldC4KKwkgKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9OT19ETUFYRkVSIHwgTVhTX0RNQV9ERVNDX0lSUSB8CisJCU1YU19ETUFfREVTQ19OQU5EX1dBSVRfNF9SRUFEWSB8IE1YU19ETUFfREVTQ19ERUNfU0VNIHwKKwkJTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwgKDQgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpOworCisJZC0+Y21kLmFkZHJlc3MgPSAwOworCisJZC0+Y21kLnBpb193b3Jkc1swXSA9CisJCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1dBSVRfRk9SX1JFQURZIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEE7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyogRXhlY3V0ZSB0aGUgRE1BIGNoYWluLiAqLworCXJldCA9IG14c19kbWFfZ28oY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlwcmludGYoIk1YUyBOQU5EOiBETUEgcmVhZCBlcnJvclxuIik7CisJCWdvdG8gcnRuOworCX0KKworCW1lbWNweShidWYsIG5hbmRfaW5mby0+ZGF0YV9idWYsIGxlbmd0aCk7CisKK3J0bjoKKwlteHNfbmFuZF9yZXR1cm5fZG1hX2Rlc2NzKG5hbmRfaW5mbyk7Cit9CisKKy8qCisgKiBXcml0ZSBkYXRhIHRvIE5BTkQuCisgKi8KK3N0YXRpYyB2b2lkIG14c19uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLAorCQkJCWludCBsZW5ndGgpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gbmFuZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkOworCXVpbnQzMl90IGNoYW5uZWwgPSBNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTAgKyBuYW5kX2luZm8tPmN1cl9jaGlwOworCWludCByZXQ7CisKKwlpZiAobGVuZ3RoID4gTkFORF9NQVhfUEFHRVNJWkUpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRE1BIGJ1ZmZlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghYnVmKSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IERNQSBidWZmZXIgaXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwltZW1jcHkobmFuZF9pbmZvLT5kYXRhX2J1ZiwgYnVmLCBsZW5ndGgpOworCisJLyogQ29tcGlsZSB0aGUgRE1BIGRlc2NyaXB0b3IgLSBhIGRlc2NyaXB0b3IgdGhhdCB3cml0ZXMgZGF0YS4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9ETUFfUkVBRCB8IE1YU19ETUFfREVTQ19JUlEgfAorCQlNWFNfRE1BX0RFU0NfREVDX1NFTSB8IE1YU19ETUFfREVTQ19XQUlUNEVORCB8CisJCSg0IDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKSB8CisJCShsZW5ndGggPDwgTVhTX0RNQV9ERVNDX0JZVEVTX09GRlNFVCk7CisKKwlkLT5jbWQuYWRkcmVzcyA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+ZGF0YV9idWY7CisKKwlkLT5jbWQucGlvX3dvcmRzWzBdID0KKwkJR1BNSV9DVFJMMF9DT01NQU5EX01PREVfV1JJVEUgfAorCQlHUE1JX0NUUkwwX1dPUkRfTEVOR1RIIHwKKwkJKG5hbmRfaW5mby0+Y3VyX2NoaXAgPDwgR1BNSV9DVFJMMF9DU19PRkZTRVQpIHwKKwkJR1BNSV9DVFJMMF9BRERSRVNTX05BTkRfREFUQSB8CisJCWxlbmd0aDsKKworCW14c19kbWFfZGVzY19hcHBlbmQoY2hhbm5lbCwgZCk7CisKKwkvKiBFeGVjdXRlIHRoZSBETUEgY2hhaW4uICovCisJcmV0ID0gbXhzX2RtYV9nbyhjaGFubmVsKTsKKwlpZiAocmV0KQorCQlwcmludGYoIk1YUyBOQU5EOiBETUEgd3JpdGUgZXJyb3JcbiIpOworCisJbXhzX25hbmRfcmV0dXJuX2RtYV9kZXNjcyhuYW5kX2luZm8pOworfQorCisvKgorICogUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gTkFORC4KKyAqLworc3RhdGljIHVpbnQ4X3QgbXhzX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXVpbnQ4X3QgYnVmOworCW14c19uYW5kX3JlYWRfYnVmKG10ZCwgJmJ1ZiwgMSk7CisJcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqIFJlYWQgYSBwYWdlIGZyb20gTkFORC4KKyAqLworc3RhdGljIGludCBteHNfbmFuZF9lY2NfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAorCQkJCQl1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmQ7CisJdWludDMyX3QgY2hhbm5lbCA9IE1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMCArIG5hbmRfaW5mby0+Y3VyX2NoaXA7CisJdWludDMyX3QgY29ycmVjdGVkID0gMCwgZmFpbGVkID0gMDsKKwl1aW50OF90CSpzdGF0dXM7CisJaW50IGksIHJldDsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gd2FpdCBmb3IgcmVhZHkuICovCisJZCA9IG14c19uYW5kX2dldF9kbWFfZGVzYyhuYW5kX2luZm8pOworCWQtPmNtZC5kYXRhID0KKwkJTVhTX0RNQV9ERVNDX0NPTU1BTkRfTk9fRE1BWEZFUiB8IE1YU19ETUFfREVTQ19DSEFJTiB8CisJCU1YU19ETUFfREVTQ19OQU5EX1dBSVRfNF9SRUFEWSB8IE1YU19ETUFfREVTQ19XQUlUNEVORCB8CisJCSgxIDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKTsKKworCWQtPmNtZC5hZGRyZXNzID0gMDsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9XQUlUX0ZPUl9SRUFEWSB8CisJCUdQTUlfQ1RSTDBfV09SRF9MRU5HVEggfAorCQkobmFuZF9pbmZvLT5jdXJfY2hpcCA8PCBHUE1JX0NUUkwwX0NTX09GRlNFVCkgfAorCQlHUE1JX0NUUkwwX0FERFJFU1NfTkFORF9EQVRBOworCisJbXhzX2RtYV9kZXNjX2FwcGVuZChjaGFubmVsLCBkKTsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gZW5hYmxlIHRoZSBCQ0ggYmxvY2sgYW5kIHJlYWQuICovCisJZCA9IG14c19uYW5kX2dldF9kbWFfZGVzYyhuYW5kX2luZm8pOworCWQtPmNtZC5kYXRhID0KKwkJTVhTX0RNQV9ERVNDX0NPTU1BTkRfTk9fRE1BWEZFUiB8IE1YU19ETUFfREVTQ19DSEFJTiB8CisJCU1YU19ETUFfREVTQ19XQUlUNEVORCB8CSg2IDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKTsKKworCWQtPmNtZC5hZGRyZXNzID0gMDsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9SRUFEIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEEgfAorCQkobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOworCWQtPmNtZC5waW9fd29yZHNbMV0gPSAwOworCWQtPmNtZC5waW9fd29yZHNbMl0gPQorCQlHUE1JX0VDQ0NUUkxfRU5BQkxFX0VDQyB8CisJCUdQTUlfRUNDQ1RSTF9FQ0NfQ01EX0RFQ09ERSB8CisJCUdQTUlfRUNDQ1RSTF9CVUZGRVJfTUFTS19CQ0hfUEFHRTsKKwlkLT5jbWQucGlvX3dvcmRzWzNdID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJZC0+Y21kLnBpb193b3Jkc1s0XSA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+ZGF0YV9idWY7CisJZC0+Y21kLnBpb193b3Jkc1s1XSA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+b29iX2J1ZjsKKworCW14c19kbWFfZGVzY19hcHBlbmQoY2hhbm5lbCwgZCk7CisKKwkvKiBDb21waWxlIHRoZSBETUEgZGVzY3JpcHRvciAtIGRpc2FibGUgdGhlIEJDSCBibG9jay4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9OT19ETUFYRkVSIHwgTVhTX0RNQV9ERVNDX0NIQUlOIHwKKwkJTVhTX0RNQV9ERVNDX05BTkRfV0FJVF80X1JFQURZIHwgTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwKKwkJKDMgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpOworCisJZC0+Y21kLmFkZHJlc3MgPSAwOworCisJZC0+Y21kLnBpb193b3Jkc1swXSA9CisJCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1dBSVRfRk9SX1JFQURZIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEEgfAorCQkobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOworCWQtPmNtZC5waW9fd29yZHNbMV0gPSAwOworCWQtPmNtZC5waW9fd29yZHNbMl0gPSAwOworCisJbXhzX2RtYV9kZXNjX2FwcGVuZChjaGFubmVsLCBkKTsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gZGVhc3NlcnQgdGhlIE5BTkQgbG9jayBhbmQgaW50ZXJydXB0LiAqLworCWQgPSBteHNfbmFuZF9nZXRfZG1hX2Rlc2MobmFuZF9pbmZvKTsKKwlkLT5jbWQuZGF0YSA9CisJCU1YU19ETUFfREVTQ19DT01NQU5EX05PX0RNQVhGRVIgfCBNWFNfRE1BX0RFU0NfSVJRIHwKKwkJTVhTX0RNQV9ERVNDX0RFQ19TRU07CisKKwlkLT5jbWQuYWRkcmVzcyA9IDA7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyogRXhlY3V0ZSB0aGUgRE1BIGNoYWluLiAqLworCXJldCA9IG14c19kbWFfZ28oY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlwcmludGYoIk1YUyBOQU5EOiBETUEgcmVhZCBlcnJvclxuIik7CisJCWdvdG8gcnRuOworCX0KKworCXJldCA9IG14c19uYW5kX3dhaXRfZm9yX2JjaF9jb21wbGV0ZSgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogQkNIIHJlYWQgdGltZW91dFxuIik7CisJCWdvdG8gcnRuOworCX0KKworCS8qIFJlYWQgRE1BIGNvbXBsZXRlZCwgbm93IGRvIHRoZSBtYXJrIHN3YXBwaW5nLiAqLworCW14c19uYW5kX3N3YXBfYmxvY2tfbWFyayhtdGQsIG5hbmRfaW5mby0+ZGF0YV9idWYsIG5hbmRfaW5mby0+b29iX2J1Zik7CisKKwkvKiBMb29wIG92ZXIgc3RhdHVzIGJ5dGVzLCBhY2N1bXVsYXRpbmcgRUNDIHN0YXR1cy4gKi8KKwlzdGF0dXMgPSBuYW5kX2luZm8tPm9vYl9idWYgKyBteHNfbmFuZF9hdXhfc3RhdHVzX29mZnNldCgpOworCWZvciAoaSA9IDA7IGkgPCBteHNfbmFuZF9lY2NfY2h1bmtfY250KG10ZC0+d3JpdGVzaXplKTsgaSsrKSB7CisJCWlmIChzdGF0dXNbaV0gPT0gMHgwMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGF0dXNbaV0gPT0gMHhmZikKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGF0dXNbaV0gPT0gMHhmZSkgeworCQkJZmFpbGVkKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvcnJlY3RlZCArPSBzdGF0dXNbaV07CisJfQorCisJLyogUHJvcGFnYXRlIEVDQyBzdGF0dXMgdG8gdGhlIG93bmluZyBNVEQuICovCisJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkICs9IGZhaWxlZDsKKwltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gY29ycmVjdGVkOworCisJLyoKKwkgKiBJdCdzIHRpbWUgdG8gZGVsaXZlciB0aGUgT09CIGJ5dGVzLiBTZWUgbXhzX25hbmRfZWNjX3JlYWRfb29iKCkgZm9yCisJICogZGV0YWlscyBhYm91dCBvdXIgcG9saWN5IGZvciBkZWxpdmVyaW5nIHRoZSBPT0IuCisJICoKKwkgKiBXZSBmaWxsIHRoZSBjYWxsZXIncyBidWZmZXIgd2l0aCBzZXQgYml0cywgYW5kIHRoZW4gY29weSB0aGUgYmxvY2sKKwkgKiBtYXJrIHRvIHRoZSBjYWxsZXIncyBidWZmZXIuIE5vdGUgdGhhdCwgaWYgYmxvY2sgbWFyayBzd2FwcGluZyB3YXMKKwkgKiBuZWNlc3NhcnksIGl0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZSwgc28gd2UgY2FuIHJlbHkgb24gdGhlIGZpcnN0CisJICogYnl0ZSBvZiB0aGUgYXV4aWxpYXJ5IGJ1ZmZlciB0byBjb250YWluIHRoZSBibG9jayBtYXJrLgorCSAqLworCW1lbXNldChuYW5kLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJbmFuZC0+b29iX3BvaVswXSA9IG5hbmRfaW5mby0+b29iX2J1ZlswXTsKKworCW1lbWNweShidWYsIG5hbmRfaW5mby0+ZGF0YV9idWYsIG10ZC0+d3JpdGVzaXplKTsKKworcnRuOgorCW14c19uYW5kX3JldHVybl9kbWFfZGVzY3MobmFuZF9pbmZvKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXcml0ZSBhIHBhZ2UgdG8gTkFORC4KKyAqLworc3RhdGljIHZvaWQgbXhzX25hbmRfZWNjX3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgY29uc3QgdWludDhfdCAqYnVmKQoreworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmQ7CisJdWludDMyX3QgY2hhbm5lbCA9IE1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMCArIG5hbmRfaW5mby0+Y3VyX2NoaXA7CisJaW50IHJldDsKKworCW1lbWNweShuYW5kX2luZm8tPmRhdGFfYnVmLCBidWYsIG10ZC0+d3JpdGVzaXplKTsKKwltZW1jcHkobmFuZF9pbmZvLT5vb2JfYnVmLCBuYW5kLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCisJLyogSGFuZGxlIGJsb2NrIG1hcmsgc3dhcHBpbmcuICovCisJbXhzX25hbmRfc3dhcF9ibG9ja19tYXJrKG10ZCwgbmFuZF9pbmZvLT5kYXRhX2J1ZiwgbmFuZF9pbmZvLT5vb2JfYnVmKTsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gd3JpdGUgZGF0YS4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9OT19ETUFYRkVSIHwgTVhTX0RNQV9ERVNDX0lSUSB8CisJCU1YU19ETUFfREVTQ19ERUNfU0VNIHwgTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwKKwkJKDYgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpOworCisJZC0+Y21kLmFkZHJlc3MgPSAwOworCisJZC0+Y21kLnBpb193b3Jkc1swXSA9CisJCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1dSSVRFIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEE7CisJZC0+Y21kLnBpb193b3Jkc1sxXSA9IDA7CisJZC0+Y21kLnBpb193b3Jkc1syXSA9CisJCUdQTUlfRUNDQ1RSTF9FTkFCTEVfRUNDIHwKKwkJR1BNSV9FQ0NDVFJMX0VDQ19DTURfRU5DT0RFIHwKKwkJR1BNSV9FQ0NDVFJMX0JVRkZFUl9NQVNLX0JDSF9QQUdFOworCWQtPmNtZC5waW9fd29yZHNbM10gPSAobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOworCWQtPmNtZC5waW9fd29yZHNbNF0gPSAoZG1hX2FkZHJfdCluYW5kX2luZm8tPmRhdGFfYnVmOworCWQtPmNtZC5waW9fd29yZHNbNV0gPSAoZG1hX2FkZHJfdCluYW5kX2luZm8tPm9vYl9idWY7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyogRXhlY3V0ZSB0aGUgRE1BIGNoYWluLiAqLworCXJldCA9IG14c19kbWFfZ28oY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlwcmludGYoIk1YUyBOQU5EOiBETUEgd3JpdGUgZXJyb3JcbiIpOworCQlnb3RvIHJ0bjsKKwl9CisKKwlyZXQgPSBteHNfbmFuZF93YWl0X2Zvcl9iY2hfY29tcGxldGUoKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IEJDSCB3cml0ZSB0aW1lb3V0XG4iKTsKKwkJZ290byBydG47CisJfQorCitydG46CisJbXhzX25hbmRfcmV0dXJuX2RtYV9kZXNjcyhuYW5kX2luZm8pOworfQorCisvKgorICogUmVhZCBPT0IgZnJvbSBOQU5ELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSB2ZW5lZXIgdGhhdCByZXBsYWNlcyB0aGUgZnVuY3Rpb24gb3JpZ2luYWxseSBpbnN0YWxsZWQgYnkKKyAqIHRoZSBOQU5EIEZsYXNoIE1URCBjb2RlLgorICovCitzdGF0aWMgaW50IG14c19uYW5kX2hvb2tfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBjaGlwLT5wcml2OworCWludCByZXQ7CisKKwlpZiAob3BzLT5tb2RlID09IE1URF9PT0JfUkFXKQorCQluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDE7CisJZWxzZQorCQluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDA7CisKKwlyZXQgPSBuYW5kX2luZm8tPmhvb2tlZF9yZWFkX29vYihtdGQsIGZyb20sIG9wcyk7CisKKwluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV3JpdGUgT09CIHRvIE5BTkQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIHZlbmVlciB0aGF0IHJlcGxhY2VzIHRoZSBmdW5jdGlvbiBvcmlnaW5hbGx5IGluc3RhbGxlZCBieQorICogdGhlIE5BTkQgRmxhc2ggTVREIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfaG9va193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCQkJc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gY2hpcC0+cHJpdjsKKwlpbnQgcmV0OworCisJaWYgKG9wcy0+bW9kZSA9PSBNVERfT09CX1JBVykKKwkJbmFuZF9pbmZvLT5yYXdfb29iX21vZGUgPSAxOworCWVsc2UKKwkJbmFuZF9pbmZvLT5yYXdfb29iX21vZGUgPSAwOworCisJcmV0ID0gbmFuZF9pbmZvLT5ob29rZWRfd3JpdGVfb29iKG10ZCwgdG8sIG9wcyk7CisKKwluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTWFyayBhIGJsb2NrIGJhZCBpbiBOQU5ELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSB2ZW5lZXIgdGhhdCByZXBsYWNlcyB0aGUgZnVuY3Rpb24gb3JpZ2luYWxseSBpbnN0YWxsZWQgYnkKKyAqIHRoZSBOQU5EIEZsYXNoIE1URCBjb2RlLgorICovCitzdGF0aWMgaW50IG14c19uYW5kX2hvb2tfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBjaGlwLT5wcml2OworCWludCByZXQ7CisKKwluYW5kX2luZm8tPm1hcmtpbmdfYmxvY2tfYmFkID0gMTsKKworCXJldCA9IG5hbmRfaW5mby0+aG9va2VkX2Jsb2NrX21hcmtiYWQobXRkLCBvZnMpOworCisJbmFuZF9pbmZvLT5tYXJraW5nX2Jsb2NrX2JhZCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIGluIHRoaXMgZHJpdmVyIHdoZXJlIHdlIGhhdmUgdG8gaGFuZGxlIHRoZSBPT0IgYW5kCisgKiBibG9jayBtYXJrcy4gVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhpbmdzIGFyZSB0aGUgbW9zdCBjb21wbGljYXRlZCwgc28KKyAqIHRoaXMgaXMgd2hlcmUgd2UgdHJ5IHRvIGV4cGxhaW4gaXQgYWxsLiBBbGwgdGhlIG90aGVyIHBsYWNlcyByZWZlciBiYWNrIHRvCisgKiBoZXJlLgorICoKKyAqIFRoZXNlIGFyZSB0aGUgcnVsZXMsIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgaW1wb3J0YW5jZToKKyAqCisgKiAxKSBOb3RoaW5nIHRoZSBjYWxsZXIgZG9lcyBjYW4gYmUgYWxsb3dlZCB0byBpbXBlcmlsIHRoZSBibG9jayBtYXJrLCBzbyBhbGwKKyAqICAgIHdyaXRlIG9wZXJhdGlvbnMgdGFrZSBtZWFzdXJlcyB0byBwcm90ZWN0IGl0LgorICoKKyAqIDIpIEluIHJlYWQgb3BlcmF0aW9ucywgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIE9PQiB3ZSByZXR1cm4gbXVzdCByZWZsZWN0IHRoZQorICogICAgdHJ1ZSBzdGF0ZSBvZiB0aGUgYmxvY2sgbWFyaywgbm8gbWF0dGVyIHdoZXJlIHRoYXQgYmxvY2sgbWFyayBhcHBlYXJzIGluCisgKiAgICB0aGUgcGh5c2ljYWwgcGFnZS4KKyAqCisgKiAzKSBFQ0MtYmFzZWQgcmVhZCBvcGVyYXRpb25zIHJldHVybiBhbiBPT0IgZnVsbCBvZiBzZXQgYml0cyAoc2luY2Ugd2UgbmV2ZXIKKyAqICAgIGFsbG93IEVDQy1iYXNlZCB3cml0ZXMgdG8gdGhlIE9PQiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCBFQ0MtYmFzZWQgcmVhZHMKKyAqICAgIHJldHVybikuCisgKgorICogNCkgIlJhdyIgcmVhZCBvcGVyYXRpb25zIHJldHVybiBhIGRpcmVjdCB2aWV3IG9mIHRoZSBwaHlzaWNhbCBieXRlcyBpbiB0aGUKKyAqICAgIHBhZ2UsIHVzaW5nIHRoZSBjb252ZW50aW9uYWwgZGVmaW5pdGlvbiBvZiB3aGljaCBieXRlcyBhcmUgZGF0YSBhbmQgd2hpY2gKKyAqICAgIGFyZSBPT0IuIFRoaXMgZ2l2ZXMgdGhlIGNhbGxlciBhIHdheSB0byBzZWUgdGhlIGFjdHVhbCwgcGh5c2ljYWwgYnl0ZXMKKyAqICAgIGluIHRoZSBwYWdlLCB3aXRob3V0IHRoZSBkaXN0b3J0aW9ucyBhcHBsaWVkIGJ5IG91ciBFQ0MgZW5naW5lLgorICoKKyAqIFdoYXQgd2UgZG8gZm9yIHRoaXMgc3BlY2lmaWMgcmVhZCBvcGVyYXRpb24gZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nCisgKiAicmF3IiByZWFkLCBvciBhbiBFQ0MtYmFzZWQgcmVhZC4KKyAqCisgKiBJdCB0dXJucyBvdXQgdGhhdCBrbm93aW5nIHdoZXRoZXIgd2Ugd2FudCBhbiAiRUNDLWJhc2VkIiBvciAicmF3IiByZWFkIGlzIG5vdAorICogZWFzeS4gV2hlbiByZWFkaW5nIGEgcGFnZSwgZm9yIGV4YW1wbGUsIHRoZSBOQU5EIEZsYXNoIE1URCBjb2RlIGNhbGxzIG91cgorICogZWNjLnJlYWRfcGFnZSBvciBlY2MucmVhZF9wYWdlX3JhdyBmdW5jdGlvbi4gVGh1cywgdGhlIGZhY3QgdGhhdCBNVEQgd2FudHMgYW4KKyAqIEVDQy1iYXNlZCBvciByYXcgdmlldyBvZiB0aGUgcGFnZSBpcyBpbXBsaWNpdCBpbiB3aGljaCBmdW5jdGlvbiBpdCBjYWxscworICogKHRoZXJlIGlzIGEgc2ltaWxhciBwYWlyIG9mIEVDQy1iYXNlZC9yYXcgZnVuY3Rpb25zIGZvciB3cml0aW5nKS4KKyAqCisgKiBTaW5jZSBNVEQgYXNzdW1lcyB0aGUgT09CIGlzIG5vdCBjb3ZlcmVkIGJ5IEVDQywgdGhlcmUgaXMgbm8gcGFpciBvZgorICogRUNDLWJhc2VkL3JhdyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgb3Igb3Igd3JpdGluZyB0aGUgT09CLiBUaGUgZmFjdCB0aGF0IHRoZQorICogY2FsbGVyIHdhbnRzIGFuIEVDQy1iYXNlZCBvciByYXcgdmlldyBvZiB0aGUgcGFnZSBpcyBub3QgcHJvcGFnYXRlZCBkb3duIHRvCisgKiB0aGlzIGRyaXZlci4KKyAqCisgKiBTaW5jZSBvdXIgT09CICppcyogY292ZXJlZCBieSBFQ0MsIHdlIG5lZWQgdGhpcyBpbmZvcm1hdGlvbi4gU28sIHdlIGhvb2sgdGhlCisgKiBlY2MucmVhZF9vb2IgYW5kIGVjYy53cml0ZV9vb2IgZnVuY3Rpb24gcG9pbnRlcnMgaW4gdGhlIG93bmluZworICogc3RydWN0IG10ZF9pbmZvIHdpdGggb3VyIG93biBmdW5jdGlvbnMuIFRoZXNlIGhvb2sgZnVuY3Rpb25zIHNldCB0aGUKKyAqIHJhd19vb2JfbW9kZSBmaWVsZCBzbyB0aGF0LCB3aGVuIGNvbnRyb2wgZmluYWxseSBhcnJpdmVzIGhlcmUsIHdlJ2xsIGtub3cKKyAqIHdoYXQgdG8gZG8uCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfZWNjX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAorCQkJCWludCBwYWdlLCBpbnQgY21kKQoreworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCisJLyoKKwkgKiBGaXJzdCwgZmlsbCBpbiB0aGUgT09CIGJ1ZmZlci4gSWYgd2UncmUgZG9pbmcgYSByYXcgcmVhZCwgd2UgbmVlZCB0bworCSAqIGdldCB0aGUgYnl0ZXMgZnJvbSB0aGUgcGh5c2ljYWwgcGFnZS4gSWYgd2UncmUgbm90IGRvaW5nIGEgcmF3IHJlYWQsCisJICogd2UgbmVlZCB0byBmaWxsIHRoZSBidWZmZXIgd2l0aCBzZXQgYml0cy4KKwkgKi8KKwlpZiAobmFuZF9pbmZvLT5yYXdfb29iX21vZGUpIHsKKwkJLyoKKwkJICogSWYgY29udHJvbCBhcnJpdmVzIGhlcmUsIHdlJ3JlIGRvaW5nIGEgInJhdyIgcmVhZC4gU2VuZCB0aGUKKwkJICogY29tbWFuZCB0byByZWFkIHRoZSBjb252ZW50aW9uYWwgT09CIGFuZCByZWFkIGl0LgorCQkgKi8KKwkJbmFuZC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7CisJCW5hbmQtPnJlYWRfYnVmKG10ZCwgbmFuZC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiBjb250cm9sIGFycml2ZXMgaGVyZSwgd2UncmUgbm90IGRvaW5nIGEgInJhdyIgcmVhZC4gRmlsbAorCQkgKiB0aGUgT09CIGJ1ZmZlciB3aXRoIHNldCBiaXRzIGFuZCBjb3JyZWN0IHRoZSBibG9jayBtYXJrLgorCQkgKi8KKwkJbWVtc2V0KG5hbmQtPm9vYl9wb2ksIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CisKKwkJbmFuZC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7CisJCW14c19uYW5kX3JlYWRfYnVmKG10ZCwgbmFuZC0+b29iX3BvaSwgMSk7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworLyoKKyAqIFdyaXRlIE9PQiBkYXRhIHRvIE5BTkQuCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfZWNjX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKKwkJCQkJaW50IHBhZ2UpCit7CisJc3RydWN0IG14c19uYW5kX2luZm8gKm5hbmRfaW5mbyA9IG5hbmQtPnByaXY7CisJdWludDhfdCBibG9ja19tYXJrID0gMDsKKworCS8qCisJICogVGhlcmUgYXJlIGZ1bmRhbWVudGFsIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gdGhlIGkuTVggR1BNSSBORkMgYW5kCisJICogdGhlIE5BTkQgRmxhc2ggTVREIG1vZGVsIHRoYXQgbWFrZSBpdCBlc3NlbnRpYWxseSBpbXBvc3NpYmxlIHRvIHdyaXRlCisJICogdGhlIG91dC1vZi1iYW5kIGJ5dGVzLgorCSAqCisJICogV2UgcGVybWl0ICpPTkUqIGV4Y2VwdGlvbi4gSWYgdGhlICppbnRlbnQqIG9mIHdyaXRpbmcgdGhlIE9PQiBpcyB0bworCSAqIG1hcmsgYSBibG9jayBiYWQsIHdlIGNhbiBkbyB0aGF0LgorCSAqLworCisJaWYgKCFuYW5kX2luZm8tPm1hcmtpbmdfYmxvY2tfYmFkKSB7CisJCXByaW50ZigiTlhTIE5BTkQ6IFdyaXRpbmcgT09CIGlzbid0IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFdyaXRlIHRoZSBibG9jayBtYXJrLiAqLworCW5hbmQtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgbXRkLT53cml0ZXNpemUsIHBhZ2UpOworCW5hbmQtPndyaXRlX2J1ZihtdGQsICZibG9ja19tYXJrLCAxKTsKKwluYW5kLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisKKwkvKiBDaGVjayBpZiBpdCB3b3JrZWQuICovCisJaWYgKG5hbmQtPndhaXRmdW5jKG10ZCwgbmFuZCkgJiBOQU5EX1NUQVRVU19GQUlMKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2xhaW1zIGFsbCBibG9ja3MgYXJlIGdvb2QuCisgKgorICogSW4gcHJpbmNpcGxlLCB0aGlzIGZ1bmN0aW9uIGlzICpvbmx5KiBjYWxsZWQgd2hlbiB0aGUgTkFORCBGbGFzaCBNVEQgc3lzdGVtCisgKiBpc24ndCBhbGxvd2VkIHRvIGtlZXAgYW4gaW4tbWVtb3J5IGJhZCBibG9jayB0YWJsZSwgc28gaXQgaXMgZm9yY2VkIHRvIGFzaworICogdGhlIGRyaXZlciBmb3IgYmFkIGJsb2NrIGluZm9ybWF0aW9uLgorICoKKyAqIEluIGZhY3QsIHdlIHBlcm1pdCB0aGUgTkFORCBGbGFzaCBNVEQgc3lzdGVtIHRvIGhhdmUgYW4gaW4tbWVtb3J5IEJCVCwgc28KKyAqIHRoaXMgZnVuY3Rpb24gaXMgKm9ubHkqIGNhbGxlZCB3aGVuIHdlIHRha2UgaXQgYXdheS4KKyAqCisgKiBUaHVzLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2Ugd2FudCAqYWxsKiBibG9ja3MgdG8gbG9vayBnb29kLAorICogc28gaXQgKmFsd2F5cyogcmV0dXJuIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfYmxvY2tfYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5vbWluYWxseSwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBsb29rIGZvciBvciBjcmVhdGUgdGhlIGJhZAorICogYmxvY2sgdGFibGUuIEluIGZhY3QsIHNpbmNlIHRoZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24gYXQgdGhlIHZlcnkgZW5kIG9mCisgKiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzdGFydGVkIGJ5IG5hbmRfc2NhbigpLCBhbmQgd2UgZG9lc24ndCBoYXZlIGEKKyAqIG1vcmUgZm9ybWFsIG1lY2hhbmlzbSwgd2UgImhvb2siIHRoaXMgZnVuY3Rpb24gdG8gY29udGludWUgaW5pdCBwcm9jZXNzLgorICoKKyAqIEF0IHRoaXMgcG9pbnQsIHRoZSBwaHlzaWNhbCBOQU5EIEZsYXNoIGNoaXBzIGhhdmUgYmVlbiBpZGVudGlmaWVkIGFuZAorICogY291bnRlZCwgc28gd2Uga25vdyB0aGUgcGh5c2ljYWwgZ2VvbWV0cnkuIFRoaXMgZW5hYmxlcyB1cyB0byBtYWtlIHNvbWUKKyAqIGltcG9ydGFudCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gcHJvcG9nYXRlcyBkaXJlY3RseSBiYWNrIHRvIHRoaXMgZHJpdmVyJ3MKKyAqIGNhbGwgdG8gbmFuZF9zY2FuKCkuIEFueXRoaW5nIG90aGVyIHRoYW4gemVybyB3aWxsIGNhdXNlIHRoaXMgZHJpdmVyIHRvCisgKiB0ZWFyIGV2ZXJ5dGhpbmcgZG93biBhbmQgZGVjbGFyZSBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG14c19uYW5kX3NjYW5fYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQgPSBtdGQtPnByaXY7CisJc3RydWN0IG14c19uYW5kX2luZm8gKm5hbmRfaW5mbyA9IG5hbmQtPnByaXY7CisJc3RydWN0IG14MjhfYmNoX3JlZ3MgKmJjaF9yZWdzID0gKHN0cnVjdCBteDI4X2JjaF9yZWdzICopTVhTX0JDSF9CQVNFOworCXVpbnQzMl90IHRtcDsKKworCS8qIENvbmZpZ3VyZSBCQ0ggYW5kIHNldCBORkMgZ2VvbWV0cnkgKi8KKwlteDI4X3Jlc2V0X2Jsb2NrKCZiY2hfcmVncy0+aHdfYmNoX2N0cmxfcmVnKTsKKworCS8qIENvbmZpZ3VyZSBsYXlvdXQgMCAqLworCXRtcCA9IChteHNfbmFuZF9lY2NfY2h1bmtfY250KG10ZC0+d3JpdGVzaXplKSAtIDEpCisJCTw8IEJDSF9GTEFTSExBWU9VVDBfTkJMT0NLU19PRkZTRVQ7CisJdG1wIHw9IE1YU19OQU5EX01FVEFEQVRBX1NJWkUgPDwgQkNIX0ZMQVNITEFZT1VUMF9NRVRBX1NJWkVfT0ZGU0VUOworCXRtcCB8PSAobXhzX25hbmRfZ2V0X2VjY19zdHJlbmd0aChtdGQtPndyaXRlc2l6ZSwgbXRkLT5vb2JzaXplKSA+PiAxKQorCQk8PCBCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfT0ZGU0VUOworCXRtcCB8PSBNWFNfTkFORF9DSFVOS19EQVRBX0NIVU5LX1NJWkU7CisJd3JpdGVsKHRtcCwgJmJjaF9yZWdzLT5od19iY2hfZmxhc2gwbGF5b3V0MCk7CisKKwl0bXAgPSAobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpCisJCTw8IEJDSF9GTEFTSExBWU9VVDFfUEFHRV9TSVpFX09GRlNFVDsKKwl0bXAgfD0gKG14c19uYW5kX2dldF9lY2Nfc3RyZW5ndGgobXRkLT53cml0ZXNpemUsIG10ZC0+b29ic2l6ZSkgPj4gMSkKKwkJPDwgQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX09GRlNFVDsKKwl0bXAgfD0gTVhTX05BTkRfQ0hVTktfREFUQV9DSFVOS19TSVpFOworCXdyaXRlbCh0bXAsICZiY2hfcmVncy0+aHdfYmNoX2ZsYXNoMGxheW91dDEpOworCisJLyogU2V0ICphbGwqIGNoaXAgc2VsZWN0cyB0byB1c2UgbGF5b3V0IDAgKi8KKwl3cml0ZWwoMCwgJmJjaF9yZWdzLT5od19iY2hfbGF5b3V0c2VsZWN0KTsKKworCS8qIEVuYWJsZSBCQ0ggY29tcGxldGUgaW50ZXJydXB0ICovCisJd3JpdGVsKEJDSF9DVFJMX0NPTVBMRVRFX0lSUV9FTiwgJmJjaF9yZWdzLT5od19iY2hfY3RybF9zZXQpOworCisJLyogSG9vayBzb21lIG9wZXJhdGlvbnMgYXQgdGhlIE1URCBsZXZlbC4gKi8KKwlpZiAobXRkLT5yZWFkX29vYiAhPSBteHNfbmFuZF9ob29rX3JlYWRfb29iKSB7CisJCW5hbmRfaW5mby0+aG9va2VkX3JlYWRfb29iID0gbXRkLT5yZWFkX29vYjsKKwkJbXRkLT5yZWFkX29vYiA9IG14c19uYW5kX2hvb2tfcmVhZF9vb2I7CisJfQorCisJaWYgKG10ZC0+d3JpdGVfb29iICE9IG14c19uYW5kX2hvb2tfd3JpdGVfb29iKSB7CisJCW5hbmRfaW5mby0+aG9va2VkX3dyaXRlX29vYiA9IG10ZC0+d3JpdGVfb29iOworCQltdGQtPndyaXRlX29vYiA9IG14c19uYW5kX2hvb2tfd3JpdGVfb29iOworCX0KKworCWlmIChtdGQtPmJsb2NrX21hcmtiYWQgIT0gbXhzX25hbmRfaG9va19ibG9ja19tYXJrYmFkKSB7CisJCW5hbmRfaW5mby0+aG9va2VkX2Jsb2NrX21hcmtiYWQgPSBtdGQtPmJsb2NrX21hcmtiYWQ7CisJCW10ZC0+YmxvY2tfbWFya2JhZCA9IG14c19uYW5kX2hvb2tfYmxvY2tfbWFya2JhZDsKKwl9CisKKwkvKiBXZSB1c2UgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgYmFkIGJsb2NrIG1hbmFnZW1lbnQuICovCisJcmV0dXJuIG5hbmRfZGVmYXVsdF9iYnQobXRkKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIERNQSBidWZmZXJzCisgKi8KK2ludCBteHNfbmFuZF9hbGxvY19idWZmZXJzKHN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8pCit7CisJdWludDhfdCAqYnVmOworCWNvbnN0IGludCBzaXplID0gTkFORF9NQVhfUEFHRVNJWkUgKyBOQU5EX01BWF9PT0JTSVpFOworCisJLyogRE1BIGJ1ZmZlcnMgKi8KKwlidWYgPSBtZW1hbGlnbihNWFNfRE1BX0FMSUdOTUVOVCwgc2l6ZSk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRXJyb3IgYWxsb2NhdGluZyBETUEgYnVmZmVyc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChidWYsIDAsIHNpemUpOworCisJbmFuZF9pbmZvLT5kYXRhX2J1ZiA9IGJ1ZjsKKwluYW5kX2luZm8tPm9vYl9idWYgPSBidWYgKyBOQU5EX01BWF9QQUdFU0laRTsKKworCS8qIENvbW1hbmQgYnVmZmVycyAqLworCW5hbmRfaW5mby0+Y21kX2J1ZiA9IG1lbWFsaWduKE1YU19ETUFfQUxJR05NRU5ULAorCQkJCU1YU19OQU5EX0NPTU1BTkRfQlVGRkVSX1NJWkUpOworCWlmICghbmFuZF9pbmZvLT5jbWRfYnVmKSB7CisJCWZyZWUoYnVmKTsKKwkJcHJpbnRmKCJNWFMgTkFORDogRXJyb3IgYWxsb2NhdGluZyBjb21tYW5kIGJ1ZmZlcnNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KG5hbmRfaW5mby0+Y21kX2J1ZiwgMCwgTVhTX05BTkRfQ09NTUFORF9CVUZGRVJfU0laRSk7CisJbmFuZF9pbmZvLT5jbWRfcXVldWVfbGVuID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIE5GQyBoYXJkd2FyZS4KKyAqLworaW50IG14c19uYW5kX2luaXQoc3RydWN0IG14c19uYW5kX2luZm8gKmluZm8pCit7CisJc3RydWN0IG14MjhfZ3BtaV9yZWdzICpncG1pX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfZ3BtaV9yZWdzICopTVhTX0dQTUlfQkFTRTsKKwlpbnQgaSA9IDA7CisKKwlpbmZvLT5kZXNjID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXhzX2RtYV9kZXNjICopICoKKwkJCQlNWFNfTkFORF9ETUFfREVTQ1JJUFRPUl9DT1VOVCk7CisJaWYgKCFpbmZvLT5kZXNjKQorCQlnb3RvIGVycjE7CisKKwkvKiBBbGxvY2F0ZSB0aGUgRE1BIGRlc2NyaXB0b3JzLiAqLworCWZvciAoaSA9IDA7IGkgPCBNWFNfTkFORF9ETUFfREVTQ1JJUFRPUl9DT1VOVDsgaSsrKSB7CisJCWluZm8tPmRlc2NbaV0gPSBteHNfZG1hX2Rlc2NfYWxsb2MoKTsKKwkJaWYgKCFpbmZvLT5kZXNjW2ldKQorCQkJZ290byBlcnIyOworCX0KKworCS8qIEluaXQgdGhlIERNQSBjb250cm9sbGVyLiAqLworCW14c19kbWFfaW5pdCgpOworCisJLyogUmVzZXQgdGhlIEdQTUkgYmxvY2suICovCisJbXgyOF9yZXNldF9ibG9jaygmZ3BtaV9yZWdzLT5od19ncG1pX2N0cmwwX3JlZyk7CisKKwkvKgorCSAqIENob29zZSBOQU5EIG1vZGUsIHNldCBJUlEgcG9sYXJpdHksIGRpc2FibGUgd3JpdGUgcHJvdGVjdGlvbiBhbmQKKwkgKiBzZWxlY3QgQkNIIEVDQy4KKwkgKi8KKwljbHJzZXRiaXRzX2xlMzIoJmdwbWlfcmVncy0+aHdfZ3BtaV9jdHJsMSwKKwkJCUdQTUlfQ1RSTDFfR1BNSV9NT0RFLAorCQkJR1BNSV9DVFJMMV9BVEFfSVJRUkRZX1BPTEFSSVRZIHwgR1BNSV9DVFJMMV9ERVZfUkVTRVQgfAorCQkJR1BNSV9DVFJMMV9CQ0hfTU9ERSk7CisKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlmcmVlKGluZm8tPmRlc2MpOworZXJyMToKKwlmb3IgKC0taTsgaSA+PSAwOyBpLS0pCisJCW14c19kbWFfZGVzY19mcmVlKGluZm8tPmRlc2NbaV0pOworCXByaW50ZigiTVhTIE5BTkQ6IFVuYWJsZSB0byBhbGxvY2F0ZSBETUEgZGVzY3JpcHRvcnNcbiIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKiEKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB0aGUgZHJpdmVyIGJpbmRpbmcgcHJvY2Vzcy4KKyAqCisgKiBAcGFyYW0gICBwZGV2ICB0aGUgZGV2aWNlIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGRldmljZSBzcGVjaWZpYworICogICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdGhhdCBpcyB1c2VkIGJ5IHRoZSBzdXNwZW5kLCByZXN1bWUgYW5kCisgKiAgICAgICAgICAgICAgICByZW1vdmUgZnVuY3Rpb25zCisgKgorICogQHJldHVybiAgVGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDAuCisgKi8KK2ludCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKK3sKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvOworCWludCBlcnI7CisKKwluYW5kX2luZm8gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBteHNfbmFuZF9pbmZvKSk7CisJaWYgKCFuYW5kX2luZm8pIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRmFpbGVkIHRvIGFsbG9jYXRlIHByaXZhdGUgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQobmFuZF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG14c19uYW5kX2luZm8pKTsKKworCWVyciA9IG14c19uYW5kX2FsbG9jX2J1ZmZlcnMobmFuZF9pbmZvKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjE7CisKKwllcnIgPSBteHNfbmFuZF9pbml0KG5hbmRfaW5mbyk7CisJaWYgKGVycikKKwkJZ290byBlcnIyOworCisJbWVtc2V0KCZmYWtlX2VjY19sYXlvdXQsIDAsIHNpemVvZihmYWtlX2VjY19sYXlvdXQpKTsKKworCW5hbmQtPnByaXYgPSBuYW5kX2luZm87CisJbmFuZC0+b3B0aW9ucyB8PSBOQU5EX05PX1NVQlBBR0VfV1JJVEU7CisKKwluYW5kLT5jbWRfY3RybAkJPSBteHNfbmFuZF9jbWRfY3RybDsKKworCW5hbmQtPmRldl9yZWFkeQkJPSBteHNfbmFuZF9kZXZpY2VfcmVhZHk7CisJbmFuZC0+c2VsZWN0X2NoaXAJPSBteHNfbmFuZF9zZWxlY3RfY2hpcDsKKwluYW5kLT5ibG9ja19iYWQJCT0gbXhzX25hbmRfYmxvY2tfYmFkOworCW5hbmQtPnNjYW5fYmJ0CQk9IG14c19uYW5kX3NjYW5fYmJ0OworCisJbmFuZC0+cmVhZF9ieXRlCQk9IG14c19uYW5kX3JlYWRfYnl0ZTsKKworCW5hbmQtPnJlYWRfYnVmCQk9IG14c19uYW5kX3JlYWRfYnVmOworCW5hbmQtPndyaXRlX2J1ZgkJPSBteHNfbmFuZF93cml0ZV9idWY7CisKKwluYW5kLT5lY2MucmVhZF9wYWdlCT0gbXhzX25hbmRfZWNjX3JlYWRfcGFnZTsKKwluYW5kLT5lY2Mud3JpdGVfcGFnZQk9IG14c19uYW5kX2VjY193cml0ZV9wYWdlOworCW5hbmQtPmVjYy5yZWFkX29vYgk9IG14c19uYW5kX2VjY19yZWFkX29vYjsKKwluYW5kLT5lY2Mud3JpdGVfb29iCT0gbXhzX25hbmRfZWNjX3dyaXRlX29vYjsKKworCW5hbmQtPmVjYy5sYXlvdXQJPSAmZmFrZV9lY2NfbGF5b3V0OworCW5hbmQtPmVjYy5tb2RlCQk9IE5BTkRfRUNDX0hXOworCW5hbmQtPmVjYy5ieXRlcwkJPSA5OworCW5hbmQtPmVjYy5zaXplCQk9IDUxMjsKKworCXJldHVybiAwOworCitlcnIyOgorCWZyZWUobmFuZF9pbmZvLT5kYXRhX2J1Zik7CisJZnJlZShuYW5kX2luZm8tPmNtZF9idWYpOworZXJyMToKKwlmcmVlKG5hbmRfaW5mbyk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlCmluZGV4IGI5ODRiZDQuLmIwOTBkNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZQpAQCAtMjUsOCArMjUsMTIgQEAKIAogTElCCTo9ICQob2JqKWxpYm9uZW5hbmQubwogCitpZm5kZWYJQ09ORklHX1NQTF9CVUlMRAogQ09CSlMtJChDT05GSUdfQ01EX09ORU5BTkQpCTo9IG9uZW5hbmRfdWJvb3QubyBvbmVuYW5kX2Jhc2UubyBvbmVuYW5kX2JidC5vCiBDT0JKUy0kKENPTkZJR19TQU1TVU5HX09ORU5BTkQpCSs9IHNhbXN1bmcubworZWxzZQorQ09CSlMteQkJCQk6PSBvbmVuYW5kX3NwbC5vCitlbmRpZgogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCAyNGUwMmMyLi4wNmYxODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTE5NDMsMTYgKzE5NDMsMTAgQEAKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCBzdGFydCwgZW5kLCBibG9jaywgdmFsdWUsIHN0YXR1czsKLQlpbnQgd3Bfc3RhdHVzX21hc2s7CiAKIAlzdGFydCA9IG9uZW5hbmRfYmxvY2sodGhpcywgb2ZzKTsKIAllbmQgPSBvbmVuYW5kX2Jsb2NrKHRoaXMsIG9mcyArIGxlbik7CiAKLQlpZiAoY21kID09IE9ORU5BTkRfQ01EX0xPQ0spCi0JCXdwX3N0YXR1c19tYXNrID0gT05FTkFORF9XUF9MUzsKLQllbHNlCi0JCXdwX3N0YXR1c19tYXNrID0gT05FTkFORF9XUF9VUzsKLQogCS8qIENvbnRpbnVvdXMgbG9jayBzY2hlbWUgKi8KIAlpZiAodGhpcy0+b3B0aW9ucyAmIE9ORU5BTkRfSEFTX0NPTlRfTE9DSykgewogCQkvKiBTZXQgc3RhcnQgYmxvY2sgYWRkcmVzcyAqLwpAQCAtMjIyNiwxOSArMjIyMCwyMSBAQAogc3RhdGljIGludCBvbmVuYW5kX2NoZWNrX21hZihpbnQgbWFudWYpCiB7CiAJaW50IHNpemUgPSBBUlJBWV9TSVpFKG9uZW5hbmRfbWFudWZfaWRzKTsKLQljaGFyICpuYW1lOwogCWludCBpOworI2lmZGVmIE9ORU5BTkRfREVCVUcKKwljaGFyICpuYW1lOworI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogCQlpZiAobWFudWYgPT0gb25lbmFuZF9tYW51Zl9pZHNbaV0uaWQpCiAJCQlicmVhazsKIAorI2lmZGVmIE9ORU5BTkRfREVCVUcKIAlpZiAoaSA8IHNpemUpCiAJCW5hbWUgPSBvbmVuYW5kX21hbnVmX2lkc1tpXS5uYW1lOwogCWVsc2UKIAkJbmFtZSA9ICJVbmtub3duIjsKIAotI2lmZGVmIE9ORU5BTkRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiT25lTkFORCBNYW51ZmFjdHVyZXI6ICVzICgweCUweClcbiIsIG5hbWUsIG1hbnVmKTsKICNlbmRpZgogCkBAIC0yMjU1LDcgKzIyNTEsNyBAQAogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdW5zaWduZWQgaW50IGRpZSwgYmRyeTsKLQlpbnQgcmV0LCBzeXNjZmcsIGxvY2tlZDsKKwlpbnQgc3lzY2ZnLCBsb2NrZWQ7CiAKIAkvKiBEaXNhYmxlIEVDQyAqLwogCXN5c2NmZyA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1lTX0NGRzEpOwpAQCAtMjI2Niw3ICsyMjYyLDcgQEAKIAkJdGhpcy0+d2FpdChtdGQsIEZMX1NZTkNJTkcpOwogCiAJCXRoaXMtPmNvbW1hbmQobXRkLCBGTEVYT05FTkFORF9DTURfUkVBRF9QSSwgZGllLCAwKTsKLQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOworCQl0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CiAKIAkJYmRyeSA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9EQVRBUkFNKTsKIAkJaWYgKChiZHJ5ID4+IEZMRVhPTkVOQU5EX1BJX1VOTE9DS19TSElGVCkgPT0gMykKQEAgLTIyNzYsNyArMjI3Miw3IEBACiAJCXRoaXMtPmJvdW5kYXJ5W2RpZV0gPSBiZHJ5ICYgRkxFWE9ORU5BTkRfUElfTUFTSzsKIAogCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVTRVQsIDAsIDApOwotCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCQl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIkRpZSAlZCBib3VuZGFyeTogJWQlc1xuIiwgZGllLAogCQkgICAgICAgdGhpcy0+Ym91bmRhcnlbZGllXSwgbG9ja2VkID8gIihMb2NrZWQpIiA6ICIoVW5sb2NrZWQpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfc3BsLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfc3BsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlYWE3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9zcGwuYwpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGNvZGU6CisgKglDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKglLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvb25lbmFuZF9yZWdzLmg+CisjaW5jbHVkZSA8b25lbmFuZF91Ym9vdC5oPgorCisvKgorICogRGV2aWNlIGdlb21ldHJ5OgorICogLSAyMDQ4YiBwYWdlLCAxMjhrIGVyYXNlIGJsb2NrLgorICogLSA0MDk2YiBwYWdlLCAyNTZrIGVyYXNlIGJsb2NrLgorICovCitlbnVtIG9uZW5hbmRfc3BsX3BhZ2VzaXplIHsKKwlQQUdFXzJLID0gMjA0OCwKKwlQQUdFXzRLID0gNDA5NiwKK307CisKKyNkZWZpbmUgT05FTkFORF9QQUdFU19QRVJfQkxPQ0sJCQk2NAorI2RlZmluZSBvbmVuYW5kX2Jsb2NrX2FkZHJlc3MoYmxvY2spCQkoYmxvY2spCisjZGVmaW5lIG9uZW5hbmRfc2VjdG9yX2FkZHJlc3MocGFnZSkJCShwYWdlIDw8IDIpCisjZGVmaW5lIG9uZW5hbmRfYnVmZmVyX2FkZHJlc3MoKQkJKCgxIDw8IDMpIDw8IDgpCisjZGVmaW5lIG9uZW5hbmRfYnVmZmVycmFtX2FkZHJlc3MoYmxvY2spCSgwKQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IG9uZW5hbmRfcmVhZHcodWludDMyX3QgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoQ09ORklHX1NZU19PTkVOQU5EX0JBU0UgKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9uZW5hbmRfd3JpdGV3KHVpbnQxNl90IHZhbHVlLCB1aW50MzJfdCBhZGRyKQoreworCXdyaXRldyh2YWx1ZSwgQ09ORklHX1NZU19PTkVOQU5EX0JBU0UgKyBhZGRyKTsKK30KKworc3RhdGljIGVudW0gb25lbmFuZF9zcGxfcGFnZXNpemUgb25lbmFuZF9zcGxfZ2V0X2dlb21ldHJ5KHZvaWQpCit7CisJdWludDMyX3QgZGV2X2lkLCBkZW5zaXR5OworCisJaWYgKCFvbmVuYW5kX3JlYWR3KE9ORU5BTkRfUkVHX1RFQ0hOT0xPR1kpKSB7CisJCWRldl9pZCA9IG9uZW5hbmRfcmVhZHcoT05FTkFORF9SRUdfREVWSUNFX0lEKTsKKwkJZGVuc2l0eSA9IGRldl9pZCA+PiBPTkVOQU5EX0RFVklDRV9ERU5TSVRZX1NISUZUOworCQlkZW5zaXR5ICY9IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfTUFTSzsKKworCQlpZiAoZGVuc2l0eSA8IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfNEdiKQorCQkJcmV0dXJuIFBBR0VfMks7CisKKwkJaWYgKGRldl9pZCAmIE9ORU5BTkRfREVWSUNFX0lTX0REUCkKKwkJCXJldHVybiBQQUdFXzJLOworCX0KKworCXJldHVybiBQQUdFXzRLOworfQorCitzdGF0aWMgaW50IG9uZW5hbmRfc3BsX3JlYWRfcGFnZSh1aW50MzJfdCBibG9jaywgdWludDMyX3QgcGFnZSwgdWludDMyX3QgKmJ1ZiwKKwkJCQkJZW51bSBvbmVuYW5kX3NwbF9wYWdlc2l6ZSBwYWdlc2l6ZSkKK3sKKwljb25zdCB1aW50MzJfdCBhZGRyID0gQ09ORklHX1NZU19PTkVOQU5EX0JBU0UgKyBPTkVOQU5EX0RBVEFSQU07CisJdWludDMyX3Qgb2Zmc2V0OworCisJb25lbmFuZF93cml0ZXcob25lbmFuZF9ibG9ja19hZGRyZXNzKGJsb2NrKSwKKwkJCU9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1MxKTsKKworCW9uZW5hbmRfd3JpdGV3KG9uZW5hbmRfYnVmZmVycmFtX2FkZHJlc3MoYmxvY2spLAorCQkJT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIpOworCisJb25lbmFuZF93cml0ZXcob25lbmFuZF9zZWN0b3JfYWRkcmVzcyhwYWdlKSwKKwkJCU9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M4KTsKKworCW9uZW5hbmRfd3JpdGV3KG9uZW5hbmRfYnVmZmVyX2FkZHJlc3MoKSwKKwkJCU9ORU5BTkRfUkVHX1NUQVJUX0JVRkZFUik7CisKKwlvbmVuYW5kX3dyaXRldyhPTkVOQU5EX0lOVF9DTEVBUiwgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKKworCW9uZW5hbmRfd3JpdGV3KE9ORU5BTkRfQ01EX1JFQUQsIE9ORU5BTkRfUkVHX0NPTU1BTkQpOworCisJd2hpbGUgKCEob25lbmFuZF9yZWFkdyhPTkVOQU5EX1JFR19JTlRFUlJVUFQpICYgT05FTkFORF9JTlRfUkVBRCkpCisJCWNvbnRpbnVlOworCisJLyogQ2hlY2sgZm9yIGludmFsaWQgYmxvY2sgbWFyayAqLworCWlmIChwYWdlIDwgMiAmJiAob25lbmFuZF9yZWFkdyhPTkVOQU5EX1NQQVJFUkFNKSAhPSAweGZmZmYpKQorCQlyZXR1cm4gMTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgcGFnZXNpemU7IG9mZnNldCArPSA0KQorCQlidWZbb2Zmc2V0IC8gNF0gPSByZWFkbChhZGRyICsgb2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCit2b2lkIG9uZW5hbmRfc3BsX2xvYWRfaW1hZ2UodWludDMyX3Qgb2ZmcywgdWludDMyX3Qgc2l6ZSwgdm9pZCAqZHN0KQoreworCXVpbnQzMl90ICphZGRyID0gKHVpbnQzMl90ICopZHN0OworCXVpbnQzMl90IHRvdGFsX3BhZ2VzOworCXVpbnQzMl90IGJsb2NrOworCXVpbnQzMl90IHBhZ2UsIHJwYWdlOworCWVudW0gb25lbmFuZF9zcGxfcGFnZXNpemUgcGFnZXNpemU7CisJaW50IHJldDsKKworCXBhZ2VzaXplID0gb25lbmFuZF9zcGxfZ2V0X2dlb21ldHJ5KCk7CisKKwkvKgorCSAqIFRoZSBwYWdlIGNhbiBiZSBlaXRoZXIgMmsgb3IgNGssIGF2b2lkIHVzaW5nIERJVl9ST1VORF9VUCB0byBhdm9pZAorCSAqIHB1bGxpbmcgZnVydGhlciB1bndhbnRlZCBmdW5jdGlvbnMgaW50byB0aGUgU1BMLgorCSAqLworCWlmIChwYWdlc2l6ZSA9PSAyMDQ4KSB7CisJCXRvdGFsX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIDIwNDgpOworCQlwYWdlID0gb2ZmcyAvIDIwNDg7CisJfSBlbHNlIHsKKwkJdG90YWxfcGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgNDA5Nik7CisJCXBhZ2UgPSBvZmZzIC8gNDA5NjsKKwl9CisKKwlmb3IgKDsgcGFnZSA8PSB0b3RhbF9wYWdlczsgcGFnZSsrKSB7CisJCWJsb2NrID0gcGFnZSAvIE9ORU5BTkRfUEFHRVNfUEVSX0JMT0NLOworCQlycGFnZSA9IHBhZ2UgJiAoT05FTkFORF9QQUdFU19QRVJfQkxPQ0sgLSAxKTsKKwkJcmV0ID0gb25lbmFuZF9zcGxfcmVhZF9wYWdlKGJsb2NrLCBycGFnZSwgYWRkciwgcGFnZXNpemUpOworCQlpZiAocmV0KSB7CisJCQl0b3RhbF9wYWdlcyArPSBPTkVOQU5EX1BBR0VTX1BFUl9CTE9DSzsKKwkJCXBhZ2UgKz0gT05FTkFORF9QQUdFU19QRVJfQkxPQ0sgLSAxOworCQl9IGVsc2UgeworCQkJYWRkciArPSBwYWdlc2l6ZSAvIDQ7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC80eHhfZW5ldC5jIGIvZHJpdmVycy9uZXQvNHh4X2VuZXQuYwppbmRleCBhNzcxMTM5Li43MzcwMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC80eHhfZW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0LzR4eF9lbmV0LmMKQEAgLTkyLDYgKzkyLDcgQEAKICNpbmNsdWRlIDxhc20vcHBjNHh4LW1hbC5oPgogI2luY2x1ZGUgPG1paXBoeS5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZiAhKGRlZmluZWQoQ09ORklHX01JSSkgfHwgZGVmaW5lZChDT05GSUdfQ01EX01JSSkpCiAjZXJyb3IgIkNPTkZJR19NSUkgaGFzIHRvIGJlIGRlZmluZWQhIgpAQCAtODcyLDcgKzg3Myw3IEBACiAgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR180NjBFWCkgfHwgZGVmaW5lZChDT05GSUdfNDYwR1QpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR180MDVFWCkKLQlpbnQgZXRoZ3JvdXAgPSAtMTsKKwlfX21heWJlX3VudXNlZCBpbnQgZXRoZ3JvdXAgPSAtMTsKICNlbmRpZgogI2VuZGlmCiAJdTMyIGJkX2NhY2hlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggMTVlZWU4ZC4uZDNkZjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTYzLDcgKzYzLDYgQEAKIENPQkpTLSQoQ09ORklHX05TODM4MlgpICs9IG5zODM4MngubwogQ09CSlMtJChDT05GSUdfUENORVQpICs9IHBjbmV0Lm8KIENPQkpTLSQoQ09ORklHX1BMQjI4MDBfRVRIRVIpICs9IHBsYjI4MDBfZXRoLm8KLUNPQkpTLSQoQ09ORklHX0RSSVZFUl9SVEw4MDE5KSArPSBydGw4MDE5Lm8KIENPQkpTLSQoQ09ORklHX1JUTDgxMzkpICs9IHJ0bDgxMzkubwogQ09CSlMtJChDT05GSUdfUlRMODE2OSkgKz0gcnRsODE2OS5vCiBDT0JKUy0kKENPTkZJR19TSF9FVEhFUikgKz0gc2hfZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0OTFfZW1hYy5jIGIvZHJpdmVycy9uZXQvYXQ5MV9lbWFjLmMKaW5kZXggOTdkMjczOS4uOWJkYTFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXQ5MV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYXQ5MV9lbWFjLmMKQEAgLTQ3NCwxMSArNDc0LDkgQEAKIAogc3RhdGljIGludCBhdDkxZW1hY193cml0ZV9od2FkZHIoc3RydWN0IGV0aF9kZXZpY2UgKm5ldGRldikKIHsKLQllbWFjX2RldmljZSAqZGV2OwogCWF0OTFfZW1hY190ICplbWFjOwogCWF0OTFfcG1jX3QgKnBtYyA9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCWVtYWMgPSAoYXQ5MV9lbWFjX3QgKikgbmV0ZGV2LT5pb2Jhc2U7Ci0JZGV2ID0gKGVtYWNfZGV2aWNlICopIG5ldGRldi0+cHJpdjsKIAogCXdyaXRlbCgxIDw8IEFUTUVMX0lEX0VNQUMsICZwbWMtPnBjZXIpOwogCURFQlVHX0FUOTFFTUFDKCJpbml0IE1BQy1BRERSICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCBmYTMxMTU5Li4zNmMzM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtODUsMTUgKzg1LDE3IEBACiAvKiBSZWNlaXZlIHBhY2tldCBidWZmZXJzICovCiBzdGF0aWMgdW5zaWduZWQgY2hhcgkJZW1hY19yeF9idWZmZXJzW0VNQUNfTUFYX1JYX0JVRkZFUlMgKiAoRU1BQ19NQVhfRVRIRVJORVRfUEtUX1NJWkUgKyBFTUFDX1BLVF9BTElHTildOwogCi0jZGVmaW5lIE1BWF9QSFkJCTMKKyNpZm5kZWYgQ09ORklHX1NZU19EQVZJTkNJX0VNQUNfUEhZX0NPVU5UCisjZGVmaW5lIENPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVAkzCisjZW5kaWYKIAogLyogUEhZIGFkZHJlc3MgZm9yIGEgZGlzY292ZXJlZCBQSFkgKDB4ZmYgLSBub3QgZm91bmQpICovCi1zdGF0aWMgdV9pbnQ4X3QJYWN0aXZlX3BoeV9hZGRyW01BWF9QSFldID0geyAweGZmLCAweGZmLCAweGZmIH07CitzdGF0aWMgdV9pbnQ4X3QJYWN0aXZlX3BoeV9hZGRyW0NPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVF07CiAKIC8qIG51bWJlciBvZiBQSFkgZm91bmQgYWN0aXZlICovCiBzdGF0aWMgdV9pbnQ4X3QJbnVtX3BoeTsKIAotcGh5X3QJCQkJcGh5W01BWF9QSFldOworcGh5X3QJCQkJcGh5W0NPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVF07CiAKIHN0YXRpYyBpbnQgZGF2aW5jaV9ldGhfc2V0X21hY19hZGRyKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCiB7CkBAIC0xNjAsOSArMTYyLDggQEAKIAlpbnQJCWo7CiAJdW5zaWduZWQgaW50CWNvdW50ID0gMDsKIAotCWFjdGl2ZV9waHlfYWRkclswXSA9IDB4ZmY7Ci0JYWN0aXZlX3BoeV9hZGRyWzFdID0gMHhmZjsKLQlhY3RpdmVfcGh5X2FkZHJbMl0gPSAweGZmOworCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU1lTX0RBVklOQ0lfRU1BQ19QSFlfQ09VTlQ7IGkrKykKKwkJYWN0aXZlX3BoeV9hZGRyW2ldID0gMHhmZjsKIAogCXVkZWxheSgxMDAwKTsKIAlwaHlfYWN0X3N0YXRlID0gcmVhZGwoJmFkYXBfbWRpby0+QUxJVkUpOwpAQCAtMTc1LDcgKzE3NiwxNCBAQAogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKykKIAkJaWYgKHBoeV9hY3Rfc3RhdGUgJiAoMSA8PCBpKSkgewogCQkJY291bnQrKzsKLQkJCWFjdGl2ZV9waHlfYWRkcltqKytdID0gaTsKKwkJCWlmIChjb3VudCA8IENPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVCkgeworCQkJCWFjdGl2ZV9waHlfYWRkcltqKytdID0gaTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCIlczogdG8gbWFueSBQSFlzIGRldGVjdGVkLlxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCWNvdW50ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJbnVtX3BoeSA9IGNvdW50OwpAQCAtNzUyLDcgKzc2MCw3IEBACiAJaWYgKCFyZXQpCiAJCXJldHVybigwKTsKIAllbHNlCi0JCXByaW50ZigiICVkIEVUSCBQSFkgZGV0ZWN0ZWRcbiIsIHJldCk7CisJCWRlYnVnX2VtYWMoIiAlZCBFVEggUEhZIGRldGVjdGVkXG4iLCByZXQpOwogCiAJLyogR2V0IFBIWSBJRCBhbmQgaW5pdGlhbGl6ZSBwaHlfb3BzIGZvciBhIGRldGVjdGVkIFBIWSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGh5OyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwLmMgYi9kcml2ZXJzL25ldC9lMTAwMC5jCmluZGV4IDZlYWI3YjIuLjZiNzFiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAuYwpAQCAtMTM3MCw3ICsxMzcwLDYgQEAKIHsKIAl1aW50MzJfdCBjdHJsOwogCXVpbnQzMl90IGN0cmxfZXh0OwotCXVpbnQzMl90IGljcjsKIAl1aW50MzJfdCBtYW5jOwogCXVpbnQzMl90IHBiYSA9IDA7CiAKQEAgLTE0NDMsNyArMTQ0Miw3IEBACiAJRTEwMDBfV1JJVEVfUkVHKGh3LCBJTUMsIDB4ZmZmZmZmZmYpOwogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gKi8KLQlpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKKwlFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKIAogCS8qIElmIE1XSSB3YXMgcHJldmlvdXNseSBlbmFibGVkLCByZWVuYWJsZSBpdC4gKi8KIAlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkgewpAQCAtNDQ0Nyw3ICs0NDQ2LDggQEAKIAkJbWRlbGF5KDIwKTsKIAogCQkvKiBOb3cgZW5hYmxlIHRoZSB0cmFuc21pdHRlciAqLwotCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCAweDJGNUIsIHBoeV9zYXZlZF9kYXRhKTsKKwkJaWYgKCFyZXRfdmFsKQorCQkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCBwaHlfc2F2ZWRfZGF0YSk7CiAKIAkJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykgewogCQkJdWludDE2X3QgZnVzZWQsIGZpbmUsIGNvYXJzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMC5oCmluZGV4IGQ4NDAwZDQuLmZkMWQ4ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAuaApAQCAtMTY3OCwxNCArMTY3OCw2IEBACiAjZGVmaW5lIEVFUFJPTV9FV0VOX09QQ09ERSAgMHgxMwkvKiBFRVJQT00gZXJhc2Uvd3JpdGUgZW5hYmxlICovCiAjZGVmaW5lIEVFUFJPTV9FV0RTX09QQ09ERSAgMHgxMAkvKiBFRVJQT00gZXJhc3Qvd3JpdGUgZGlzYWJsZSAqLwogCi0vKiBFRVBST00gV29yZCBPZmZzZXRzICovCi0jZGVmaW5lIEVFUFJPTV9DT01QQVQJCSAgIDB4MDAwMwotI2RlZmluZSBFRVBST01fSURfTEVEX1NFVFRJTkdTCSAgIDB4MDAwNAotI2RlZmluZSBFRVBST01fSU5JVF9DT05UUk9MMV9SRUcgICAweDAwMEEKLSNkZWZpbmUgRUVQUk9NX0lOSVRfQ09OVFJPTDJfUkVHICAgMHgwMDBGCi0jZGVmaW5lIEVFUFJPTV9GTEFTSF9WRVJTSU9OCSAgIDB4MDAzMgotI2RlZmluZSBFRVBST01fQ0hFQ0tTVU1fUkVHCSAgIDB4MDAzRgotCiAvKiBXb3JkIGRlZmluaXRpb25zIGZvciBJRCBMRUQgU2V0dGluZ3MgKi8KICNkZWZpbmUgSURfTEVEX1JFU0VSVkVEXzAwMDAgMHgwMDAwCiAjZGVmaW5lIElEX0xFRF9SRVNFUlZFRF9GRkZGIDB4RkZGRgpAQCAtMjQ3OSw3ICsyNDcxLDYgQEAKICNkZWZpbmUgQURWRVJUSVNFXzEwMF9GVUxMCQkweDAwMDgKICNkZWZpbmUgQURWRVJUSVNFXzEwMDBfSEFMRgkJMHgwMDEwCiAjZGVmaW5lIEFEVkVSVElTRV8xMDAwX0ZVTEwJCTB4MDAyMAotI2RlZmluZSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUIDB4MDAyRgkvKiBFdmVyeXRoaW5nIGJ1dCAxMDAwLUhhbGYgKi8KIAogI2RlZmluZSBJQ0hfRkxBU0hfR0ZQUkVHICAgMHgwMDAwCiAjZGVmaW5lIElDSF9GTEFTSF9IU0ZTVFMgICAweDAwMDQKQEAgLTI1MDQsNyArMjQ5NSw2IEBACiAjZGVmaW5lIElDSF9HRlBSRUdfQkFTRV9NQVNLICAgICAgIDB4MUZGRgogI2RlZmluZSBJQ0hfRkxBU0hfTElORUFSX0FERFJfTUFTSyAweDAwRkZGRkZGCiAKLSNkZWZpbmUgRTEwMDBfRUVXUiAgICAgMHgwMTAyQyAgLyogRUVQUk9NIFdyaXRlIFJlZ2lzdGVyIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfU1dfRldfU1lOQyAweDA1QjVDIC8qIFNvZnR3YXJlLUZpcm13YXJlIFN5bmNocm9uaXphdGlvbiAtIFJXICovCiAKIC8qIFNQSSBFRVBST00gU3RhdHVzIFJlZ2lzdGVyICovCkBAIC0yNTk5LDcgKzI1ODksNiBAQAogI2RlZmluZSBQSFlfQ0ZHX1RJTUVPVVQgICAgICAgICAgICAgMTAwCiAjZGVmaW5lIERFRkFVTFRfODAwMDNFUzJMQU5fVElQR19JUEdUXzEwXzEwMCAweDAwMDAwMDA5CiAjZGVmaW5lIERFRkFVTFRfODAwMDNFUzJMQU5fVElQR19JUEdUXzEwMDAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEUxMDAwX1RYRE1BQ19EUFAgMHgwMDAwMDAwMQogI2RlZmluZSBBVVRPX0FMTF9NT0RFUwkwCiAKICNpZm5kZWYgRTEwMDBfTUFTVEVSX1NMQVZFCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwppbmRleCBkNTVjYWNkLi5lMjAxMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKQEAgLTQzMiw3ICs0MzIsNiBAQAogCXUxNiBwa3RfbGVuOwogCXUxNiBjb3B5X2xlbjsKIAl1MTYgc3RhdHVzOwotCXU4IGVpcl9yZWc7CiAJdTggcGt0X2NudCA9IDA7CiAJdTE2IHJ4YnVmX3JkcHQ7CiAJdTggaGJ1Zls2XTsKQEAgLTQ3Niw3ICs0NzUsNyBAQAogCQkvKiByZWFkIHBrdGNudCAqLwogCQlwa3RfY250ID0gZW5jX3I4KGVuYywgQ1RMX1JFR19FUEtUQ05UKTsKIAkJaWYgKGNvcHlfbGVuID09IDApIHsKLQkJCWVpcl9yZWcgPSBlbmNfcjgoZW5jLCBDVExfUkVHX0VJUik7CisJCQkodm9pZCllbmNfcjgoZW5jLCBDVExfUkVHX0VJUik7CiAJCQllbmNfcmVzZXRfcngoZW5jKTsKIAkJCXByaW50ZigiJXM6IHJlY2VpdmUgY29weV9sZW49MFxuIiwgZW5jLT5kZXYtPm5hbWUpOwogCQkJY29udGludWU7CkBAIC00ODksNyArNDg4LDcgQEAKIAkJTmV0UmVjZWl2ZShwYWNrZXQsIHBrdF9sZW4pOwogCQlpZiAoZW5jX2NsYWltX2J1cyhlbmMpKQogCQkJcmV0dXJuOwotCQllaXJfcmVnID0gZW5jX3I4KGVuYywgQ1RMX1JFR19FSVIpOworCQkodm9pZCllbmNfcjgoZW5jLCBDVExfUkVHX0VJUik7CiAJfSB3aGlsZSAocGt0X2NudCk7CiAJLyogVXNlIEVQS1RDTlQgbm90IEVJUi5QS1RJRiBmbGFnLCBzZWUgZXJyYXRhIHB0LiA2ICovCiB9CkBAIC01MDAsMTQgKzQ5OSwxMyBAQAogc3RhdGljIHZvaWQgZW5jX3BvbGwoZW5jX2Rldl90ICplbmMpCiB7CiAJdTggZWlyX3JlZzsKLQl1OCBlc3RhdF9yZWc7CiAJdTggcGt0X2NudDsKIAogI2lmZGVmIENPTkZJR19VU0VfSVJRCiAJLyogY2xlYXIgZ2xvYmFsIGludGVycnVwdCBlbmFibGUgYml0IGluIGVuYzI4ajYwICovCiAJZW5jX2JjbHIoZW5jLCBDVExfUkVHX0VJRSwgRU5DX0VJRV9JTlRJRSk7CiAjZW5kaWYKLQllc3RhdF9yZWcgPSBlbmNfcjgoZW5jLCBDVExfUkVHX0VTVEFUKTsKKwkodm9pZCllbmNfcjgoZW5jLCBDVExfUkVHX0VTVEFUKTsKIAllaXJfcmVnID0gZW5jX3I4KGVuYywgQ1RMX1JFR19FSVIpOwogCWlmIChlaXJfcmVnICYgRU5DX0VJUl9UWElGKSB7CiAJCS8qIGNsZWFyIFRYSUYgYml0IGluIEVJUiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX214Yy5jIGIvZHJpdmVycy9uZXQvZmVjX214Yy5jCmluZGV4IDBjMGM3Y2QuLmIwNWE0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19teGMuYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXhjLmMKQEAgLTQyLDYgKzQyLDE0IEBACiAjZGVmaW5lCUNPTkZJR19GRUNfWENWX1RZUEUJTUlJMTAwCiAjZW5kaWYKIAorLyoKKyAqIFRoZSBpLk1YMjggb3BlcmF0ZXMgd2l0aCBwYWNrZXRzIGluIGJpZyBlbmRpYW4uIFdlIG5lZWQgdG8gc3dhcCB0aGVtIGJlZm9yZQorICogc2VuZGluZyBhbmQgYWZ0ZXIgcmVjZWl2aW5nLgorICovCisjaWZkZWYJQ09ORklHX01YMjgKKyNkZWZpbmUJQ09ORklHX0ZFQ19NWENfU1dBUF9QQUNLRVQKKyNlbmRpZgorCiAjdW5kZWYgREVCVUcKIAogc3RydWN0IG5idWYgewpAQCAtNTEsNiArNTksMzIgQEAKIAl1aW50OF90IGhlYWRbMTZdOwkvKio8IE1BQyBoZWFkZXIoNiArIDYgKyAyKSArIDIoYWxpZ25lZCkgKi8KIH07CiAKKyNpZmRlZglDT05GSUdfRkVDX01YQ19TV0FQX1BBQ0tFVAorc3RhdGljIHZvaWQgc3dhcF9wYWNrZXQodWludDMyX3QgKnBhY2tldCwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAobGVuZ3RoLCA0KTsgaSsrKQorCQlwYWNrZXRbaV0gPSBfX3N3YWIzMihwYWNrZXRbaV0pOworfQorI2VuZGlmCisKKy8qCisgKiBUaGUgaS5NWDI4IGhhcyB0d28gZXRoZXJuZXQgaW50ZXJmYWNlcywgYnV0IHRoZXkgYXJlIG5vdCBlcXVhbC4KKyAqIE9ubHkgdGhlIGZpcnN0IG9uZSBjYW4gYWNjZXNzIHRoZSBNRElPIGJ1cy4KKyAqLworI2lmZGVmCUNPTkZJR19NWDI4CitzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhlcm5ldF9yZWdzICpmZWNfbWlpcGh5X2ZlY190b19ldGgoc3RydWN0IGZlY19wcml2ICpmZWMpCit7CisJcmV0dXJuIChzdHJ1Y3QgZXRoZXJuZXRfcmVncyAqKU1YU19FTkVUMF9CQVNFOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGVybmV0X3JlZ3MgKmZlY19taWlwaHlfZmVjX3RvX2V0aChzdHJ1Y3QgZmVjX3ByaXYgKmZlYykKK3sKKwlyZXR1cm4gZmVjLT5ldGg7Cit9CisjZW5kaWYKKwogLyoKICAqIE1JSS1pbnRlcmZhY2UgcmVsYXRlZCBmdW5jdGlvbnMKICAqLwpAQCAtNTksNyArOTMsNyBAQAogewogCXN0cnVjdCBldGhfZGV2aWNlICplZGV2ID0gZXRoX2dldF9kZXZfYnlfbmFtZShkZXYpOwogCXN0cnVjdCBmZWNfcHJpdiAqZmVjID0gKHN0cnVjdCBmZWNfcHJpdiAqKWVkZXYtPnByaXY7Ci0Jc3RydWN0IGV0aGVybmV0X3JlZ3MgKmV0aCA9IGZlYy0+ZXRoOworCXN0cnVjdCBldGhlcm5ldF9yZWdzICpldGggPSBmZWNfbWlpcGh5X2ZlY190b19ldGgoZmVjKTsKIAogCXVpbnQzMl90IHJlZzsJCS8qIGNvbnZlbmllbnQgaG9sZGVyIGZvciB0aGUgUEhZIHJlZ2lzdGVyICovCiAJdWludDMyX3QgcGh5OwkJLyogY29udmVuaWVudCBob2xkZXIgZm9yIHRoZSBQSFkgKi8KQEAgLTExNyw3ICsxNTEsNyBAQAogewogCXN0cnVjdCBldGhfZGV2aWNlICplZGV2ID0gZXRoX2dldF9kZXZfYnlfbmFtZShkZXYpOwogCXN0cnVjdCBmZWNfcHJpdiAqZmVjID0gKHN0cnVjdCBmZWNfcHJpdiAqKWVkZXYtPnByaXY7Ci0Jc3RydWN0IGV0aGVybmV0X3JlZ3MgKmV0aCA9IGZlYy0+ZXRoOworCXN0cnVjdCBldGhlcm5ldF9yZWdzICpldGggPSBmZWNfbWlpcGh5X2ZlY190b19ldGgoZmVjKTsKIAogCXVpbnQzMl90IHJlZzsJCS8qIGNvbnZlbmllbnQgaG9sZGVyIGZvciB0aGUgUEhZIHJlZ2lzdGVyICovCiAJdWludDMyX3QgcGh5OwkJLyogY29udmVuaWVudCBob2xkZXIgZm9yIHRoZSBQSFkgKi8KQEAgLTU3Miw2ICs2MDYsOSBAQAogCSAqIE5vdGU6IFdlIGFyZSBhbHdheXMgdXNpbmcgdGhlIGZpcnN0IGJ1ZmZlciBmb3IgdHJhbnNtaXNzaW9uLAogCSAqIHRoZSBzZWNvbmQgd2lsbCBiZSBlbXB0eSBhbmQgb25seSB1c2VkIHRvIHN0b3AgdGhlIERNQSBlbmdpbmUKIAkgKi8KKyNpZmRlZglDT05GSUdfRkVDX01YQ19TV0FQX1BBQ0tFVAorCXN3YXBfcGFja2V0KCh1aW50MzJfdCAqKXBhY2tldCwgbGVuZ3RoKTsKKyNlbmRpZgogCXdyaXRldyhsZW5ndGgsICZmZWMtPnRiZF9iYXNlW2ZlYy0+dGJkX2luZGV4XS5kYXRhX2xlbmd0aCk7CiAJd3JpdGVsKCh1aW50MzJfdClwYWNrZXQsICZmZWMtPnRiZF9iYXNlW2ZlYy0+dGJkX2luZGV4XS5kYXRhX3BvaW50ZXIpOwogCS8qCkBAIC02NjgsNiArNzA1LDkgQEAKIAkJCS8qCiAJCQkgKiAgRmlsbCB0aGUgYnVmZmVyIGFuZCBwYXNzIGl0IHRvIHVwcGVyIGxheWVycwogCQkJICovCisjaWZkZWYJQ09ORklHX0ZFQ19NWENfU1dBUF9QQUNLRVQKKwkJCXN3YXBfcGFja2V0KCh1aW50MzJfdCAqKWZyYW1lLT5kYXRhLCBmcmFtZV9sZW5ndGgpOworI2VuZGlmCiAJCQltZW1jcHkoYnVmZiwgZnJhbWUtPmRhdGEsIGZyYW1lX2xlbmd0aCk7CiAJCQlOZXRSZWNlaXZlKGJ1ZmYsIGZyYW1lX2xlbmd0aCk7CiAJCQlsZW4gPSBmcmFtZV9sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mbS9mbS5jIGIvZHJpdmVycy9uZXQvZm0vZm0uYwppbmRleCAyM2VmMTRiLi44NDZjMzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mbS9mbS5jCisrKyBiL2RyaXZlcnMvbmV0L2ZtL2ZtLmMKQEAgLTM5NSw3ICszOTUsNiBAQAogCWludCBkZXYgPSBDT05GSUdfU1lTX01NQ19FTlZfREVWOwogCXZvaWQgKmFkZHIgPSBtYWxsb2MoQ09ORklHX1NZU19GTUFOX0ZXX0xFTkdUSCk7CiAJdTMyIGNudCA9IENPTkZJR19TWVNfRk1BTl9GV19MRU5HVEggLyA1MTI7Ci0JdTMyIG47CiAJdTMyIGJsayA9IENPTkZJR19TWVNfUUVfRldfSU5fTU1DIC8gNTEyOwogCXN0cnVjdCBtbWMgKm1tYyA9IGZpbmRfbW1jX2RldmljZShDT05GSUdfU1lTX01NQ19FTlZfREVWKTsKIApAQCAtNDA1LDcgKzQwNCw3IEBACiAJCXByaW50ZigiXG5NTUMgcmVhZDogZGV2ICMgJXUsIGJsb2NrICMgJXUsIGNvdW50ICV1IC4uLlxuIiwKIAkJCQlkZXYsIGJsaywgY250KTsKIAkJbW1jX2luaXQobW1jKTsKLQkJbiA9IG1tYy0+YmxvY2tfZGV2LmJsb2NrX3JlYWQoZGV2LCBibGssIGNudCwgYWRkcik7CisJCSh2b2lkKW1tYy0+YmxvY2tfZGV2LmJsb2NrX3JlYWQoZGV2LCBibGssIGNudCwgYWRkcik7CiAJCS8qIGZsdXNoIGNhY2hlIGFmdGVyIHJlYWQgKi8KIAkJZmx1c2hfY2FjaGUoKHVsb25nKWFkZHIsIGNudCAqIDUxMik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcnRsODAxOS5jIGIvZHJpdmVycy9uZXQvcnRsODAxOS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTE2YWZlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3J0bDgwMTkuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKgotICogUmVhbHRlayA4MDE5QVMgRXRoZXJuZXQKLSAqIChDKSBDb3B5cmlnaHQgMjAwMi0yMDAzCi0gKiBYdWUgTGlnb25nKGxneHVlQGhvdG1haWwuY29tKSxXYW5nIEtlaGFvLCBFU0xBQiwgd2h1dC5lZHUuY24KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogVGhpcyBjb2RlIHdvcmtzIGluIDhiaXQgbW9kZS4KLSAqIElmIHlvdSBuZWVkIHRvIHdvcmsgaW4gMTZiaXQgbW9kZSwgUExTIGNoYW5nZSBpdCEKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgInJ0bDgwMTkuaCIKLSNpbmNsdWRlIDxuZXQuaD4KLQotLyogcGFja2V0IHBhZ2UgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucyAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBnZXRfcmVnICh1bnNpZ25lZCBpbnQgcmVnbm8pCi17Ci0JcmV0dXJuICgqKHVuc2lnbmVkIGNoYXIgKikgcmVnbm8pOwotfQotCi1zdGF0aWMgdm9pZCBwdXRfcmVnICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGNoYXIgdmFsKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSByZWdubyA9IHZhbDsKLX0KLQotc3RhdGljIHZvaWQgZXRoX3Jlc2V0ICh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgdWNUZW1wOwotCi0JLyogcmVzZXQgTklDICovCi0JdWNUZW1wID0gZ2V0X3JlZyAoUlRMODAxOV9SRVNFVCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9SRVNFVCwgdWNUZW1wKTsKLQlwdXRfcmVnIChSVEw4MDE5X0lOVEVSUlVQVFNUQVRVUywgMHhmZik7Ci0JdWRlbGF5ICgyMDAwKTsJCS8qIHdhaXQgZm9yIDJtcyAqLwotfQotCi12b2lkIHJ0bDgwMTlfZ2V0X2VuZXRhZGRyICh1Y2hhciAqIGFkZHIpCi17Ci0JdW5zaWduZWQgY2hhciBpOwotCXVuc2lnbmVkIGNoYXIgdGVtcDsKLQotCWV0aF9yZXNldCAoKTsKLQotCXB1dF9yZWcgKFJUTDgwMTlfQ09NTUFORCwgUlRMODAxOV9SRU1PVEVETUFSRCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9EQVRBQ09ORklHVVJBVElPTiwgMHg0OCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9SRU1PVEVTVEFSVEFERFJFU1MwLCAweDAwKTsKLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URVNUQVJUQUREUkVTUzEsIDB4MDApOwotCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMCwgMTIpOwotCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMSwgMHgwMCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9DT01NQU5ELCBSVEw4MDE5X1JFTU9URURNQVJEKTsKLQlwcmludGYgKCJNQUM6ICIpOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJdGVtcCA9IGdldF9yZWcgKFJUTDgwMTlfRE1BX0RBVEEpOwotCQkqYWRkcisrID0gdGVtcDsKLQkJdGVtcCA9IGdldF9yZWcgKFJUTDgwMTlfRE1BX0RBVEEpOwotCQlwcmludGYgKCIleDoiLCB0ZW1wKTsKLQl9Ci0KLQl3aGlsZSAoKCFnZXRfcmVnIChSVEw4MDE5X0lOVEVSUlVQVFNUQVRVUykgJiAweDQwKSk7Ci0JcHJpbnRmICgiXGIgXG4iKTsKLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URUJZVEVDT1VOVDAsIDB4MDApOwotCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMSwgMHgwMCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9DT01NQU5ELCBSVEw4MDE5X1BBR0UwKTsKLX0KLQotdm9pZCBldGhfaGFsdCAodm9pZCkKLXsKLQlwdXRfcmVnIChSVEw4MDE5X0NPTU1BTkQsIDB4MDEpOwotfQotCi1pbnQgZXRoX2luaXQgKGJkX3QgKiBiZCkKLXsKLQl1Y2hhciBlbmV0YWRkcls2XTsKLQlldGhfcmVzZXQgKCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9DT01NQU5ELCBSVEw4MDE5X1BBR0UwU1RPUCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9EQVRBQ09ORklHVVJBVElPTiwgMHg0OCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9SRU1PVEVCWVRFQ09VTlQwLCAweDAwKTsKLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URUJZVEVDT1VOVDEsIDB4MDApOwotCXB1dF9yZWcgKFJUTDgwMTlfUkVDRUlWRUNPTkZJR1VSQVRJT04sIDB4MDApOwkvKjAwOyAqLwotCXB1dF9yZWcgKFJUTDgwMTlfVFJBTlNNSVRQQUdFLCBSVEw4MDE5X1RQU1RBUlQpOwotCXB1dF9yZWcgKFJUTDgwMTlfVFJBTlNNSVRDT05GSUdVUkFUSU9OLCAweDAyKTsKLQlwdXRfcmVnIChSVEw4MDE5X1BBR0VTVEFSVCwgUlRMODAxOV9QU1RBUlQpOwotCXB1dF9yZWcgKFJUTDgwMTlfQk9VTkRBUlksIFJUTDgwMTlfUFNUQVJUKTsKLQlwdXRfcmVnIChSVEw4MDE5X1BBR0VTVE9QLCBSVEw4MDE5X1BTVE9QKTsKLQlwdXRfcmVnIChSVEw4MDE5X0lOVEVSUlVQVFNUQVRVUywgMHhmZik7Ci0JcHV0X3JlZyAoUlRMODAxOV9JTlRFUlJVUFRNQVNLLCAweDExKTsJLypiOyAqLwotCXB1dF9yZWcgKFJUTDgwMTlfQ09NTUFORCwgUlRMODAxOV9QQUdFMVNUT1ApOwotCWV0aF9nZXRlbnZfZW5ldGFkZHIoImV0aGFkZHIiLCBlbmV0YWRkcik7Ci0JcHV0X3JlZyAoUlRMODAxOV9QSFlTSUNBTEFERFJFU1MwLCBlbmV0YWRkclswXSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9QSFlTSUNBTEFERFJFU1MxLCBlbmV0YWRkclsxXSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9QSFlTSUNBTEFERFJFU1MyLCBlbmV0YWRkclsyXSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9QSFlTSUNBTEFERFJFU1MzLCBlbmV0YWRkclszXSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9QSFlTSUNBTEFERFJFU1M0LCBlbmV0YWRkcls0XSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9QSFlTSUNBTEFERFJFU1M1LCBlbmV0YWRkcls1XSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9NVUxUSUFERFJFU1MwLCAweDAwKTsKLQlwdXRfcmVnIChSVEw4MDE5X01VTFRJQUREUkVTUzEsIDB4MDApOwotCXB1dF9yZWcgKFJUTDgwMTlfTVVMVElBRERSRVNTMiwgMHgwMCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9NVUxUSUFERFJFU1MzLCAweDAwKTsKLQlwdXRfcmVnIChSVEw4MDE5X01VTFRJQUREUkVTUzQsIDB4MDApOwotCXB1dF9yZWcgKFJUTDgwMTlfTVVMVElBRERSRVNTNSwgMHgwMCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9NVUxUSUFERFJFU1M2LCAweDAwKTsKLQlwdXRfcmVnIChSVEw4MDE5X01VTFRJQUREUkVTUzcsIDB4MDApOwotCXB1dF9yZWcgKFJUTDgwMTlfQ1VSUkVOVCwgUlRMODAxOV9QU1RBUlQpOwotCXB1dF9yZWcgKFJUTDgwMTlfQ09NTUFORCwgUlRMODAxOV9QQUdFMCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9UUkFOU01JVENPTkZJR1VSQVRJT04sIDB4ZTApOwkvKjU4OyAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG5pY190b19wYyAodm9pZCkKLXsKLQl1bnNpZ25lZCBjaGFyIHJlY19oZWFkX3N0YXR1czsKLQl1bnNpZ25lZCBjaGFyIG5leHRfcGFja2V0X3BvaW50ZXI7Ci0JdW5zaWduZWQgY2hhciBwYWNrZXRfbGVuZ3RoMDsKLQl1bnNpZ25lZCBjaGFyIHBhY2tldF9sZW5ndGgxOwotCXVuc2lnbmVkIHNob3J0IHJ4bGVuID0gMDsKLQl1bnNpZ25lZCBpbnQgaSA9IDQ7Ci0JdW5zaWduZWQgY2hhciBjdXJyZW50X3BvaW50OwotCXVuc2lnbmVkIGNoYXIgKmFkZHI7Ci0KLQkvKgotCSAqIFRoZSBSVEw4MDE5J3MgZmlyc3QgNEIgaXMgcGFja2V0IHN0YXR1cyxwYWdlIG9mIG5leHQgcGFja2V0Ci0JICogYW5kIHBhY2tldCBsZW5ndGgoMkIpLlNvIHdlIHJlY2VpdmUgdGhlIGZpc3QgNEIuCi0JICovCi0JcHV0X3JlZyAoUlRMODAxOV9SRU1PVEVTVEFSVEFERFJFU1MxLCBnZXRfcmVnIChSVEw4MDE5X0JPVU5EQVJZKSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9SRU1PVEVTVEFSVEFERFJFU1MwLCAweDAwKTsKLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URUJZVEVDT1VOVDEsIDB4MDApOwotCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMCwgMHgwNCk7Ci0KLQlwdXRfcmVnIChSVEw4MDE5X0NPTU1BTkQsIFJUTDgwMTlfUkVNT1RFRE1BUkQpOwotCi0JcmVjX2hlYWRfc3RhdHVzID0gZ2V0X3JlZyAoUlRMODAxOV9ETUFfREFUQSk7Ci0JbmV4dF9wYWNrZXRfcG9pbnRlciA9IGdldF9yZWcgKFJUTDgwMTlfRE1BX0RBVEEpOwotCXBhY2tldF9sZW5ndGgwID0gZ2V0X3JlZyAoUlRMODAxOV9ETUFfREFUQSk7Ci0JcGFja2V0X2xlbmd0aDEgPSBnZXRfcmVnIChSVEw4MDE5X0RNQV9EQVRBKTsKLQotCXB1dF9yZWcgKFJUTDgwMTlfQ09NTUFORCwgUlRMODAxOV9QQUdFMCk7Ci0JLypQYWNrZXQgbGVuZ3RoIGlzIGluIHR3byA4Yml0IHJlZ2lzdGVycyAqLwotCXJ4bGVuID0gcGFja2V0X2xlbmd0aDE7Ci0JcnhsZW4gPSAoKChyeGxlbiA8PCA4KSAmIDB4ZmYwMCkgKyBwYWNrZXRfbGVuZ3RoMCk7Ci0JcnhsZW4gLT0gNDsKLQotCWlmIChyeGxlbiA+IFBLVFNJWkVfQUxJR04gKyBQS1RBTElHTikKLQkJcHJpbnRmICgicGFja2V0IHRvbyBiaWchXG4iKTsKLQotCS8qUmVjZWl2ZSB0aGUgcGFja2V0ICovCi0JcHV0X3JlZyAoUlRMODAxOV9SRU1PVEVTVEFSVEFERFJFU1MwLCAweDA0KTsKLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URVNUQVJUQUREUkVTUzEsIGdldF9yZWcgKFJUTDgwMTlfQk9VTkRBUlkpKTsKLQotCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMCwgKHJ4bGVuICYgMHhmZikpOwotCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMSwgKChyeGxlbiA+PiA4KSAmIDB4ZmYpKTsKLQotCi0JcHV0X3JlZyAoUlRMODAxOV9DT01NQU5ELCBSVEw4MDE5X1JFTU9URURNQVJEKTsKLQotCWZvciAoYWRkciA9ICh1bnNpZ25lZCBjaGFyICopIE5ldFJ4UGFja2V0c1swXSwgaSA9IHJ4bGVuOyBpID4gMDsgaS0tKQotCQkqYWRkcisrID0gZ2V0X3JlZyAoUlRMODAxOV9ETUFfREFUQSk7Ci0JLyogUGFzcyB0aGUgcGFja2V0IHVwIHRvIHRoZSBwcm90b2NvbCBsYXllcnMuICovCi0JTmV0UmVjZWl2ZSAoTmV0UnhQYWNrZXRzWzBdLCByeGxlbik7Ci0KLQl3aGlsZSAoIShnZXRfcmVnIChSVEw4MDE5X0lOVEVSUlVQVFNUQVRVUykpICYgMHg0MCk7CS8qIHdhaXQgZm9yIHRoZSBvcC4gKi8KLQotCS8qCi0JICogVG8gdGVzdCB3aGV0aGVyIHRoZSBwYWNrZXRzIGFyZSBhbGwgcmVjZWl2ZWQsZ2V0IHRoZQotCSAqIGxvY2F0aW9uIG9mIGN1cnJlbnQgcG9pbnQKLQkgKi8KLQlwdXRfcmVnIChSVEw4MDE5X0NPTU1BTkQsIFJUTDgwMTlfUEFHRTEpOwotCWN1cnJlbnRfcG9pbnQgPSBnZXRfcmVnIChSVEw4MDE5X0NVUlJFTlQpOwotCXB1dF9yZWcgKFJUTDgwMTlfQ09NTUFORCwgUlRMODAxOV9QQUdFMCk7Ci0JcHV0X3JlZyAoUlRMODAxOV9CT1VOREFSWSwgbmV4dF9wYWNrZXRfcG9pbnRlcik7Ci0JcmV0dXJuIGN1cnJlbnRfcG9pbnQ7Ci19Ci0KLS8qIEdldCBhIGRhdGEgYmxvY2sgdmlhIEV0aGVybmV0ICovCi1leHRlcm4gaW50IGV0aF9yeCAodm9pZCkKLXsKLQl1bnNpZ25lZCBjaGFyIHRlbXAsIGN1cnJlbnRfcG9pbnQ7Ci0KLQlwdXRfcmVnIChSVEw4MDE5X0NPTU1BTkQsIFJUTDgwMTlfUEFHRTApOwotCi0Jd2hpbGUgKDEpIHsKLQkJdGVtcCA9IGdldF9yZWcgKFJUTDgwMTlfSU5URVJSVVBUU1RBVFVTKTsKLQotCQlpZiAodGVtcCAmIDB4OTApIHsKLQkJCS8qb3ZlcmZsb3cgKi8KLQkJCXB1dF9yZWcgKFJUTDgwMTlfQ09NTUFORCwgUlRMODAxOV9QQUdFMFNUT1ApOwotCQkJdWRlbGF5ICgyMDAwKTsKLQkJCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMCwgMCk7Ci0JCQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URUJZVEVDT1VOVDEsIDApOwotCQkJcHV0X3JlZyAoUlRMODAxOV9UUkFOU01JVENPTkZJR1VSQVRJT04sIDIpOwotCQkJZG8gewotCQkJCWN1cnJlbnRfcG9pbnQgPSBuaWNfdG9fcGMgKCk7Ci0JCQl9IHdoaWxlIChnZXRfcmVnIChSVEw4MDE5X0JPVU5EQVJZKSAhPSBjdXJyZW50X3BvaW50KTsKLQotCQkJcHV0X3JlZyAoUlRMODAxOV9UUkFOU01JVENPTkZJR1VSQVRJT04sIDB4ZTApOwotCQl9Ci0KLQkJaWYgKHRlbXAgJiAweDEpIHsKLQkJCS8qcGFja2V0IHJlY2VpdmVkICovCi0JCQlkbyB7Ci0JCQkJcHV0X3JlZyAoUlRMODAxOV9JTlRFUlJVUFRTVEFUVVMsIDB4MDEpOwotCQkJCWN1cnJlbnRfcG9pbnQgPSBuaWNfdG9fcGMgKCk7Ci0JCQl9IHdoaWxlIChnZXRfcmVnIChSVEw4MDE5X0JPVU5EQVJZKSAhPSBjdXJyZW50X3BvaW50KTsKLQkJfQotCi0JCWlmICghKHRlbXAgJiAweDEpKQotCQkJcmV0dXJuIDA7Ci0JCS8qIGRvbmUgYW5kIGV4aXQuICovCi0JfQotfQotCi0vKiBTZW5kIGEgZGF0YSBibG9jayB2aWEgRXRoZXJuZXQuICovCi1leHRlcm4gaW50IGV0aF9zZW5kICh2b2xhdGlsZSB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcDsKLQl1bnNpZ25lZCBpbnQgcG47Ci0KLQlwbiA9IGxlbmd0aDsKLQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgcGFja2V0OwotCi0Jd2hpbGUgKGdldF9yZWcgKFJUTDgwMTlfQ09NTUFORCkgPT0gUlRMODAxOV9UUkFOU01JVCk7Ci0KLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URVNUQVJUQUREUkVTUzAsIDApOwotCXB1dF9yZWcgKFJUTDgwMTlfUkVNT1RFU1RBUlRBRERSRVNTMSwgUlRMODAxOV9UUFNUQVJUKTsKLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URUJZVEVDT1VOVDAsIChwbiAmIDB4ZmYpKTsKLQlwdXRfcmVnIChSVEw4MDE5X1JFTU9URUJZVEVDT1VOVDEsICgocG4gPj4gOCkgJiAweGZmKSk7Ci0KLQlwdXRfcmVnIChSVEw4MDE5X0NPTU1BTkQsIFJUTDgwMTlfUkVNT1RFRE1BV1IpOwotCXdoaWxlIChwbiA+IDApIHsKLQkJcHV0X3JlZyAoUlRMODAxOV9ETUFfREFUQSwgKnArKyk7Ci0JCXBuLS07Ci0JfQotCi0JcG4gPSBsZW5ndGg7Ci0KLQl3aGlsZSAocG4gPCA2MCkgewkvKlBhZGRpbmcgKi8KLQkJcHV0X3JlZyAoUlRMODAxOV9ETUFfREFUQSwgMCk7Ci0JCXBuKys7Ci0JfQotCi0Jd2hpbGUgKCEoZ2V0X3JlZyAoUlRMODAxOV9JTlRFUlJVUFRTVEFUVVMpKSAmIDB4NDApOwotCi0JcHV0X3JlZyAoUlRMODAxOV9JTlRFUlJVUFRTVEFUVVMsIDB4NDApOwotCXB1dF9yZWcgKFJUTDgwMTlfVFJBTlNNSVRQQUdFLCBSVEw4MDE5X1RQU1RBUlQpOwotCXB1dF9yZWcgKFJUTDgwMTlfVFJBTlNNSVRCWVRFQ09VTlQwLCAocG4gJiAweGZmKSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9UUkFOU01JVEJZVEVDT1VOVDEsICgocG4gPj4gOCAmIDB4ZmYpKSk7Ci0JcHV0X3JlZyAoUlRMODAxOV9DT01NQU5ELCBSVEw4MDE5X1RSQU5TTUlUKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcnRsODAxOS5oIGIvZHJpdmVycy9uZXQvcnRsODAxOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTUxNjNjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3J0bDgwMTkuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogUmVhbHRlayA4MDE5QVMgRXRoZXJuZXQKLSAqIChDKSBDb3B5cmlnaHQgMjAwMi0yMDAzCi0gKiBYdWUgTGlnb25nKGxneHVlQGhvdG1haWwuY29tKSxXYW5nIEtlaGFvLCBFU0xBQiwgd2h1dC5lZHUuY24KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogVGhpcyBjb2RlIHdvcmtzIGluIDhiaXQgbW9kZS4KLSAqIElmIHlvdSBuZWVkIHRvIHdvcmsgaW4gMTZiaXQgbW9kZSwgUExTIGNoYW5nZSBpdCEKLSAqLwotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfRFJJVkVSX1JUTDgwMTkKLQotI2RlZmluZSBSVEw4MDE5X1JFR18wMAkJCShSVEw4MDE5X0JBU0UgKyAweDAwKQotI2RlZmluZQlSVEw4MDE5X1JFR18wMQkJCShSVEw4MDE5X0JBU0UgKyAweDAxKQotI2RlZmluZQlSVEw4MDE5X1JFR18wMgkJCShSVEw4MDE5X0JBU0UgKyAweDAyKQotI2RlZmluZQlSVEw4MDE5X1JFR18wMwkJCShSVEw4MDE5X0JBU0UgKyAweDAzKQotI2RlZmluZQlSVEw4MDE5X1JFR18wNAkJCShSVEw4MDE5X0JBU0UgKyAweDA0KQotI2RlZmluZQlSVEw4MDE5X1JFR18wNQkJCShSVEw4MDE5X0JBU0UgKyAweDA1KQotI2RlZmluZQlSVEw4MDE5X1JFR18wNgkJCShSVEw4MDE5X0JBU0UgKyAweDA2KQotI2RlZmluZQlSVEw4MDE5X1JFR18wNwkJCShSVEw4MDE5X0JBU0UgKyAweDA3KQotI2RlZmluZQlSVEw4MDE5X1JFR18wOAkJCShSVEw4MDE5X0JBU0UgKyAweDA4KQotI2RlZmluZQlSVEw4MDE5X1JFR18wOQkJCShSVEw4MDE5X0JBU0UgKyAweDA5KQotI2RlZmluZQlSVEw4MDE5X1JFR18wYQkJCShSVEw4MDE5X0JBU0UgKyAweDBhKQotI2RlZmluZQlSVEw4MDE5X1JFR18wYgkJCShSVEw4MDE5X0JBU0UgKyAweDBiKQotI2RlZmluZQlSVEw4MDE5X1JFR18wYwkJCShSVEw4MDE5X0JBU0UgKyAweDBjKQotI2RlZmluZQlSVEw4MDE5X1JFR18wZAkJCShSVEw4MDE5X0JBU0UgKyAweDBkKQotI2RlZmluZQlSVEw4MDE5X1JFR18wZQkJCShSVEw4MDE5X0JBU0UgKyAweDBlKQotI2RlZmluZQlSVEw4MDE5X1JFR18wZgkJCShSVEw4MDE5X0JBU0UgKyAweDBmKQotI2RlZmluZQlSVEw4MDE5X1JFR18xMAkJCShSVEw4MDE5X0JBU0UgKyAweDEwKQotI2RlZmluZQlSVEw4MDE5X1JFR18xZgkJCShSVEw4MDE5X0JBU0UgKyAweDFmKQotCi0jZGVmaW5lIFJUTDgwMTlfQ09NTUFORAkJCVJUTDgwMTlfUkVHXzAwCi0jZGVmaW5lIFJUTDgwMTlfUEFHRVNUQVJUCQlSVEw4MDE5X1JFR18wMQotI2RlZmluZSBSVEw4MDE5X1BBR0VTVE9QCQlSVEw4MDE5X1JFR18wMgotI2RlZmluZSBSVEw4MDE5X0JPVU5EQVJZCQlSVEw4MDE5X1JFR18wMwotI2RlZmluZSBSVEw4MDE5X1RSQU5TTUlUU1RBVFVTCQlSVEw4MDE5X1JFR18wNAotI2RlZmluZSBSVEw4MDE5X1RSQU5TTUlUUEFHRQkJUlRMODAxOV9SRUdfMDQKLSNkZWZpbmUgUlRMODAxOV9UUkFOU01JVEJZVEVDT1VOVDAJUlRMODAxOV9SRUdfMDUKLSNkZWZpbmUgUlRMODAxOV9OQ1IJCQlSVEw4MDE5X1JFR18wNQotI2RlZmluZSBSVEw4MDE5X1RSQU5TTUlUQllURUNPVU5UMQlSVEw4MDE5X1JFR18wNgotI2RlZmluZSBSVEw4MDE5X0lOVEVSUlVQVFNUQVRVUwkJUlRMODAxOV9SRUdfMDcKLSNkZWZpbmUgUlRMODAxOV9DVVJSRU5UCQkJUlRMODAxOV9SRUdfMDcKLSNkZWZpbmUgUlRMODAxOV9SRU1PVEVTVEFSVEFERFJFU1MwCVJUTDgwMTlfUkVHXzA4Ci0jZGVmaW5lIFJUTDgwMTlfQ1JETUEwCQkJUlRMODAxOV9SRUdfMDgKLSNkZWZpbmUgUlRMODAxOV9SRU1PVEVTVEFSVEFERFJFU1MxCVJUTDgwMTlfUkVHXzA5Ci0jZGVmaW5lIFJUTDgwMTlfQ1JETUExCQkJUlRMODAxOV9SRUdfMDkKLSNkZWZpbmUgUlRMODAxOV9SRU1PVEVCWVRFQ09VTlQwCVJUTDgwMTlfUkVHXzBhCi0jZGVmaW5lIFJUTDgwMTlfUkVNT1RFQllURUNPVU5UMQlSVEw4MDE5X1JFR18wYgotI2RlZmluZSBSVEw4MDE5X1JFQ0VJVkVTVEFUVVMJCVJUTDgwMTlfUkVHXzBjCi0jZGVmaW5lIFJUTDgwMTlfUkVDRUlWRUNPTkZJR1VSQVRJT04JUlRMODAxOV9SRUdfMGMKLSNkZWZpbmUgUlRMODAxOV9UUkFOU01JVENPTkZJR1VSQVRJT04JUlRMODAxOV9SRUdfMGQKLSNkZWZpbmUgUlRMODAxOV9GQUVfVEFMTFkJCVJUTDgwMTlfUkVHXzBkCi0jZGVmaW5lIFJUTDgwMTlfREFUQUNPTkZJR1VSQVRJT04JUlRMODAxOV9SRUdfMGUKLSNkZWZpbmUgUlRMODAxOV9DUkNfVEFMTFkJCVJUTDgwMTlfUkVHXzBlCi0jZGVmaW5lIFJUTDgwMTlfSU5URVJSVVBUTUFTSwkJUlRMODAxOV9SRUdfMGYKLSNkZWZpbmUgUlRMODAxOV9NSVNTX1BLVF9UQUxMWQkJUlRMODAxOV9SRUdfMGYKLSNkZWZpbmUgUlRMODAxOV9QSFlTSUNBTEFERFJFU1MwCVJUTDgwMTlfUkVHXzAxCi0jZGVmaW5lCVJUTDgwMTlfUEhZU0lDQUxBRERSRVNTMQlSVEw4MDE5X1JFR18wMgotI2RlZmluZSBSVEw4MDE5X1BIWVNJQ0FMQUREUkVTUzIJUlRMODAxOV9SRUdfMDMKLSNkZWZpbmUgUlRMODAxOV9QSFlTSUNBTEFERFJFU1MzCVJUTDgwMTlfUkVHXzA0Ci0jZGVmaW5lIFJUTDgwMTlfUEhZU0lDQUxBRERSRVNTNAlSVEw4MDE5X1JFR18wNQotI2RlZmluZSBSVEw4MDE5X1BIWVNJQ0FMQUREUkVTUzUJUlRMODAxOV9SRUdfMDYKLSNkZWZpbmUgUlRMODAxOV9NVUxUSUFERFJFU1MwCQlSVEw4MDE5X1JFR18wOAotI2RlZmluZSBSVEw4MDE5X01VTFRJQUREUkVTUzEJCVJUTDgwMTlfUkVHXzA5Ci0jZGVmaW5lIFJUTDgwMTlfTVVMVElBRERSRVNTMgkJUlRMODAxOV9SRUdfMGEKLSNkZWZpbmUgUlRMODAxOV9NVUxUSUFERFJFU1MzCQlSVEw4MDE5X1JFR18wYgotI2RlZmluZSBSVEw4MDE5X01VTFRJQUREUkVTUzQJCVJUTDgwMTlfUkVHXzBjCi0jZGVmaW5lIFJUTDgwMTlfTVVMVElBRERSRVNTNQkJUlRMODAxOV9SRUdfMGQKLSNkZWZpbmUgUlRMODAxOV9NVUxUSUFERFJFU1M2CQlSVEw4MDE5X1JFR18wZQotI2RlZmluZSBSVEw4MDE5X01VTFRJQUREUkVTUzcJCVJUTDgwMTlfUkVHXzBmCi0jZGVmaW5lIFJUTDgwMTlfRE1BX0RBVEEJCVJUTDgwMTlfUkVHXzEwCi0jZGVmaW5lIFJUTDgwMTlfUkVTRVQJCQlSVEw4MDE5X1JFR18xZgotCi0jZGVmaW5lCVJUTDgwMTlfUEFHRTAJCQkweDIyCi0jZGVmaW5lCVJUTDgwMTlfUEFHRTEJCQkweDYyCi0jZGVmaW5lCVJUTDgwMTlfUEFHRTBETUFXUklURQkJMHgxMgotI2RlZmluZQlSVEw4MDE5X1BBR0UyRE1BV1JJVEUJCTB4OTIKLSNkZWZpbmUJUlRMODAxOV9SRU1PVEVETUFXUgkJMHgxMgotI2RlZmluZQlSVEw4MDE5X1JFTU9URURNQVJECQkweDBBCi0jZGVmaW5lCVJUTDgwMTlfQUJPUlRETUFXUgkJMHgzMgotI2RlZmluZQlSVEw4MDE5X0FCT1JURE1BUkQJCTB4MkEKLSNkZWZpbmUJUlRMODAxOV9QQUdFMFNUT1AJCTB4MjEKLSNkZWZpbmUJUlRMODAxOV9QQUdFMVNUT1AJCTB4NjEKLSNkZWZpbmUJUlRMODAxOV9UUkFOU01JVAkJMHgyNgotI2RlZmluZQlSVEw4MDE5X1RYSU5QUk9HUkVTUwkJMHgwNAotI2RlZmluZQlSVEw4MDE5X1NFTkQJCQkweDFBCi0KLSNkZWZpbmUgUlRMODAxOV9QU1RBUlQJCQkweDRjCi0jZGVmaW5lIFJUTDgwMTlfUFNUT1AJCQkweDgwCi0jZGVmaW5lIFJUTDgwMTlfVFBTVEFSVAkJCTB4NDAKLQotI2VuZGlmIC8qZW5kIG9mIENPTkZJR19EUklWRVJfUlRMODAxOSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKaW5kZXggOGNlMDhhOS4uYTI5MDA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApAQCAtNDcxLDggKzQ3MSwxMSBAQAogewogCWludCB0aW1lb3V0OwogCi0JLyogVGFrZSBvdXQgb2YgUE0gc2V0dGluZyBmaXJzdCAqLwotCWlmIChzbWM5MTF4X3JlZ19yZWFkKGRldiwgUE1UX0NUUkwpICYgUE1UX0NUUkxfUkVBRFkpIHsKKwkvKgorCSAqICBUYWtlIG91dCBvZiBQTSBzZXR0aW5nIGZpcnN0CisJICogIERldmljZSBpcyBhbHJlYWR5IHdha2UgdXAgaWYgUE1UX0NUUkxfUkVBRFkgYml0IGlzIHNldAorCSAqLworCWlmICgoc21jOTExeF9yZWdfcmVhZChkZXYsIFBNVF9DVFJMKSAmIFBNVF9DVFJMX1JFQURZKSA9PSAwKSB7CiAJCS8qIFdyaXRlIHRvIHRoZSBieXRldGVzdCB3aWxsIHRha2Ugb3V0IG9mIHBvd2VyZG93biAqLwogCQlzbWM5MTF4X3JlZ193cml0ZShkZXYsIEJZVEVfVEVTVCwgMHgwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHNlYy5jIGIvZHJpdmVycy9uZXQvdHNlYy5jCmluZGV4IDc4ZmZjOTUuLjE2MGJjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RzZWMuYworKysgYi9kcml2ZXJzL25ldC90c2VjLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDx0c2VjLmg+CiAjaW5jbHVkZSA8ZnNsX21kaW8uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCkBAIC00Myw2ICs0NCw5IEBACiAjZXJyb3IgInJ0eCBtdXN0IGJlIDY0LWJpdCBhbGlnbmVkIgogI2VuZGlmCiAKK3N0YXRpYyBpbnQgdHNlY19zZW5kKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsCisJdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKTsKKwogLyogRGVmYXVsdCBpbml0aWFsaXphdGlvbnMgZm9yIFRTRUMgY29udHJvbGxlcnMuICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHNlY19pbmZvX3N0cnVjdCB0c2VjX2luZm9bXSA9IHsKQEAgLTIzNiw2ICsyNDAsODcgQEAKIAkJCShwaHlkZXYtPnBvcnQgPT0gUE9SVF9GSUJSRSkgPyAiLCBmaWJlciBtb2RlIiA6ICIiKTsKIH0KIAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CisvKgorICogV2hlbiBNQUNDRkcxW1J4X0VOXSBpcyBlbmFibGVkIGR1cmluZyBzeXN0ZW0gYm9vdCBhcyBwYXJ0CisgKiBvZiB0aGUgZVRTRUMgcG9ydCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwKKyAqIHRoZSBlVFNFQyBSeCBsb2dpYyBtYXkgbm90IGJlIHByb3Blcmx5IGluaXRpYWxpemVkLgorICovCit2b2lkIHJlZHVuZGFudF9pbml0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRzZWNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+cHJpdjsKKwl0c2VjX3QgKnJlZ3MgPSBwcml2LT5yZWdzOworCXVpbnQgdCwgY291bnQgPSAwOworCWludCBmYWlsID0gMTsKKwlzdGF0aWMgY29uc3QgdTggcGt0W10gPSB7CisJCTB4MDAsIDB4MWUsIDB4NGYsIDB4MTIsIDB4Y2IsIDB4MmMsIDB4MDAsIDB4MjUsCisJCTB4NjQsIDB4YmIsIDB4ZDEsIDB4YWIsIDB4MDgsIDB4MDAsIDB4NDUsIDB4MDAsCisJCTB4MDAsIDB4NWMsIDB4ZGQsIDB4MjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsCisJCTB4MWYsIDB4NzEsIDB4MGEsIDB4YzEsIDB4MTQsIDB4MjIsIDB4MGEsIDB4YzEsCisJCTB4MTQsIDB4NmEsIDB4MDgsIDB4MDAsIDB4ZWYsIDB4N2UsIDB4MDIsIDB4MDAsCisJCTB4OTQsIDB4MDUsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsCisJCTB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsCisJCTB4NmYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCisJCTB4NzcsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJCTB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCisJCTB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCisJCTB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsCisJCTB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsCisJCTB4NzEsIDB4NzJ9OworCisJLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KKwlzZXRiaXRzX2JlMzIoJnJlZ3MtPnJjdHJsLCAweDgpOworCS8qIEVuYWJsZSBsb29wYmFjayBtb2RlICovCisJc2V0Yml0c19iZTMyKCZyZWdzLT5tYWNjZmcxLCBNQUNDRkcxX0xPT1BCQUNLKTsKKwkvKiBFbmFibGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgKi8KKwlzZXRiaXRzX2JlMzIoJnJlZ3MtPm1hY2NmZzEsIE1BQ0NGRzFfUlhfRU4gfCBNQUNDRkcxX1RYX0VOKTsKKworCS8qIFRlbGwgdGhlIERNQSBpdCBpcyBjbGVhciB0byBnbyAqLworCXNldGJpdHNfYmUzMigmcmVncy0+ZG1hY3RybCwgRE1BQ1RSTF9JTklUX1NFVFRJTkdTKTsKKwlvdXRfYmUzMigmcmVncy0+dHN0YXQsIFRTVEFUX0NMRUFSX1RIQUxUKTsKKwlvdXRfYmUzMigmcmVncy0+cnN0YXQsIFJTVEFUX0NMRUFSX1JIQUxUKTsKKwljbHJiaXRzX2JlMzIoJnJlZ3MtPmRtYWN0cmwsIERNQUNUUkxfR1JTIHwgRE1BQ1RSTF9HVFMpOworCisJZG8geworCQl0c2VjX3NlbmQoZGV2LCAodm9pZCAqKXBrdCwgc2l6ZW9mKHBrdCkpOworCisJCS8qIFdhaXQgZm9yIGJ1ZmZlciB0byBiZSByZWNlaXZlZCAqLworCQlmb3IgKHQgPSAwOyBydHgucnhiZFtyeElkeF0uc3RhdHVzICYgUlhCRF9FTVBUWTsgdCsrKSB7CisJCQlpZiAodCA+PSAxMCAqIFRPVVRfTE9PUCkgeworCQkJCXByaW50ZigiJXM6IHRzZWM6IHJ4IGVycm9yXG4iLCBkZXYtPm5hbWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFtZW1jbXAocGt0LCAodm9pZCAqKU5ldFJ4UGFja2V0c1tyeElkeF0sIHNpemVvZihwa3QpKSkKKwkJCWZhaWwgPSAwOworCisJCXJ0eC5yeGJkW3J4SWR4XS5sZW5ndGggPSAwOworCQlydHgucnhiZFtyeElkeF0uc3RhdHVzID0KKwkJICAgIFJYQkRfRU1QVFkgfCAoKChyeElkeCArIDEpID09IFBLVEJVRlNSWCkgPyBSWEJEX1dSQVAgOiAwKTsKKwkJcnhJZHggPSAocnhJZHggKyAxKSAlIFBLVEJVRlNSWDsKKworCQlpZiAoaW5fYmUzMigmcmVncy0+aWV2ZW50KSAmIElFVkVOVF9CU1kpIHsKKwkJCW91dF9iZTMyKCZyZWdzLT5pZXZlbnQsIElFVkVOVF9CU1kpOworCQkJb3V0X2JlMzIoJnJlZ3MtPnJzdGF0LCBSU1RBVF9DTEVBUl9SSEFMVCk7CisJCX0KKwkJaWYgKGZhaWwpIHsKKwkJCXByaW50ZigibG9vcGJhY2sgcmVjdiBwYWNrZXQgZXJyb3IhXG4iKTsKKwkJCWNscmJpdHNfYmUzMigmcmVncy0+bWFjY2ZnMSwgTUFDQ0ZHMV9SWF9FTik7CisJCQl1ZGVsYXkoMTAwMCk7CisJCQlzZXRiaXRzX2JlMzIoJnJlZ3MtPm1hY2NmZzEsIE1BQ0NGRzFfUlhfRU4pOworCQl9CisJfSB3aGlsZSAoKGNvdW50KysgPCA0KSAmJiAoZmFpbCA9PSAxKSk7CisKKwlpZiAoZmFpbCkKKwkJcGFuaWMoImVUU0VDIGluaXQgZmFpbCFcbiIpOworCS8qIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworCWNscmJpdHNfYmUzMigmcmVncy0+cmN0cmwsIDB4OCk7CisJLyogRGlzYWJsZSBsb29wYmFjayBtb2RlICovCisJY2xyYml0c19iZTMyKCZyZWdzLT5tYWNjZmcxLCBNQUNDRkcxX0xPT1BCQUNLKTsKK30KKyNlbmRpZgorCiAvKiBTZXQgdXAgdGhlIGJ1ZmZlcnMgYW5kIHRoZWlyIGRlc2NyaXB0b3JzLCBhbmQgYnJpbmcgdXAgdGhlCiAgKiBpbnRlcmZhY2UKICAqLwpAQCAtMjQ4LDYgKzMzMyw5IEBACiAJLyogcmVzZXQgdGhlIGluZGljZXMgdG8gemVybyAqLwogCXJ4SWR4ID0gMDsKIAl0eElkeCA9IDA7CisjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9OTUdfRVRTRUMxMjkKKwl1aW50IHN2cjsKKyNlbmRpZgogCiAJLyogUG9pbnQgdG8gdGhlIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwogCW91dF9iZTMyKCZyZWdzLT50YmFzZSwgKHVuc2lnbmVkIGludCkoJnJ0eC50eGJkW3R4SWR4XSkpOwpAQCAtMjY5LDYgKzM1NywxMSBAQAogCX0KIAlydHgudHhiZFtUWF9CVUZfQ05UIC0gMV0uc3RhdHVzIHw9IFRYQkRfV1JBUDsKIAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CisJc3ZyID0gZ2V0X3N2cigpOworCWlmICgoU1ZSX01BSihzdnIpID09IDEpIHx8IElTX1NWUl9SRVYoc3ZyLCAyLCAwKSkKKwkJcmVkdW5kYW50X2luaXQoZGV2KTsKKyNlbmRpZgogCS8qIEVuYWJsZSBUcmFuc21pdCBhbmQgUmVjZWl2ZSAqLwogCXNldGJpdHNfYmUzMigmcmVncy0+bWFjY2ZnMSwgTUFDQ0ZHMV9SWF9FTiB8IE1BQ0NGRzFfVFhfRU4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3FlL3VlYy5jIGIvZHJpdmVycy9xZS91ZWMuYwppbmRleCAxZWNiMTM3Li4zZTQ2ZTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3FlL3VlYy5jCisrKyBiL2RyaXZlcnMvcWUvdWVjLmMKQEAgLTI2NCwxMyArMjY0LDEwIEBACiAKIHN0YXRpYyBpbnQgdWVjX3N0b3AodWVjX3ByaXZhdGVfdCAqdWVjLCBjb21tX2Rpcl9lIG1vZGUpCiB7Ci0JdWNjX2Zhc3RfcHJpdmF0ZV90CSp1Y2NmOwotCiAJaWYgKCF1ZWMgfHwgIXVlYy0+dWNjZikgewogCQlwcmludGYoIiVzOiBObyBoYW5kbGUgcGFzc2VkLlxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXVjY2YgPSB1ZWMtPnVjY2Y7CiAKIAkvKiBjaGVjayBpZiB0aGUgVUNDIG51bWJlciBpcyBpbiByYW5nZS4gKi8KIAlpZiAodWVjLT51ZWNfaW5mby0+dWZfaW5mby51Y2NfbnVtID49IFVDQ19NQVhfTlVNKSB7CkBAIC0zMjUsNyArMzIyLDYgQEAKIAkJcGh5X2ludGVyZmFjZV90IGlmX21vZGUsIGludCBzcGVlZCkKIHsKIAlwaHlfaW50ZXJmYWNlX3QJCWVuZXRfaWZfbW9kZTsKLQl1ZWNfaW5mb190CQkqdWVjX2luZm87CiAJdWVjX3QJCQkqdWVjX3JlZ3M7CiAJdTMyCQkJdXBzbXI7CiAJdTMyCQkJbWFjY2ZnMjsKQEAgLTMzNSw3ICszMzEsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl1ZWNfaW5mbyA9IHVlYy0+dWVjX2luZm87CiAJdWVjX3JlZ3MgPSB1ZWMtPnVlY19yZWdzOwogCWVuZXRfaWZfbW9kZSA9IGlmX21vZGU7CiAKQEAgLTUxNiwxMiArNTExLDEwIEBACiBzdGF0aWMgdm9pZCBhZGp1c3RfbGluayhzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KQogewogCXVlY19wcml2YXRlX3QJCSp1ZWMgPSAodWVjX3ByaXZhdGVfdCAqKWRldi0+cHJpdjsKLQl1ZWNfdAkJCSp1ZWNfcmVnczsKIAlzdHJ1Y3QgdWVjX21paV9pbmZvCSptaWlfaW5mbyA9IHVlYy0+bWlpX2luZm87CiAKIAlleHRlcm4gdm9pZCBjaGFuZ2VfcGh5X2ludGVyZmFjZV9tb2RlKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsCiAJCQkJIHBoeV9pbnRlcmZhY2VfdCBtb2RlLCBpbnQgc3BlZWQpOwotCXVlY19yZWdzID0gdWVjLT51ZWNfcmVnczsKIAogCWlmIChtaWlfaW5mby0+bGluaykgewogCQkvKiBOb3cgd2UgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGluIGZ1bGwgZHVwbGV4IG1vZGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IGExNmY1OTAuLmZhZjRmY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC01Nyw2ICs1Nyw3IEBACiBDT0JKUy0kKENPTkZJR19SVENfTVBDNTIwMCkgKz0gbXBjNXh4eC5vCiBDT0JKUy0kKENPTkZJR19SVENfTVBDOHh4KSArPSBtcGM4eHgubwogQ09CSlMtJChDT05GSUdfUlRDX01WKSArPSBtdnJ0Yy5vCitDT0JKUy0kKENPTkZJR19SVENfTVhTKSArPSBteHNydGMubwogQ09CSlMtJChDT05GSUdfUlRDX1BDRjg1NjMpICs9IHBjZjg1NjMubwogQ09CSlMtJChDT05GSUdfUlRDX1BMMDMxKSArPSBwbDAzMS5vCiBDT0JKUy0kKENPTkZJR19SVENfUFQ3QzQzMzgpICs9IHB0N2M0MzM4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL214c3J0Yy5jIGIvZHJpdmVycy9ydGMvbXhzcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlYjFhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL214c3J0Yy5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFJUQyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHJ0Yy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisKKyNkZWZpbmUJTVhTX1JUQ19NQVhfVElNRU9VVAkxMDAwMDAwCisKKy8qIFNldCB0aW1lIGluIHNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAqLworaW50IG14c19ydGNfc2V0X3RpbWUodWludDMyX3Qgc2VjcykKK3sKKwlzdHJ1Y3QgbXgyOF9ydGNfcmVncyAqcnRjX3JlZ3MgPSAoc3RydWN0IG14MjhfcnRjX3JlZ3MgKilNWFNfUlRDX0JBU0U7CisJaW50IHJldDsKKworCXdyaXRlbChzZWNzLCAmcnRjX3JlZ3MtPmh3X3J0Y19zZWNvbmRzKTsKKworCS8qCisJICogVGhlIDB4ODAgaGVyZSBtZWFucyBzZWNvbmRzIHdlcmUgY29waWVkIHRvIGFuYWxvZy4gVGhpcyBpbmZvcm1hdGlvbgorCSAqIGlzIHRha2VuIGZyb20gdGhlIGxpbnV4IGtlcm5lbCBkcml2ZXIgZm9yIHRoZSBTVE1QMzd4eCBSVEMgc2luY2UKKwkgKiBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgbWVudGlvbiBpdC4KKwkgKi8KKwlyZXQgPSBteDI4X3dhaXRfbWFza19jbHIoJnJ0Y19yZWdzLT5od19ydGNfc3RhdF9yZWcsCisJCTB4ODAgPDwgUlRDX1NUQVRfU1RBTEVfUkVHU19PRkZTRVQsIE1YU19SVENfTUFYX1RJTUVPVVQpOworCisJaWYgKHJldCkKKwkJcHJpbnRmKCJNWFMgUlRDOiBUaW1lb3V0IHdhaXRpbmcgZm9yIHVwZGF0ZVxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcnRjX2dldChzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJc3RydWN0IG14MjhfcnRjX3JlZ3MgKnJ0Y19yZWdzID0gKHN0cnVjdCBteDI4X3J0Y19yZWdzICopTVhTX1JUQ19CQVNFOworCXVpbnQzMl90IHNlY3M7CisKKwlzZWNzID0gcmVhZGwoJnJ0Y19yZWdzLT5od19ydGNfc2Vjb25kcyk7CisJdG9fdG0oc2VjcywgdGltZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0Y19zZXQoc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXVpbnQzMl90IHNlY3M7CisKKwlzZWNzID0gbWt0aW1lKHRpbWUtPnRtX3llYXIsIHRpbWUtPnRtX21vbiwgdGltZS0+dG1fbWRheSwKKwkJdGltZS0+dG1faG91ciwgdGltZS0+dG1fbWluLCB0aW1lLT50bV9zZWMpOworCisJcmV0dXJuIG14c19ydGNfc2V0X3RpbWUoc2Vjcyk7Cit9CisKK3ZvaWQgcnRjX3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IG14MjhfcnRjX3JlZ3MgKnJ0Y19yZWdzID0gKHN0cnVjdCBteDI4X3J0Y19yZWdzICopTVhTX1JUQ19CQVNFOworCWludCByZXQ7CisKKwkvKiBTZXQgdGltZSB0byAxOTcwLTAxLTAxICovCisJbXhzX3J0Y19zZXRfdGltZSgwKTsKKworCS8qIFJlc2V0IHRoZSBSVEMgYmxvY2sgKi8KKwlyZXQgPSBteDI4X3Jlc2V0X2Jsb2NrKCZydGNfcmVncy0+aHdfcnRjX2N0cmxfcmVnKTsKKwlpZiAocmV0KQorCQlwcmludGYoIk1YUyBSVEM6IEJsb2NrIHJlc2V0IHRpbWVvdXRcbiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvczNjMjR4MF9ydGMuYyBiL2RyaXZlcnMvcnRjL3MzYzI0eDBfcnRjLmMKaW5kZXggOTY2NzkzOS4uYzE2ZmYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvczNjMjR4MF9ydGMuYworKysgYi9kcml2ZXJzL3J0Yy9zM2MyNHgwX3J0Yy5jCkBAIC0zNCw4ICszNCw3IEBACiAKICNpbmNsdWRlIDxydGMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLQotLyojZGVmaW5lCURFQlVHKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiB0eXBlZGVmIGVudW0gewogCVJUQ19FTkFCTEUsCkBAIC02NCw3ICs2Myw4IEBACiB7CiAJc3RydWN0IHMzYzI0eDBfcnRjICpydGMgPSBzM2MyNHgwX2dldF9iYXNlX3J0YygpOwogCXVjaGFyIHNlYywgbWluLCBob3VyLCBtZGF5LCB3ZGF5LCBtb24sIHllYXI7Ci0JdWNoYXIgYV9zZWMsIGFfbWluLCBhX2hvdXIsIGFfZGF0ZSwgYV9tb24sIGFfeWVhciwgYV9hcm1lZDsKKwlfX21heWJlX3VudXNlZCB1Y2hhciBhX3NlYywgYV9taW4sIGFfaG91ciwgYV9kYXRlLAorCQkJICAgICBhX21vbiwgYV95ZWFyLCBhX2FybWVkOwogCiAJLyogZW5hYmxlIGFjY2VzcyB0byBSVEMgcmVnaXN0ZXJzICovCiAJU2V0UlRDX0FjY2VzcyhSVENfRU5BQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9weGEuYwppbmRleCA2ODQ2OWE0Li44NGJiMTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfcHhhLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3B4YS5jCkBAIC0xLDQgKzEsNiBAQAogLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPHdkQGRlbnguZGU+CiAgKgpAQCAtMzIsMTQ4ICszNCwxNjEgQEAKICNpbmNsdWRlIDx3YXRjaGRvZy5oPgogI2luY2x1ZGUgPHNlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy11YXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi0jZGVmaW5lIEZGVUFSVF9JTkRFWAkwCi0jZGVmaW5lIEJUVUFSVF9JTkRFWAkxCi0jZGVmaW5lIFNUVUFSVF9JTkRFWAkyCisvKgorICogVGhlIG51bWJlcmluZyBzY2hlbWUgZGlmZmVycyBoZXJlIGZvciBQWEEyNXgsIFBYQTI3eCBhbmQgUFhBM3h4IHNvIHdlIGNhbgorICogZWFzaWx5IGhhbmRsZSBlbmFibGluZyBvZiBjbG9jay4KKyAqLworI2lmZGVmCUNPTkZJR19DUFVfTU9OQUhBTlMKKyNkZWZpbmUJVUFSVF9DTEtfQkFTRQlDS0VOQV8yMV9CVFVBUlQKKyNkZWZpbmUJVUFSVF9DTEtfUkVHCUNLRU5BCisjZGVmaW5lCUJUVUFSVF9JTkRFWAkwCisjZGVmaW5lCUZGVUFSVF9JTkRFWAkxCisjZGVmaW5lCVNUVUFSVF9JTkRFWAkyCisjZWxpZglDT05GSUdfUFhBMjUwCisjZGVmaW5lCVVBUlRfQ0xLX0JBU0UJKDEgPDwgNCkJLyogSFdVQVJUICovCisjZGVmaW5lCVVBUlRfQ0xLX1JFRwlDS0VOCisjZGVmaW5lCUhXVUFSVF9JTkRFWAkwCisjZGVmaW5lCVNUVUFSVF9JTkRFWAkxCisjZGVmaW5lCUZGVUFSVF9JTkRFWAkyCisjZGVmaW5lCUJUVUFSVF9JTkRFWAkzCisjZWxzZQkvKiBQWEEyN3ggKi8KKyNkZWZpbmUJVUFSVF9DTEtfQkFTRQlDS0VONV9TVFVBUlQKKyNkZWZpbmUJVUFSVF9DTEtfUkVHCUNLRU4KKyNkZWZpbmUJU1RVQVJUX0lOREVYCTAKKyNkZWZpbmUJRkZVQVJUX0lOREVYCTEKKyNkZWZpbmUJQlRVQVJUX0lOREVYCTIKKyNlbmRpZgorCisvKgorICogT25seSBQWEEyNTAgaGFzIEhXVUFSVCwgdG8gYXZvaWQgcG9sdXRpbmcgdGhlIGNvZGUgd2l0aCBtb3JlIG1hY3JvcywKKyAqIGFydGlmaWNpYWxseSBpbnRyb2R1Y2UgdGhpcy4KKyAqLworI2lmbmRlZglDT05GSUdfUFhBMjUwCisjZGVmaW5lCUhXVUFSVF9JTkRFWAkweGZmCisjZW5kaWYKIAogI2lmbmRlZiBDT05GSUdfU0VSSUFMX01VTFRJCi0jaWYgZGVmaW5lZCAoQ09ORklHX0ZGVUFSVCkKKyNpZiBkZWZpbmVkKENPTkZJR19GRlVBUlQpCiAjZGVmaW5lIFVBUlRfSU5ERVgJRkZVQVJUX0lOREVYCi0jZWxpZiBkZWZpbmVkIChDT05GSUdfQlRVQVJUKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQlRVQVJUKQogI2RlZmluZSBVQVJUX0lOREVYCUJUVUFSVF9JTkRFWAotI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NUVUFSVCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NUVUFSVCkKICNkZWZpbmUgVUFSVF9JTkRFWAlTVFVBUlRfSU5ERVgKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hXVUFSVCkKKyNkZWZpbmUgVUFSVF9JTkRFWAlIV1VBUlRfSU5ERVgKICNlbHNlCi0jZXJyb3IgIkJhZDogeW91IGRpZG4ndCBjb25maWd1cmUgc2VyaWFsIC4uLiIKKyNlcnJvciAiUGxlYXNlIHNlbGVjdCBDT05GSUdfKEZGfEJUfFNUfEhXKVVBUlQgaW4gYm9hcmQgY29uZmlnIGZpbGUuIgogI2VuZGlmCiAjZW5kaWYKIAotdm9pZCBweGFfc2V0YnJnX2RldiAodW5zaWduZWQgaW50IHVhcnRfaW5kZXgpCit1aW50MzJfdCBweGFfdWFydF9nZXRfYmF1ZF9kaXZpZGVyKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHF1b3QgPSAwOwotCiAJaWYgKGdkLT5iYXVkcmF0ZSA9PSAxMjAwKQotCQlxdW90ID0gNzY4OworCQlyZXR1cm4gNzY4OwogCWVsc2UgaWYgKGdkLT5iYXVkcmF0ZSA9PSA5NjAwKQotCQlxdW90ID0gOTY7CisJCXJldHVybiA5NjsKIAllbHNlIGlmIChnZC0+YmF1ZHJhdGUgPT0gMTkyMDApCi0JCXF1b3QgPSA0ODsKKwkJcmV0dXJuIDQ4OwogCWVsc2UgaWYgKGdkLT5iYXVkcmF0ZSA9PSAzODQwMCkKLQkJcXVvdCA9IDI0OworCQlyZXR1cm4gMjQ7CiAJZWxzZSBpZiAoZ2QtPmJhdWRyYXRlID09IDU3NjAwKQotCQlxdW90ID0gMTY7CisJCXJldHVybiAxNjsKIAllbHNlIGlmIChnZC0+YmF1ZHJhdGUgPT0gMTE1MjAwKQotCQlxdW90ID0gODsKLQllbHNlCi0JCWhhbmcgKCk7CisJCXJldHVybiA4OworCWVsc2UJLyogVW5zdXBwb3J0ZWQgYmF1ZHJhdGUgKi8KKwkJcmV0dXJuIDA7Cit9CiAKK3N0cnVjdCBweGFfdWFydF9yZWdzICpweGFfdWFydF9pbmRleF90b19yZWdzKHVpbnQzMl90IHVhcnRfaW5kZXgpCit7CiAJc3dpdGNoICh1YXJ0X2luZGV4KSB7Ci0JCWNhc2UgRkZVQVJUX0lOREVYOgotI2lmZGVmIENPTkZJR19DUFVfTU9OQUhBTlMKLQkJCXdyaXRlbChyZWFkbChDS0VOQSkgfCBDS0VOQV8yMl9GRlVBUlQsIENLRU5BKTsKLSNlbHNlCi0JCQl3cml0ZWwocmVhZGwoQ0tFTikgfCBDS0VONl9GRlVBUlQsIENLRU4pOwotI2VuZGlmIC8qIENPTkZJR19DUFVfTU9OQUhBTlMgKi8KLQotCQkJd3JpdGVsKDAsIEZGSUVSKTsJLyogRGlzYWJsZSBmb3Igbm93ICovCi0JCQl3cml0ZWwoMCwgRkZGQ1IpOwkvKiBObyBmaWZvcyBlbmFibGVkICovCi0KLQkJCS8qIHNldCBiYXVkIHJhdGUgKi8KLQkJCXdyaXRlbChMQ1JfV0xTMCB8IExDUl9XTFMxIHwgTENSX0RMQUIsIEZGTENSKTsKLQkJCXdyaXRlbChxdW90ICYgMHhmZiwgRkZETEwpOwotCQkJd3JpdGVsKHF1b3QgPj4gOCwgRkZETEgpOwotCQkJd3JpdGVsKExDUl9XTFMwIHwgTENSX1dMUzEsIEZGTENSKTsKLQotCQkJd3JpdGVsKElFUl9VVUUsIEZGSUVSKTsJLyogRW5hYmxlIEZGVUFSVCAqLwotCQlicmVhazsKLQotCQljYXNlIEJUVUFSVF9JTkRFWDoKLSNpZmRlZiBDT05GSUdfQ1BVX01PTkFIQU5TCi0JCQl3cml0ZWwocmVhZGwoQ0tFTkEpIHwgQ0tFTkFfMjFfQlRVQVJULCBDS0VOQSk7Ci0jZWxzZQotCQkJd3JpdGVsKHJlYWRsKENLRU4pIHwgQ0tFTjdfQlRVQVJULCBDS0VOKTsKLSNlbmRpZiAvKiAgQ09ORklHX0NQVV9NT05BSEFOUyAqLwotCi0JCQl3cml0ZWwoMCwgQlRJRVIpOwotCQkJd3JpdGVsKDAsIEJURkNSKTsKLQotCQkJLyogc2V0IGJhdWQgcmF0ZSAqLwotCQkJd3JpdGVsKExDUl9ETEFCLCBCVExDUik7Ci0JCQl3cml0ZWwocXVvdCAmIDB4ZmYsIEJURExMKTsKLQkJCXdyaXRlbChxdW90ID4+IDgsIEJURExIKTsKLQkJCXdyaXRlbChMQ1JfV0xTMCB8IExDUl9XTFMxLCBCVExDUik7Ci0KLQkJCXdyaXRlbChJRVJfVVVFLCBCVElFUik7CS8qIEVuYWJsZSBCRlVBUlQgKi8KLQotCQlicmVhazsKLQotCQljYXNlIFNUVUFSVF9JTkRFWDoKLSNpZmRlZiBDT05GSUdfQ1BVX01PTkFIQU5TCi0JCQl3cml0ZWwocmVhZGwoQ0tFTkEpIHwgQ0tFTkFfMjNfU1RVQVJULCBDS0VOQSk7Ci0jZWxzZQotCQkJd3JpdGVsKHJlYWRsKENLRU4pIHwgQ0tFTjVfU1RVQVJULCBDS0VOKTsKLSNlbmRpZiAvKiBDT05GSUdfQ1BVX01PTkFIQU5TICovCi0KLQkJCXdyaXRlbCgwLCBTVElFUik7Ci0JCQl3cml0ZWwoMCwgU1RGQ1IpOwotCi0JCQkvKiBzZXQgYmF1ZCByYXRlICovCi0JCQl3cml0ZWwoTENSX0RMQUIsIFNUTENSKTsKLQkJCXdyaXRlbChxdW90ICYgMHhmZiwgU1RETEwpOwotCQkJd3JpdGVsKHF1b3QgPj4gOCwgU1RETEgpOwotCQkJd3JpdGVsKExDUl9XTFMwIHwgTENSX1dMUzEsIFNUTENSKTsKLQotCQkJd3JpdGVsKElFUl9VVUUsIFNUSUVSKTsJLyogRW5hYmxlIFNUVUFSVCAqLwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWhhbmcoKTsKKwljYXNlIEZGVUFSVF9JTkRFWDogcmV0dXJuIChzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqKUZGVUFSVF9CQVNFOworCWNhc2UgQlRVQVJUX0lOREVYOiByZXR1cm4gKHN0cnVjdCBweGFfdWFydF9yZWdzICopQlRVQVJUX0JBU0U7CisJY2FzZSBTVFVBUlRfSU5ERVg6IHJldHVybiAoc3RydWN0IHB4YV91YXJ0X3JlZ3MgKilTVFVBUlRfQkFTRTsKKwljYXNlIEhXVUFSVF9JTkRFWDogcmV0dXJuIChzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqKUhXVUFSVF9CQVNFOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOwogCX0KIH0KIAordm9pZCBweGFfdWFydF90b2dnbGVfY2xvY2sodWludDMyX3QgdWFydF9pbmRleCwgaW50IGVuYWJsZSkKK3sKKwl1aW50MzJfdCBjbGtfcmVnLCBjbGtfb2Zmc2V0LCByZWc7CisKKwljbGtfcmVnID0gVUFSVF9DTEtfUkVHOworCWNsa19vZmZzZXQgPSBVQVJUX0NMS19CQVNFIDw8IHVhcnRfaW5kZXg7CisKKwlyZWcgPSByZWFkbChjbGtfcmVnKTsKKworCWlmIChlbmFibGUpCisJCXJlZyB8PSBjbGtfb2Zmc2V0OworCWVsc2UKKwkJcmVnICY9IH5jbGtfb2Zmc2V0OworCisJd3JpdGVsKHJlZywgY2xrX3JlZyk7Cit9CisKKy8qCisgKiBFbmFibGUgY2xvY2sgYW5kIHNldCBiYXVkIHJhdGUsIHBhcml0eSBldGMuCisgKi8KK3ZvaWQgcHhhX3NldGJyZ19kZXYodWludDMyX3QgdWFydF9pbmRleCkKK3sKKwl1aW50MzJfdCBkaXZpZGVyID0gMDsKKwlzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqdWFydF9yZWdzOworCisJZGl2aWRlciA9IHB4YV91YXJ0X2dldF9iYXVkX2RpdmlkZXIoKTsKKwlpZiAoIWRpdmlkZXIpCisJCWhhbmcoKTsKKworCXVhcnRfcmVncyA9IHB4YV91YXJ0X2luZGV4X3RvX3JlZ3ModWFydF9pbmRleCk7CisJaWYgKCF1YXJ0X3JlZ3MpCisJCWhhbmcoKTsKKworCXB4YV91YXJ0X3RvZ2dsZV9jbG9jayh1YXJ0X2luZGV4LCAxKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgRklGT3MgKi8KKwl3cml0ZWwoMCwgJnVhcnRfcmVncy0+aWVyKTsKKwl3cml0ZWwoMCwgJnVhcnRfcmVncy0+ZmNyKTsKKworCS8qIFNldCBiYXVkIHJhdGUgKi8KKwl3cml0ZWwoTENSX1dMUzAgfCBMQ1JfV0xTMSB8IExDUl9ETEFCLCAmdWFydF9yZWdzLT5sY3IpOworCXdyaXRlbChkaXZpZGVyICYgMHhmZiwgJnVhcnRfcmVncy0+ZGxsKTsKKwl3cml0ZWwoZGl2aWRlciA+PiA4LCAmdWFydF9yZWdzLT5kbGgpOworCXdyaXRlbChMQ1JfV0xTMCB8IExDUl9XTFMxLCAmdWFydF9yZWdzLT5sY3IpOworCisJLyogRW5hYmxlIFVBUlQgKi8KKwl3cml0ZWwoSUVSX1VVRSwgJnVhcnRfcmVncy0+aWVyKTsKK30KIAogLyoKICAqIEluaXRpYWxpc2UgdGhlIHNlcmlhbCBwb3J0IHdpdGggdGhlIGdpdmVuIGJhdWRyYXRlLiBUaGUgc2V0dGluZ3MKICAqIGFyZSBhbHdheXMgOCBkYXRhIGJpdHMsIG5vIHBhcml0eSwgMSBzdG9wIGJpdCwgbm8gc3RhcnQgYml0cy4KLSAqCiAgKi8KLWludCBweGFfaW5pdF9kZXYgKHVuc2lnbmVkIGludCB1YXJ0X2luZGV4KQoraW50IHB4YV9pbml0X2Rldih1bnNpZ25lZCBpbnQgdWFydF9pbmRleCkKIHsKIAlweGFfc2V0YnJnX2RldiAodWFydF9pbmRleCk7Ci0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCi0KIC8qCiAgKiBPdXRwdXQgYSBzaW5nbGUgYnl0ZSB0byB0aGUgc2VyaWFsIHBvcnQuCiAgKi8KLXZvaWQgcHhhX3B1dGNfZGV2ICh1bnNpZ25lZCBpbnQgdWFydF9pbmRleCxjb25zdCBjaGFyIGMpCit2b2lkIHB4YV9wdXRjX2Rldih1bnNpZ25lZCBpbnQgdWFydF9pbmRleCwgY29uc3QgY2hhciBjKQogewotCXN3aXRjaCAodWFydF9pbmRleCkgewotCQljYXNlIEZGVUFSVF9JTkRFWDoKLQkJLyogd2FpdCBmb3Igcm9vbSBpbiB0aGUgdHggRklGTyBvbiBGRlVBUlQgKi8KLQkJCXdoaWxlICgocmVhZGwoRkZMU1IpICYgTFNSX1RFTVQpID09IDApCi0JCQkJV0FUQ0hET0dfUkVTRVQgKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCXdyaXRlbChjLCBGRlRIUik7Ci0JCQlicmVhazsKKwlzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqdWFydF9yZWdzOwogCi0JCWNhc2UgQlRVQVJUX0lOREVYOgotCQkJd2hpbGUgKChyZWFkbChCVExTUikgJiBMU1JfVEVNVCkgPT0gMCkKLQkJCQlXQVRDSERPR19SRVNFVCAoKTsJLyogUmVzZXQgSFcgV2F0Y2hkb2csIGlmIG5lZWRlZCAqLwotCQkJd3JpdGVsKGMsIEJUVEhSKTsKLQkJCWJyZWFrOworCXVhcnRfcmVncyA9IHB4YV91YXJ0X2luZGV4X3RvX3JlZ3ModWFydF9pbmRleCk7CisJaWYgKCF1YXJ0X3JlZ3MpCisJCWhhbmcoKTsKIAotCQljYXNlIFNUVUFSVF9JTkRFWDoKLQkJCXdoaWxlICgocmVhZGwoU1RMU1IpICYgTFNSX1RFTVQpID09IDApCi0JCQkJV0FUQ0hET0dfUkVTRVQgKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCXdyaXRlbChjLCBTVFRIUik7Ci0JCQlicmVhazsKLQl9CisJd2hpbGUgKCEocmVhZGwoJnVhcnRfcmVncy0+bHNyKSAmIExTUl9URU1UKSkKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKwl3cml0ZWwoYywgJnVhcnRfcmVncy0+dGhyKTsKIAogCS8qIElmIFxuLCBhbHNvIGRvIFxyICovCiAJaWYgKGMgPT0gJ1xuJykKQEAgLTE4NSwxNyArMjAwLDE1IEBACiAgKiBvdGhlcndpc2UuIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIHN1Y2Nlc2Z1bGwsIHRoZSBjaGFyYWN0ZXIgcmVhZCBpcwogICogd3JpdHRlbiBpbnRvIGl0cyBhcmd1bWVudCBjLgogICovCi1pbnQgcHhhX3RzdGNfZGV2ICh1bnNpZ25lZCBpbnQgdWFydF9pbmRleCkKK2ludCBweGFfdHN0Y19kZXYodW5zaWduZWQgaW50IHVhcnRfaW5kZXgpCiB7Ci0Jc3dpdGNoICh1YXJ0X2luZGV4KSB7Ci0JCWNhc2UgRkZVQVJUX0lOREVYOgotCQkJcmV0dXJuIHJlYWRsKEZGTFNSKSAmIExTUl9EUjsKLQkJY2FzZSBCVFVBUlRfSU5ERVg6Ci0JCQlyZXR1cm4gcmVhZGwoQlRMU1IpICYgTFNSX0RSOwotCQljYXNlIFNUVUFSVF9JTkRFWDoKLQkJCXJldHVybiByZWFkbChTVExTUikgJiBMU1JfRFI7Ci0JfQotCXJldHVybiAtMTsKKwlzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqdWFydF9yZWdzOworCisJdWFydF9yZWdzID0gcHhhX3VhcnRfaW5kZXhfdG9fcmVncyh1YXJ0X2luZGV4KTsKKwlpZiAoIXVhcnRfcmVncykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHJlYWRsKCZ1YXJ0X3JlZ3MtPmxzcikgJiBMU1JfRFI7CiB9CiAKIC8qCkBAIC0yMDMsMTg3ICsyMTYsODYgQEAKICAqIG90aGVyd2lzZS4gV2hlbiB0aGUgZnVuY3Rpb24gaXMgc3VjY2VzZnVsbCwgdGhlIGNoYXJhY3RlciByZWFkIGlzCiAgKiB3cml0dGVuIGludG8gaXRzIGFyZ3VtZW50IGMuCiAgKi8KLWludCBweGFfZ2V0Y19kZXYgKHVuc2lnbmVkIGludCB1YXJ0X2luZGV4KQoraW50IHB4YV9nZXRjX2Rldih1bnNpZ25lZCBpbnQgdWFydF9pbmRleCkKIHsKLQlzd2l0Y2ggKHVhcnRfaW5kZXgpIHsKLQkJY2FzZSBGRlVBUlRfSU5ERVg6Ci0JCQl3aGlsZSAoIShyZWFkbChGRkxTUikgJiBMU1JfRFIpKQotCQkJCS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCQlXQVRDSERPR19SRVNFVCgpOwotCQkJcmV0dXJuIChjaGFyKSByZWFkbChGRlJCUikgJiAweGZmOworCXN0cnVjdCBweGFfdWFydF9yZWdzICp1YXJ0X3JlZ3M7CiAKLQkJY2FzZSBCVFVBUlRfSU5ERVg6Ci0JCQl3aGlsZSAoIShyZWFkbChCVExTUikgJiBMU1JfRFIpKQotCQkJCS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCQlXQVRDSERPR19SRVNFVCgpOwotCQkJcmV0dXJuIChjaGFyKSByZWFkbChCVFJCUikgJiAweGZmOwotCQljYXNlIFNUVUFSVF9JTkRFWDoKLQkJCXdoaWxlICghKHJlYWRsKFNUTFNSKSAmIExTUl9EUikpCi0JCQkJLyogUmVzZXQgSFcgV2F0Y2hkb2csIGlmIG5lZWRlZCAqLwotCQkJCVdBVENIRE9HX1JFU0VUKCk7Ci0JCQlyZXR1cm4gKGNoYXIpIHJlYWRsKFNUUkJSKSAmIDB4ZmY7Ci0JfQotCXJldHVybiAtMTsKKwl1YXJ0X3JlZ3MgPSBweGFfdWFydF9pbmRleF90b19yZWdzKHVhcnRfaW5kZXgpOworCWlmICghdWFydF9yZWdzKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoIShyZWFkbCgmdWFydF9yZWdzLT5sc3IpICYgTFNSX0RSKSkKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKwlyZXR1cm4gcmVhZGwoJnVhcnRfcmVncy0+cmJyKSAmIDB4ZmY7CiB9CiAKLXZvaWQKLXB4YV9wdXRzX2RldiAodW5zaWduZWQgaW50IHVhcnRfaW5kZXgsY29uc3QgY2hhciAqcykKK3ZvaWQgcHhhX3B1dHNfZGV2KHVuc2lnbmVkIGludCB1YXJ0X2luZGV4LCBjb25zdCBjaGFyICpzKQogewotCXdoaWxlICgqcykgewotCQlweGFfcHV0Y19kZXYgKHVhcnRfaW5kZXgsKnMrKyk7Ci0JfQorCXdoaWxlICgqcykKKwkJcHhhX3B1dGNfZGV2KHVhcnRfaW5kZXgsICpzKyspOwogfQogCi0jaWYgZGVmaW5lZCAoQ09ORklHX0ZGVUFSVCkKLXN0YXRpYyBpbnQgZmZ1YXJ0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcHhhX2luaXRfZGV2KEZGVUFSVF9JTkRFWCk7Ci19CisjZGVmaW5lCXB4YV91YXJ0KHVhcnQsIFVBUlQpCQkJCQkJXAorCWludCB1YXJ0IyNfaW5pdCh2b2lkKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfaW5pdF9kZXYoVUFSVCMjX0lOREVYKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXZvaWQgdWFydCMjX3NldGJyZyh2b2lkKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJcmV0dXJuIHB4YV9zZXRicmdfZGV2KFVBUlQjI19JTkRFWCk7CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwl2b2lkIHVhcnQjI19wdXRjKGNvbnN0IGNoYXIgYykJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfcHV0Y19kZXYoVUFSVCMjX0lOREVYLCBjKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXZvaWQgdWFydCMjX3B1dHMoY29uc3QgY2hhciAqcykJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfcHV0c19kZXYoVUFSVCMjX0lOREVYLCBzKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWludCB1YXJ0IyNfZ2V0Yyh2b2lkKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfZ2V0Y19kZXYoVUFSVCMjX0lOREVYKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWludCB1YXJ0IyNfdHN0Yyh2b2lkKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfdHN0Y19kZXYoVUFSVCMjX0lOREVYKTsJCQlcCisJfQkJCQkJCQkJXAogCi1zdGF0aWMgdm9pZCBmZnVhcnRfc2V0YnJnKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV9zZXRicmdfZGV2KEZGVUFSVF9JTkRFWCk7Ci19CisjZGVmaW5lCXB4YV91YXJ0X2Rlc2ModWFydCkJCQkJCQlcCisJc3RydWN0IHNlcmlhbF9kZXZpY2Ugc2VyaWFsXyMjdWFydCMjX2RldmljZSA9CQkJXAorCXsJCQkJCQkJCVwKKwkJInNlcmlhbF8iI3VhcnQsCQkJCQkJXAorCQl1YXJ0IyNfaW5pdCwJCQkJCQlcCisJCU5VTEwsCQkJCQkJCVwKKwkJdWFydCMjX3NldGJyZywJCQkJCQlcCisJCXVhcnQjI19nZXRjLAkJCQkJCVwKKwkJdWFydCMjX3RzdGMsCQkJCQkJXAorCQl1YXJ0IyNfcHV0YywJCQkJCQlcCisJCXVhcnQjI19wdXRzLAkJCQkJCVwKKwl9OwogCi1zdGF0aWMgdm9pZCBmZnVhcnRfcHV0Yyhjb25zdCBjaGFyIGMpCi17Ci0JcmV0dXJuIHB4YV9wdXRjX2RldihGRlVBUlRfSU5ERVgsYyk7Ci19CisjZGVmaW5lCXB4YV91YXJ0X211bHRpKHVhcnQsIFVBUlQpCQkJCQlcCisJcHhhX3VhcnQodWFydCwgVUFSVCkJCQkJCQlcCisJcHhhX3VhcnRfZGVzYyh1YXJ0KQogCi1zdGF0aWMgdm9pZCBmZnVhcnRfcHV0cyhjb25zdCBjaGFyICpzKQotewotCXJldHVybiBweGFfcHV0c19kZXYoRkZVQVJUX0lOREVYLHMpOwotfQotCi1zdGF0aWMgaW50IGZmdWFydF9nZXRjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV9nZXRjX2RldihGRlVBUlRfSU5ERVgpOwotfQotCi1zdGF0aWMgaW50IGZmdWFydF90c3RjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV90c3RjX2RldihGRlVBUlRfSU5ERVgpOwotfQotCi1zdHJ1Y3Qgc2VyaWFsX2RldmljZSBzZXJpYWxfZmZ1YXJ0X2RldmljZSA9Ci17Ci0JInNlcmlhbF9mZnVhcnQiLAotCWZmdWFydF9pbml0LAotCU5VTEwsCi0JZmZ1YXJ0X3NldGJyZywKLQlmZnVhcnRfZ2V0YywKLQlmZnVhcnRfdHN0YywKLQlmZnVhcnRfcHV0YywKLQlmZnVhcnRfcHV0cywKLX07CisjaWYgZGVmaW5lZChDT05GSUdfSFdVQVJUKQorCXB4YV91YXJ0X211bHRpKGh3dWFydCwgSFdVQVJUKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1RVQVJUKQorCXB4YV91YXJ0X211bHRpKHN0dWFydCwgU1RVQVJUKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkZVQVJUKQorCXB4YV91YXJ0X211bHRpKGZmdWFydCwgRkZVQVJUKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQlRVQVJUKQorCXB4YV91YXJ0X211bHRpKGJ0dWFydCwgQlRVQVJUKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChDT05GSUdfQlRVQVJUKQotc3RhdGljIGludCBidHVhcnRfaW5pdCh2b2lkKQotewotCXJldHVybiBweGFfaW5pdF9kZXYoQlRVQVJUX0lOREVYKTsKLX0KLQotc3RhdGljIHZvaWQgYnR1YXJ0X3NldGJyZyh2b2lkKQotewotCXJldHVybiBweGFfc2V0YnJnX2RldihCVFVBUlRfSU5ERVgpOwotfQotCi1zdGF0aWMgdm9pZCBidHVhcnRfcHV0Yyhjb25zdCBjaGFyIGMpCi17Ci0JcmV0dXJuIHB4YV9wdXRjX2RldihCVFVBUlRfSU5ERVgsYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ0dWFydF9wdXRzKGNvbnN0IGNoYXIgKnMpCi17Ci0JcmV0dXJuIHB4YV9wdXRzX2RldihCVFVBUlRfSU5ERVgscyk7Ci19Ci0KLXN0YXRpYyBpbnQgYnR1YXJ0X2dldGModm9pZCkKLXsKLQlyZXR1cm4gcHhhX2dldGNfZGV2KEJUVUFSVF9JTkRFWCk7Ci19Ci0KLXN0YXRpYyBpbnQgYnR1YXJ0X3RzdGModm9pZCkKLXsKLQlyZXR1cm4gcHhhX3RzdGNfZGV2KEJUVUFSVF9JTkRFWCk7Ci19Ci0KLXN0cnVjdCBzZXJpYWxfZGV2aWNlIHNlcmlhbF9idHVhcnRfZGV2aWNlID0KLXsKLQkic2VyaWFsX2J0dWFydCIsCi0JYnR1YXJ0X2luaXQsCi0JTlVMTCwKLQlidHVhcnRfc2V0YnJnLAotCWJ0dWFydF9nZXRjLAotCWJ0dWFydF90c3RjLAotCWJ0dWFydF9wdXRjLAotCWJ0dWFydF9wdXRzLAotfTsKKyNpZm5kZWYJQ09ORklHX1NFUklBTF9NVUxUSQorCXB4YV91YXJ0KHNlcmlhbCwgVUFSVCkKICNlbmRpZgotCi0jaWYgZGVmaW5lZCAoQ09ORklHX1NUVUFSVCkKLXN0YXRpYyBpbnQgc3R1YXJ0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcHhhX2luaXRfZGV2KFNUVUFSVF9JTkRFWCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0dWFydF9zZXRicmcodm9pZCkKLXsKLQlyZXR1cm4gcHhhX3NldGJyZ19kZXYoU1RVQVJUX0lOREVYKTsKLX0KLQotc3RhdGljIHZvaWQgc3R1YXJ0X3B1dGMoY29uc3QgY2hhciBjKQotewotCXJldHVybiBweGFfcHV0Y19kZXYoU1RVQVJUX0lOREVYLGMpOwotfQotCi1zdGF0aWMgdm9pZCBzdHVhcnRfcHV0cyhjb25zdCBjaGFyICpzKQotewotCXJldHVybiBweGFfcHV0c19kZXYoU1RVQVJUX0lOREVYLHMpOwotfQotCi1zdGF0aWMgaW50IHN0dWFydF9nZXRjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV9nZXRjX2RldihTVFVBUlRfSU5ERVgpOwotfQotCi1zdGF0aWMgaW50IHN0dWFydF90c3RjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV90c3RjX2RldihTVFVBUlRfSU5ERVgpOwotfQotCi1zdHJ1Y3Qgc2VyaWFsX2RldmljZSBzZXJpYWxfc3R1YXJ0X2RldmljZSA9Ci17Ci0JInNlcmlhbF9zdHVhcnQiLAotCXN0dWFydF9pbml0LAotCU5VTEwsCi0Jc3R1YXJ0X3NldGJyZywKLQlzdHVhcnRfZ2V0YywKLQlzdHVhcnRfdHN0YywKLQlzdHVhcnRfcHV0YywKLQlzdHVhcnRfcHV0cywKLX07Ci0jZW5kaWYKLQotCi0jaWZuZGVmIENPTkZJR19TRVJJQUxfTVVMVEkKLWlubGluZSBpbnQgc2VyaWFsX2luaXQodm9pZCkgewotCXJldHVybiAocHhhX2luaXRfZGV2KFVBUlRfSU5ERVgpKTsKLX0KLXZvaWQgc2VyaWFsX3NldGJyZyh2b2lkKSB7Ci0JcHhhX3NldGJyZ19kZXYoVUFSVF9JTkRFWCk7Ci19Ci1pbnQgc2VyaWFsX2dldGModm9pZCkgewotCXJldHVybihweGFfZ2V0Y19kZXYoVUFSVF9JTkRFWCkpOwotfQotaW50IHNlcmlhbF90c3RjKHZvaWQpIHsKLQlyZXR1cm4ocHhhX3RzdGNfZGV2KFVBUlRfSU5ERVgpKTsKLX0KLXZvaWQgc2VyaWFsX3B1dGMoY29uc3QgY2hhciBjKSB7Ci0JcHhhX3B1dGNfZGV2KFVBUlRfSU5ERVgsYyk7Ci19Ci12b2lkIHNlcmlhbF9wdXRzKGNvbnN0IGNoYXIgKnMpIHsKLQlweGFfcHV0c19kZXYoVUFSVF9JTkRFWCxzKTsKLX0KLSNlbmRpZgkvKiBDT05GSUdfU0VSSUFMX01VTFRJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IDg0YWQ2ZmEuLjZmMzg5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0zNyw2ICszNyw3IEBACiBDT0JKUy0kKENPTkZJR19NUEM1MlhYX1NQSSkgKz0gbXBjNTJ4eF9zcGkubwogQ09CSlMtJChDT05GSUdfTVBDOFhYWF9TUEkpICs9IG1wYzh4eHhfc3BpLm8KIENPQkpTLSQoQ09ORklHX01YQ19TUEkpICs9IG14Y19zcGkubworQ09CSlMtJChDT05GSUdfTVhTX1NQSSkgKz0gbXhzX3NwaS5vCiBDT0JKUy0kKENPTkZJR19PQ19USU5ZX1NQSSkgKz0gb2NfdGlueV9zcGkubwogQ09CSlMtJChDT05GSUdfT01BUDNfU1BJKSArPSBvbWFwM19zcGkubwogQ09CSlMtJChDT05GSUdfU09GVF9TUEkpICs9IHNvZnRfc3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKaW5kZXggMzNlMzhiNi4uODNlZjhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKQEAgLTEzNiwxMyArMTM2LDExIEBACiAJdW5zaWduZWQgaW50CWxlbl90eDsKIAl1bnNpZ25lZCBpbnQJbGVuX3J4OwogCXVuc2lnbmVkIGludAlsZW47Ci0JaW50CQlyZXQ7CiAJdTMyCQlzdGF0dXM7CiAJY29uc3QgdTgJKnR4cCA9IGRvdXQ7CiAJdTgJCSpyeHAgPSBkaW47CiAJdTgJCXZhbHVlOwogCi0JcmV0ID0gMDsKIAlpZiAoYml0bGVuID09IDApCiAJCS8qIEZpbmlzaCBhbnkgcHJldmlvdXNseSBzdWJtaXR0ZWQgdHJhbnNmZXJzICovCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXhzX3NwaS5jIGIvZHJpdmVycy9zcGkvbXhzX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMjdmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9teHNfc3BpLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFNQSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBOT1RFOiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRoZSBTUEktY29udHJvbGxlciBjaGlwc2VsZWN0cywKKyAqICAgICAgIEdQSU8gZHJpdmVuIGNoaXBzZWxlY3RzIGFyZSBub3Qgc3VwcG9ydGVkLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzcGkuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisKKyNkZWZpbmUJTVhTX1NQSV9NQVhfVElNRU9VVAkxMDAwMDAwCisjZGVmaW5lCU1YU19TUElfUE9SVF9PRkZTRVQJMHgyMDAwCisKK3N0cnVjdCBteHNfc3BpX3NsYXZlIHsKKwlzdHJ1Y3Qgc3BpX3NsYXZlCXNsYXZlOworCXVpbnQzMl90CQltYXhfa2h6OworCXVpbnQzMl90CQltb2RlOworCXN0cnVjdCBteDI4X3NzcF9yZWdzCSpyZWdzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXhzX3NwaV9zbGF2ZSAqdG9fbXhzX3NsYXZlKHN0cnVjdCBzcGlfc2xhdmUgKnNsYXZlKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2xhdmUsIHN0cnVjdCBteHNfc3BpX3NsYXZlLCBzbGF2ZSk7Cit9CisKK3ZvaWQgc3BpX2luaXQodm9pZCkKK3sKK30KKworc3RydWN0IHNwaV9zbGF2ZSAqc3BpX3NldHVwX3NsYXZlKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBjcywKKwkJCQkgIHVuc2lnbmVkIGludCBtYXhfaHosIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCBteHNfc3BpX3NsYXZlICpteHNfc2xhdmU7CisJdWludDMyX3QgYWRkcjsKKworCWlmIChidXMgPiAzKSB7CisJCXByaW50ZigiTVhTIFNQSTogTWF4IGJ1cyBudW1iZXIgaXMgM1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCW14c19zbGF2ZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG14c19zcGlfc2xhdmUpKTsKKwlpZiAoIW14c19zbGF2ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhZGRyID0gTVhTX1NTUDBfQkFTRSArIChidXMgKiBNWFNfU1BJX1BPUlRfT0ZGU0VUKTsKKworCW14c19zbGF2ZS0+c2xhdmUuYnVzID0gYnVzOworCW14c19zbGF2ZS0+c2xhdmUuY3MgPSBjczsKKwlteHNfc2xhdmUtPm1heF9raHogPSBtYXhfaHogLyAxMDAwOworCW14c19zbGF2ZS0+bW9kZSA9IG1vZGU7CisJbXhzX3NsYXZlLT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopYWRkcjsKKworCXJldHVybiAmbXhzX3NsYXZlLT5zbGF2ZTsKK30KKwordm9pZCBzcGlfZnJlZV9zbGF2ZShzdHJ1Y3Qgc3BpX3NsYXZlICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgbXhzX3NwaV9zbGF2ZSAqbXhzX3NsYXZlID0gdG9fbXhzX3NsYXZlKHNsYXZlKTsKKwlmcmVlKG14c19zbGF2ZSk7Cit9CisKK2ludCBzcGlfY2xhaW1fYnVzKHN0cnVjdCBzcGlfc2xhdmUgKnNsYXZlKQoreworCXN0cnVjdCBteHNfc3BpX3NsYXZlICpteHNfc2xhdmUgPSB0b19teHNfc2xhdmUoc2xhdmUpOworCXN0cnVjdCBteDI4X3NzcF9yZWdzICpzc3BfcmVncyA9IG14c19zbGF2ZS0+cmVnczsKKwl1aW50MzJfdCByZWcgPSAwOworCisJbXgyOF9yZXNldF9ibG9jaygmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9yZWcpOworCisJd3JpdGVsKFNTUF9DVFJMMF9CVVNfV0lEVEhfT05FX0JJVCwgJnNzcF9yZWdzLT5od19zc3BfY3RybDApOworCisJcmVnID0gU1NQX0NUUkwxX1NTUF9NT0RFX1NQSSB8IFNTUF9DVFJMMV9XT1JEX0xFTkdUSF9FSUdIVF9CSVRTOworCXJlZyB8PSAobXhzX3NsYXZlLT5tb2RlICYgU1BJX0NQT0wpID8gU1NQX0NUUkwxX1BPTEFSSVRZIDogMDsKKwlyZWcgfD0gKG14c19zbGF2ZS0+bW9kZSAmIFNQSV9DUEhBKSA/IFNTUF9DVFJMMV9QSEFTRSA6IDA7CisJd3JpdGVsKHJlZywgJnNzcF9yZWdzLT5od19zc3BfY3RybDEpOworCisJd3JpdGVsKDAsICZzc3BfcmVncy0+aHdfc3NwX2NtZDApOworCisJbXgyOF9zZXRfc3NwX2J1c2Nsb2NrKHNsYXZlLT5idXMsIG14c19zbGF2ZS0+bWF4X2toeik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzcGlfcmVsZWFzZV9idXMoc3RydWN0IHNwaV9zbGF2ZSAqc2xhdmUpCit7Cit9CisKK3N0YXRpYyB2b2lkIG14c19zcGlfc3RhcnRfeGZlcihzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MpCit7CisJd3JpdGVsKFNTUF9DVFJMMF9MT0NLX0NTLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCXdyaXRlbChTU1BfQ1RSTDBfSUdOT1JFX0NSQywgJnNzcF9yZWdzLT5od19zc3BfY3RybDBfY2xyKTsKK30KKworc3RhdGljIHZvaWQgbXhzX3NwaV9lbmRfeGZlcihzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MpCit7CisJd3JpdGVsKFNTUF9DVFJMMF9MT0NLX0NTLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9jbHIpOworCXdyaXRlbChTU1BfQ1RSTDBfSUdOT1JFX0NSQywgJnNzcF9yZWdzLT5od19zc3BfY3RybDBfc2V0KTsKK30KKworaW50IHNwaV94ZmVyKHN0cnVjdCBzcGlfc2xhdmUgKnNsYXZlLCB1bnNpZ25lZCBpbnQgYml0bGVuLAorCQljb25zdCB2b2lkICpkb3V0LCB2b2lkICpkaW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IG14c19zcGlfc2xhdmUgKm14c19zbGF2ZSA9IHRvX214c19zbGF2ZShzbGF2ZSk7CisJc3RydWN0IG14Mjhfc3NwX3JlZ3MgKnNzcF9yZWdzID0gbXhzX3NsYXZlLT5yZWdzOworCWludCBsZW4gPSBiaXRsZW4gLyA4OworCWNvbnN0IGNoYXIgKnR4ID0gZG91dDsKKwljaGFyICpyeCA9IGRpbjsKKworCWlmIChiaXRsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXJ4ICYmICF0eCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmxhZ3MgJiBTUElfWEZFUl9CRUdJTikKKwkJbXhzX3NwaV9zdGFydF94ZmVyKHNzcF9yZWdzKTsKKworCXdoaWxlIChsZW4tLSkgeworCQkvKiBXZSB0cmFuc2ZlciAxIGJ5dGUgKi8KKwkJd3JpdGVsKDEsICZzc3BfcmVncy0+aHdfc3NwX3hmZXJfc2l6ZSk7CisKKwkJaWYgKChmbGFncyAmIFNQSV9YRkVSX0VORCkgJiYgIWxlbikKKwkJCW14c19zcGlfZW5kX3hmZXIoc3NwX3JlZ3MpOworCisJCWlmICh0eCkKKwkJCXdyaXRlbChTU1BfQ1RSTDBfUkVBRCwgJnNzcF9yZWdzLT5od19zc3BfY3RybDBfY2xyKTsKKwkJZWxzZQorCQkJd3JpdGVsKFNTUF9DVFJMMF9SRUFELCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCisJCXdyaXRlbChTU1BfQ1RSTDBfUlVOLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCisJCWlmIChteDI4X3dhaXRfbWFza19zZXQoJnNzcF9yZWdzLT5od19zc3BfY3RybDBfcmVnLAorCQkJU1NQX0NUUkwwX1JVTiwgTVhTX1NQSV9NQVhfVElNRU9VVCkpIHsKKwkJCXByaW50ZigiTVhTIFNQSTogVGltZW91dCB3YWl0aW5nIGZvciBzdGFydFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAodHgpCisJCQl3cml0ZWwoKnR4KyssICZzc3BfcmVncy0+aHdfc3NwX2RhdGEpOworCisJCXdyaXRlbChTU1BfQ1RSTDBfREFUQV9YRkVSLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCisJCWlmIChyeCkgeworCQkJaWYgKG14Mjhfd2FpdF9tYXNrX2Nscigmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXNfcmVnLAorCQkJCVNTUF9TVEFUVVNfRklGT19FTVBUWSwgTVhTX1NQSV9NQVhfVElNRU9VVCkpIHsKKwkJCQlwcmludGYoIk1YUyBTUEk6IFRpbWVvdXQgd2FpdGluZyBmb3IgZGF0YVxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQkqcnggPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9kYXRhKTsKKwkJCXJ4Kys7CisJCX0KKworCQlpZiAobXgyOF93YWl0X21hc2tfY2xyKCZzc3BfcmVncy0+aHdfc3NwX2N0cmwwX3JlZywKKwkJCVNTUF9DVFJMMF9SVU4sIE1YU19TUElfTUFYX1RJTUVPVVQpKSB7CisJCQlwcmludGYoIk1YUyBTUEk6IFRpbWVvdXQgd2FpdGluZyBmb3IgZmluaXNoXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZXRoL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL3VzYi9ldGgvc21zYzk1eHguYwppbmRleCA3ZWU0Zjg3Li4yZjYzMzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ldGgvc21zYzk1eHguYworKysgYi9kcml2ZXJzL3VzYi9ldGgvc21zYzk1eHguYwpAQCAtMjAsNiArMjAsNyBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPHVzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgpAQCAtMzcyLDI2ICszNzMsMjEgQEAKIHN0YXRpYyBpbnQgc21zYzk1eHhfd3JpdGVfaHdhZGRyKHN0cnVjdCBldGhfZGV2aWNlICpldGgpCiB7CiAJc3RydWN0IHVldGhfZGF0YSAqZGV2ID0gKHN0cnVjdCB1ZXRoX2RhdGEgKilldGgtPnByaXY7Ci0JdTMyIGFkZHJfbG8sIGFkZHJfaGk7CisJdTMyIGFkZHJfbG8gPSBfX2dldF91bmFsaWduZWRfbGUzMigmZXRoLT5lbmV0YWRkclswXSk7CisJdTMyIGFkZHJfaGkgPSBfX2dldF91bmFsaWduZWRfbGUxNigmZXRoLT5lbmV0YWRkcls0XSk7CiAJaW50IHJldDsKIAogCS8qIHNldCBoYXJkd2FyZSBhZGRyZXNzICovCiAJZGVidWcoIioqICVzKClcbiIsIF9fZnVuY19fKTsKLQlhZGRyX2xvID0gY3B1X3RvX2xlMzIoKmV0aC0+ZW5ldGFkZHIpOwotCWFkZHJfaGkgPSBjcHVfdG9fbGUxNigqKCh1MTYgKikoZXRoLT5lbmV0YWRkciArIDQpKSk7CiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgQUREUkwsIGFkZHJfbG8pOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRlYnVnKCJGYWlsZWQgdG8gd3JpdGUgQUREUkw6ICVkXG4iLCByZXQpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCX0KIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEFERFJILCBhZGRyX2hpKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlkZWJ1ZygiTUFDICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQlldGgtPmVuZXRhZGRyWzBdLCBldGgtPmVuZXRhZGRyWzFdLAotCQlldGgtPmVuZXRhZGRyWzJdLCBldGgtPmVuZXRhZGRyWzNdLAotCQlldGgtPmVuZXRhZGRyWzRdLCBldGgtPmVuZXRhZGRyWzVdKTsKKworCWRlYnVnKCJNQUMgJXBNXG4iLCBldGgtPmVuZXRhZGRyKTsKIAlkZXYtPmhhdmVfaHdhZGRyID0gMTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCmluZGV4IDUxYjI0OTQuLjA5YWJiNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQpAQCAtNDEsNiArNDEsNyBAQAogQ09CSlMtJChDT05GSUdfVVNCX0VIQ0lfRlNMKSArPSBlaGNpLWZzbC5vCiBlbmRpZgogQ09CSlMtJChDT05GSUdfVVNCX0VIQ0lfTVhDKSArPSBlaGNpLW14Yy5vCitDT0JKUy0kKENPTkZJR19VU0JfRUhDSV9NWFMpICs9IGVoY2ktbXhzLm8KIENPQkpTLSQoQ09ORklHX1VTQl9FSENJX1BQQzRYWCkgKz0gZWhjaS1wcGM0eHgubwogQ09CSlMtJChDT05GSUdfVVNCX0VIQ0lfSVhQNFhYKSArPSBlaGNpLWl4cC5vCiBDT0JKUy0kKENPTkZJR19VU0JfRUhDSV9LSVJLV09PRCkgKz0gZWhjaS1raXJrd29vZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKaW5kZXggNWE2NWQ5Mi4uYjJkMjk0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwpAQCAtNDAsMTEgKzQwLDEzIEBACiBpbnQgZWhjaV9oY2RfaW5pdCh2b2lkKQogewogCXN0cnVjdCB1c2JfZWhjaSAqZWhjaTsKLQljaGFyIHVzYl9waHlbNV07CiAJY29uc3QgY2hhciAqcGh5X3R5cGUgPSBOVUxMOwogCXNpemVfdCBsZW47CisjaWZkZWYgQ09ORklHX1NZU19GU0xfVVNCX0lOVEVSTkFMX1VUTUlfUEhZCisJY2hhciB1c2JfcGh5WzVdOwogCiAJdXNiX3BoeVswXSA9ICdcMCc7CisjZW5kaWYKIAogCWVoY2kgPSAoc3RydWN0IHVzYl9laGNpICopQ09ORklHX1NZU19GU0xfVVNCX0FERFI7CiAJaGNjciA9IChzdHJ1Y3QgZWhjaV9oY2NyICopKCh1aW50MzJfdCkmZWhjaS0+Y2FwbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teHMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzk1ZjIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14cy5jCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBVU0IgSG9zdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1iYXNlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbGtjdHJsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy11c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXVzYnBoeS5oPgorCisjaW5jbHVkZSAiZWhjaS1jb3JlLmgiCisjaW5jbHVkZSAiZWhjaS5oIgorCisjaWYJKENPTkZJR19FSENJX01YU19QT1JUICE9IDApICYmIChDT05GSUdfRUhDSV9NWFNfUE9SVCAhPSAxKQorI2Vycm9yCSJNWFMgRUhDSTogSW52YWxpZCBwb3J0IHNlbGVjdGVkISIKKyNlbmRpZgorCisjaWZuZGVmCUNPTkZJR19FSENJX01YU19QT1JUCisjZXJyb3IJIk1YUyBFSENJOiBQbGVhc2UgZGVmaW5lIGNvcnJlY3QgcG9ydCB1c2luZyBDT05GSUdfRUhDSV9NWFNfUE9SVCEiCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBlaGNpX214cyB7CisJc3RydWN0IG14MjhfdXNiX3JlZ3MJKnVzYl9yZWdzOworCXN0cnVjdCBteDI4X3VzYnBoeV9yZWdzCSpwaHlfcmVnczsKK30gZWhjaV9teHM7CisKK2ludCBteHNfZWhjaV9nZXRfcG9ydChzdHJ1Y3QgZWhjaV9teHMgKm14c191c2IsIGludCBwb3J0KQoreworCXVpbnQzMl90IHVzYl9iYXNlLCBwaHlfYmFzZTsKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCXVzYl9iYXNlID0gTVhTX1VTQkNUUkwwX0JBU0U7CisJCXBoeV9iYXNlID0gTVhTX1VTQlBIWTBfQkFTRTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl1c2JfYmFzZSA9IE1YU19VU0JDVFJMMV9CQVNFOworCQlwaHlfYmFzZSA9IE1YU19VU0JQSFkxX0JBU0U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiQ09ORklHX0VIQ0lfTVhTX1BPUlQgKHBvcnQgPSAlZClcbiIsIHBvcnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJbXhzX3VzYi0+dXNiX3JlZ3MgPSAoc3RydWN0IG14MjhfdXNiX3JlZ3MgKil1c2JfYmFzZTsKKwlteHNfdXNiLT5waHlfcmVncyA9IChzdHJ1Y3QgbXgyOF91c2JwaHlfcmVncyAqKXBoeV9iYXNlOworCXJldHVybiAwOworfQorCisvKiBUaGlzIERJR0NUTCByZWdpc3RlciB1bmdhdGVzIGNsb2NrIHRvIFVTQiAqLworI2RlZmluZQlIV19ESUdDVExfQ1RSTAkJCTB4ODAwMWMwMDAKKyNkZWZpbmUJSFdfRElHQ1RMX0NUUkxfVVNCMF9DTEtHQVRFCSgxIDw8IDIpCisjZGVmaW5lCUhXX0RJR0NUTF9DVFJMX1VTQjFfQ0xLR0FURQkoMSA8PCAxNikKKworaW50IGVoY2lfaGNkX2luaXQodm9pZCkKK3sKKworCWludCByZXQ7CisJdWludDMyX3QgdXNiX2Jhc2UsIGNhcF9iYXNlOworCXN0cnVjdCBteDI4X3JlZ2lzdGVyICpkaWdjdGxfY3RybCA9CisJCShzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqKUhXX0RJR0NUTF9DVFJMOworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwlyZXQgPSBteHNfZWhjaV9nZXRfcG9ydCgmZWhjaV9teHMsIENPTkZJR19FSENJX01YU19QT1JUKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogUmVzZXQgdGhlIFBIWSBibG9jayAqLworCXdyaXRlbChVU0JQSFlfQ1RSTF9TRlRSU1QsICZlaGNpX214cy5waHlfcmVncy0+aHdfdXNicGh5X2N0cmxfc2V0KTsKKwl1ZGVsYXkoMTApOworCXdyaXRlbChVU0JQSFlfQ1RSTF9TRlRSU1QgfCBVU0JQSFlfQ1RSTF9DTEtHQVRFLAorCQkmZWhjaV9teHMucGh5X3JlZ3MtPmh3X3VzYnBoeV9jdHJsX2Nscik7CisKKwkvKiBFbmFibGUgVVNCIGNsb2NrICovCisJd3JpdGVsKENMS0NUUkxfUExMMENUUkwwX0VOX1VTQl9DTEtTIHwgQ0xLQ1RSTF9QTEwwQ1RSTDBfUE9XRVIsCisJCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX3BsbDBjdHJsMF9zZXQpOworCXdyaXRlbChDTEtDVFJMX1BMTDFDVFJMMF9FTl9VU0JfQ0xLUyB8IENMS0NUUkxfUExMMUNUUkwwX1BPV0VSLAorCQkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9wbGwxY3RybDBfc2V0KTsKKworCXdyaXRlbChIV19ESUdDVExfQ1RSTF9VU0IwX0NMS0dBVEUgfCBIV19ESUdDVExfQ1RSTF9VU0IxX0NMS0dBVEUsCisJCSZkaWdjdGxfY3RybC0+cmVnX2Nscik7CisKKwkvKiBTdGFydCBVU0IgUEhZICovCisJd3JpdGVsKDAsICZlaGNpX214cy5waHlfcmVncy0+aHdfdXNicGh5X3B3ZCk7CisKKwkvKiBFbmFibGUgVVRNSSsgTGV2ZWwgMiBhbmQgTGV2ZWwgMyBjb21wYXRpYmlsaXR5ICovCisJd3JpdGVsKFVTQlBIWV9DVFJMX0VOVVRNSUxFVkVMMyB8IFVTQlBIWV9DVFJMX0VOVVRNSUxFVkVMMiB8IDEsCisJCSZlaGNpX214cy5waHlfcmVncy0+aHdfdXNicGh5X2N0cmxfc2V0KTsKKworCXVzYl9iYXNlID0gKCh1aW50MzJfdCllaGNpX214cy51c2JfcmVncykgKyAweDEwMDsKKwloY2NyID0gKHN0cnVjdCBlaGNpX2hjY3IgKil1c2JfYmFzZTsKKworCWNhcF9iYXNlID0gZWhjaV9yZWFkbCgmaGNjci0+Y3JfY2FwYmFzZSk7CisJaGNvciA9IChzdHJ1Y3QgZWhjaV9oY29yICopKHVzYl9iYXNlICsgSENfTEVOR1RIKGNhcF9iYXNlKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGVoY2lfaGNkX3N0b3Aodm9pZCkKK3sKKwlpbnQgcmV0OworCXVpbnQzMl90IHRtcDsKKwlzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqZGlnY3RsX2N0cmwgPQorCQkoc3RydWN0IG14MjhfcmVnaXN0ZXIgKilIV19ESUdDVExfQ1RSTDsKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJcmV0ID0gbXhzX2VoY2lfZ2V0X3BvcnQoJmVoY2lfbXhzLCBDT05GSUdfRUhDSV9NWFNfUE9SVCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFN0b3AgdGhlIFVTQiBwb3J0ICovCisJdG1wID0gZWhjaV9yZWFkbCgmaGNvci0+b3JfdXNiY21kKTsKKwl0bXAgJj0gfkNNRF9SVU47CisJZWhjaV93cml0ZWwodG1wLCAmaGNvci0+b3JfdXNiY21kKTsKKworCS8qIERpc2FibGUgdGhlIFBIWSAqLworCXRtcCA9IFVTQlBIWV9QV0RfUlhQV0RSWCB8IFVTQlBIWV9QV0RfUlhQV0RESUZGIHwKKwkJVVNCUEhZX1BXRF9SWFBXRDFQVDEgfCBVU0JQSFlfUFdEX1JYUFdERU5WIHwKKwkJVVNCUEhZX1BXRF9UWFBXRFYySSB8IFVTQlBIWV9QV0RfVFhQV0RJQklBUyB8CisJCVVTQlBIWV9QV0RfVFhQV0RGUzsKKwl3cml0ZWwodG1wLCAmZWhjaV9teHMucGh5X3JlZ3MtPmh3X3VzYnBoeV9wd2QpOworCisJLyogRGlzYWJsZSBVU0IgY2xvY2sgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9QTEwwQ1RSTDBfRU5fVVNCX0NMS1MsCisJCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX3BsbDBjdHJsMF9jbHIpOworCXdyaXRlbChDTEtDVFJMX1BMTDFDVFJMMF9FTl9VU0JfQ0xLUywKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfcGxsMWN0cmwwX2Nscik7CisKKwkvKiBHYXRlIG9mZiB0aGUgVVNCIGNsb2NrICovCisJd3JpdGVsKEhXX0RJR0NUTF9DVFJMX1VTQjBfQ0xLR0FURSB8IEhXX0RJR0NUTF9DVFJMX1VTQjFfQ0xLR0FURSwKKwkJJmRpZ2N0bF9jdHJsLT5yZWdfc2V0KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9idXNfdmN4ay5jIGIvZHJpdmVycy92aWRlby9idXNfdmN4ay5jCmluZGV4IDdhZWNiOTIuLjljNDcxNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYnVzX3ZjeGsuYworKysgYi9kcml2ZXJzL3ZpZGVvL2J1c192Y3hrLmMKQEAgLTM5Myw3ICszOTMsNiBAQAogCXVuc2lnbmVkIGxvbmcgd2lkdGg7CiAJdW5zaWduZWQgbG9uZyBoZWlnaHQ7CiAJdW5zaWduZWQgbG9uZyBicHA7Ci0JdW5zaWduZWQgbG9uZyBjb21wcmVzc2lvbjsKIAogCXVuc2lnbmVkIGxvbmcgbHc7CiAKQEAgLTQwNCw3ICs0MDMsNiBAQAogCWJtcCA9IChibXBfaW1hZ2VfdCAqKSBhZGRyOwogCWlmICgoYm1wLT5oZWFkZXIuc2lnbmF0dXJlWzBdID09ICdCJykgJiYKIAkgICAgKGJtcC0+aGVhZGVyLnNpZ25hdHVyZVsxXSA9PSAnTScpKSB7Ci0JCWNvbXByZXNzaW9uICA9IGxlMzJfdG9fY3B1KGJtcC0+aGVhZGVyLmNvbXByZXNzaW9uKTsKIAkJd2lkdGggICAgICAgID0gbGUzMl90b19jcHUoYm1wLT5oZWFkZXIud2lkdGgpOwogCQloZWlnaHQgICAgICAgPSBsZTMyX3RvX2NwdShibXAtPmhlYWRlci5oZWlnaHQpOwogCQlicHAgICAgICAgICAgPSBsZTE2X3RvX2NwdShibXAtPmhlYWRlci5iaXRfY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZmJfY29uc29sZS5jIGIvZHJpdmVycy92aWRlby9jZmJfY29uc29sZS5jCmluZGV4IDU2MTg4M2EuLjMyZTg5MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2ZiX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NmYl9jb25zb2xlLmMKQEAgLTIwMyw2ICsyMDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW9fZGV2Lmg+CiAjaW5jbHVkZSA8dmlkZW9fZm9udC5oPgorI2luY2x1ZGUgPHZpZGVvX2ZvbnRfZGF0YS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ01EX0RBVEUpCiAjaW5jbHVkZSA8cnRjLmg+CkBAIC0yODYsNiArMjg3LDcgQEAKICNpZmRlZglDT05GSUdfVklERU9fTE9HTwogI2lmZGVmCUNPTkZJR19WSURFT19CTVBfTE9HTwogI2luY2x1ZGUgPGJtcF9sb2dvLmg+CisjaW5jbHVkZSA8Ym1wX2xvZ29fZGF0YS5oPgogI2RlZmluZSBWSURFT19MT0dPX1dJRFRICUJNUF9MT0dPX1dJRFRICiAjZGVmaW5lIFZJREVPX0xPR09fSEVJR0hUCUJNUF9MT0dPX0hFSUdIVAogI2RlZmluZSBWSURFT19MT0dPX0xVVF9PRkZTRVQJQk1QX0xPR09fT0ZGU0VUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N0NjkwMDAuYyBiL2RyaXZlcnMvdmlkZW8vY3Q2OTAwMC5jCmluZGV4IDNkYjYxNGQuLjBlZDVmNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY3Q2OTAwMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY3Q2OTAwMC5jCkBAIC0zNSw5ICszNSwxMSBAQAogI3VuZGVmIFZHQV9ERUJVRwogI3VuZGVmIFZHQV9EVU1QX1JFRwogI2lmZGVmIFZHQV9ERUJVRwotI2RlZmluZQlQUklOVEYoZm10LGFyZ3MuLi4pCXByaW50ZiAoZm10ICwjI2FyZ3MpCisjdW5kZWYgX0RFQlVHCisjZGVmaW5lIF9ERUJVRyAgMQogI2Vsc2UKLSNkZWZpbmUgUFJJTlRGKGZtdCxhcmdzLi4uKQorI3VuZGVmIF9ERUJVRworI2RlZmluZSBfREVCVUcgIDAKICNlbmRpZgogCiAvKiBNYWNyb3MgKi8KQEAgLTc0MCw3ICs3NDIsNyBAQAogCX0KIAltICs9IHBhcmFtLT5tbl9kaWZmOwogCW4gKz0gcGFyYW0tPm1uX2RpZmY7Ci0JUFJJTlRGICgiVkNPICVkLCBwZCAlZCwgbSAlZCBuICVkIHZsZCAlZCBcbiIsIGZ2Y28sIHBkLCBtLCBuLCB2bGQpOworCWRlYnVnKCJWQ08gJWQsIHBkICVkLCBtICVkIG4gJWQgdmxkICVkXG4iLCBmdmNvLCBwZCwgbSwgbiwgdmxkKTsKIAl4cl9jYiA9ICgoMHg3ICYgUEQpIDw8IDQpIHwgKHZsZCA9PSBwYXJhbS0+dmxkX3NldCA/IDB4MDQgOiAwKTsKIAkvKiBBbGwgZm91ciBvZiB0aGUgcmVnaXN0ZXJzIHVzZWQgZm9yIGRvdCBjbG9jayAyIChYUkM4IC0gWFJDQikgbXVzdCBiZQogCSAqIHdyaXR0ZW4sIGFuZCBpbiBvcmRlciBmcm9tIFhSQzggdG8gWFJDQiwgYmVmb3JlIHRoZSBoYXJkd2FyZSB3aWxsCkBAIC03NTEsNyArNzUzLDcgQEAKIAljdFdyaXRlX2kgKENUX1hSX08sIDB4Y2EsIDApOwkvKiBiZWNhdXNlIG9mIGEgaHcgYnVnIEkgZ3Vlc3MsIGJ1dCB3ZSB3cml0ZSAqLwogCWN0V3JpdGVfaSAoQ1RfWFJfTywgMHhjYiwgeHJfY2IpOwkvKiAwIHRvIGl0IGZvciBzYXZldHkgKi8KIAluZXdfcGl4Y2xvY2sgPSBSZWFkUGl4Q2xja0Zyb21YclJlZ3NCYWNrIChwYXJhbSk7Ci0JUFJJTlRGICgicGl4ZWxjbG9jay5zZXQgPSAlZCwgcGl4ZWxjbG9jay5yZWFsID0gJWQgXG4iLAorCWRlYnVnKCJwaXhlbGNsb2NrLnNldCA9ICVkLCBwaXhlbGNsb2NrLnJlYWwgPSAlZFxuIiwKIAkJcGl4ZWxjbG9jaywgbmV3X3BpeGNsb2NrKTsKIH0KIApAQCAtMTExOSw3ICsxMTIxLDcgQEAKIAkJcEdELT5kcHJCYXNlICY9IDB4ZmZmZmYwMDA7CiAJCXBHRC0+ZHByQmFzZSArPSAweDAwMDAxMDAwOwogCX0KLQlQUklOVEYgKCJDdXJzb3IgU3RhcnQgJXggUGF0dGVybiBTdGFydCAleFxuIiwgcEdELT5kcHJCYXNlLAorCWRlYnVnKCJDdXJzb3IgU3RhcnQgJXggUGF0dGVybiBTdGFydCAleFxuIiwgcEdELT5kcHJCYXNlLAogCQlQQVRURVJOX0FEUik7CiAJcEdELT52cHJCYXNlID0gcGNpX21lbV9iYXNlOwkvKiBEdW1teSAqLwogCXBHRC0+Y3ByQmFzZSA9IHBjaV9tZW1fYmFzZTsJLyogRHVtbXkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwppbmRleCBiY2E5ZmI1Li5hMjk4MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCkBAIC02ODUsNyArNjg1LDYgQEAKIHZvaWQgKnZpZGVvX2h3X2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXI7Ci0JaW50IHJldDsKIAl1MzIgc2l6ZTsKIAljaGFyICpwOwogCkBAIC03MzgsNyArNzM3LDYgQEAKIAogCWlmIChsY2RfaW5pdChwYXIsICZsY2RfY2ZnLCBsY2RfcGFuZWwpIDwgMCkgewogCQlwcmludGYoImxjZF9pbml0IGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CiAJfQogCkBAIC03NTQsNyArNzUyLDYgQEAKIAkJKHVuc2lnbmVkIGludClwYXItPnZyYW1fdmlydCk7CiAJaWYgKCFwYXItPnZyYW1fdmlydCkgewogCQlwcmludGYoIkdMQ0Q6IG1hbGxvYyBmb3IgZnJhbWUgYnVmZmVyIGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZzbF9kaXVfZmIuYyBiL2RyaXZlcnMvdmlkZW8vZnNsX2RpdV9mYi5jCmluZGV4IGNiNDM5MDQuLjM1MDI0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZnNsX2RpdV9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZnNsX2RpdV9mYi5jCkBAIC0yNTIsOCArMjUyLDEwIEBACiAJCWJyZWFrOwogCWNhc2UgUkVTT0xVVElPTig4MDAsIDYwMCk6CiAJCWZzbF9kaXVfbW9kZV9kYiA9ICZmc2xfZGl1X21vZGVfODAwXzYwMDsKKwkJYnJlYWs7CiAJY2FzZSBSRVNPTFVUSU9OKDEwMjQsIDc2OCk6CiAJCWZzbF9kaXVfbW9kZV9kYiA9ICZmc2xfZGl1X21vZGVfMTAyNF83Njg7CisJCWJyZWFrOwogCWNhc2UgUkVTT0xVVElPTigxMjgwLCAxMDI0KToKIAkJZnNsX2RpdV9tb2RlX2RiID0gJmZzbF9kaXVfbW9kZV8xMjgwXzEwMjQ7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9teDNmYi5jIGIvZHJpdmVycy92aWRlby9teDNmYi5jCmluZGV4IGYzMGRlYjMuLmViNzVjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKQEAgLTgyNCw3ICs4MjQsNyBAQAogCWNoYXIgKnBlbnY7CiAJdTMyIG1lbXNpemU7CiAJdW5zaWduZWQgbG9uZyB0MSwgaHN5bmNoLCB2c3luY2g7Ci0JaW50IGJpdHNfcGVyX3BpeGVsLCBpLCB0bXAsIHZlc2FfaWR4ID0gMCwgdmlkZW9tb2RlOworCWludCBiaXRzX3Blcl9waXhlbCwgaSwgdG1wLCB2aWRlb21vZGU7CiAKIAl0bXAgPSAwOwogCkBAIC04NTcsNyArODU3LDYgQEAKIAkJbW9kZSA9IChzdHJ1Y3QgY3RmYl9yZXNfbW9kZXMgKikKIAkJCQkmcmVzX21vZGVfaW5pdFt2ZXNhX21vZGVzW2ldLnJlc2luZGV4XTsKIAkJYml0c19wZXJfcGl4ZWwgPSB2ZXNhX21vZGVzW2ldLmJpdHNfcGVyX3BpeGVsOwotCQl2ZXNhX2lkeCA9IHZlc2FfbW9kZXNbaV0ucmVzaW5kZXg7CiAJfSBlbHNlIHsKIAkJbW9kZSA9IChzdHJ1Y3QgY3RmYl9yZXNfbW9kZXMgKikgJnZhcl9tb2RlOwogCQliaXRzX3Blcl9waXhlbCA9IHZpZGVvX2dldF9wYXJhbXMobW9kZSwgcGVudik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NlZDE1NnguYyBiL2RyaXZlcnMvdmlkZW8vc2VkMTU2eC5jCmluZGV4IDcwNzI1MGQuLmE2MTBiNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2VkMTU2eC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2VkMTU2eC5jCkBAIC00MSw2ICs0MSw3IEBACiAKIC8qIGluY2x1ZGUgdGhlIGZvbnQgZGF0YSAqLwogI2luY2x1ZGUgPHZpZGVvX2ZvbnQuaD4KKyNpbmNsdWRlIDx2aWRlb19mb250X2RhdGEuaD4KIAogI2lmIFZJREVPX0ZPTlRfV0lEVEggIT0gOCB8fCBWSURFT19GT05UX0hFSUdIVCAhPSAxNgogI2Vycm9yIEV4cGVjdGluZyBWSURFT19GT05UX1dJRFRIID09IDggJiYgVklERU9fRk9OVF9IRUlHSFQgPT0gMTYKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwaS9kZW1vLmMgYi9leGFtcGxlcy9hcGkvZGVtby5jCmluZGV4IDY1ZTc0OTEuLjE5ZDM4ZjYgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL2FwaS9kZW1vLmMKKysrIGIvZXhhbXBsZXMvYXBpL2RlbW8uYwpAQCAtNDgsNiArNDgsNyBAQAogCXVsb25nIHN0YXJ0LCBub3c7CiAJc3RydWN0IGRldmljZV9pbmZvICpkaTsKIAlsYmFzaXplX3QgcmxlbjsKKwlzdHJ1Y3QgZGlzcGxheV9pbmZvIGRpc2luZm87CiAKIAlpZiAoIWFwaV9zZWFyY2hfc2lnKCZzaWcpKQogCQlyZXR1cm4gLTE7CkBAIC0xNzYsNiArMTc3LDM2IEBACiAJd2hpbGUgKChlbnYgPSB1Yl9lbnZfZW51bShlbnYpKSAhPSBOVUxMKQogCQlwcmludGYoIiVzID0gJXNcbiIsIGVudiwgdWJfZW52X2dldChlbnYpKTsKIAorCXByaW50ZigiXG4qKiogRGlzcGxheSAqKipcbiIpOworCisJaWYgKHViX2Rpc3BsYXlfZ2V0X2luZm8oRElTUExBWV9UWVBFX0xDRCwgJmRpc2luZm8pKSB7CisJCXByaW50ZigiTENEIGluZm86IGZhaWxlZFxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJMQ0QgaW5mbzpcbiIpOworCQlwcmludGYoIiAgcGl4ZWwgd2lkdGg6ICAlZFxuIiwgZGlzaW5mby5waXhlbF93aWR0aCk7CisJCXByaW50ZigiICBwaXhlbCBoZWlnaHQ6ICVkXG4iLCBkaXNpbmZvLnBpeGVsX2hlaWdodCk7CisJCXByaW50ZigiICBzY3JlZW4gcm93czogICVkXG4iLCBkaXNpbmZvLnNjcmVlbl9yb3dzKTsKKwkJcHJpbnRmKCIgIHNjcmVlbiBjb2xzOiAgJWRcbiIsIGRpc2luZm8uc2NyZWVuX2NvbHMpOworCX0KKwlpZiAodWJfZGlzcGxheV9nZXRfaW5mbyhESVNQTEFZX1RZUEVfVklERU8sICZkaXNpbmZvKSkgeworCQlwcmludGYoInZpZGVvIGluZm86IGZhaWxlZFxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJ2aWRlbyBpbmZvOlxuIik7CisJCXByaW50ZigiICBwaXhlbCB3aWR0aDogICVkXG4iLCBkaXNpbmZvLnBpeGVsX3dpZHRoKTsKKwkJcHJpbnRmKCIgIHBpeGVsIGhlaWdodDogJWRcbiIsIGRpc2luZm8ucGl4ZWxfaGVpZ2h0KTsKKwkJcHJpbnRmKCIgIHNjcmVlbiByb3dzOiAgJWRcbiIsIGRpc2luZm8uc2NyZWVuX3Jvd3MpOworCQlwcmludGYoIiAgc2NyZWVuIGNvbHM6ICAlZFxuIiwgZGlzaW5mby5zY3JlZW5fY29scyk7CisJfQorCisJcHJpbnRmKCIqKiogUHJlc3MgYW55IGtleSB0byBjb250aW51ZSAqKipcbiIpOworCXByaW50ZigiZ290IGNoYXIgMHgleFxuIiwgdWJfZ2V0YygpKTsKKworCS8qCisJICogVGhpcyBvbmx5IGNsZWFycyBtZXNzYWdlcyBvbiBzY3JlZW4sIG5vdCBvbiBzZXJpYWwgcG9ydC4gSXQgaXMKKwkgKiBlcXVpdmFsZW50IHRvIGEgbm8tb3AgaWYgbm8gZGlzcGxheSBpcyBhdmFpbGFibGUuCisJICovCisJdWJfZGlzcGxheV9jbGVhcigpOworCiAJLyogcmVzZXQgKi8KIAlwcmludGYoIlxuKioqIFJlc2V0dGluZyBib2FyZCAqKipcbiIpOwogCXViX3Jlc2V0KCk7CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcGkvZ2x1ZS5jIGIvZXhhbXBsZXMvYXBpL2dsdWUuYwppbmRleCBlZmY2YTdlLi5kOTA3ZTNmIDEwMDY0NAotLS0gYS9leGFtcGxlcy9hcGkvZ2x1ZS5jCisrKyBiL2V4YW1wbGVzL2FwaS9nbHVlLmMKQEAgLTQwMiwzICs0MDIsMzQgQEAKIAogCXJldHVybiBlbnZfbmFtZTsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBkaXNwbGF5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCB1Yl9kaXNwbGF5X2dldF9pbmZvKGludCB0eXBlLCBzdHJ1Y3QgZGlzcGxheV9pbmZvICpkaSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghc3lzY2FsbChBUElfRElTUExBWV9HRVRfSU5GTywgJmVyciwgKHVpbnQzMl90KXR5cGUsICh1aW50MzJfdClkaSkpCisJCXJldHVybiBBUElfRVNZU0M7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgdWJfZGlzcGxheV9kcmF3X2JpdG1hcCh1bG9uZyBiaXRtYXAsIGludCB4LCBpbnQgeSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghc3lzY2FsbChBUElfRElTUExBWV9EUkFXX0JJVE1BUCwgJmVyciwgYml0bWFwLCB4LCB5KSkKKwkJcmV0dXJuIEFQSV9FU1lTQzsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgdWJfZGlzcGxheV9jbGVhcih2b2lkKQoreworCXN5c2NhbGwoQVBJX0RJU1BMQVlfQ0xFQVIsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBpL2dsdWUuaCBiL2V4YW1wbGVzL2FwaS9nbHVlLmgKaW5kZXggNmJmNDdkMC4uZTQzZjdkOSAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvYXBpL2dsdWUuaAorKysgYi9leGFtcGxlcy9hcGkvZ2x1ZS5oCkBAIC03Nyw0ICs3Nyw5IEBACiBpbnQJCQl1Yl9kZXZfcmVjdihpbnQgaGFuZGxlLCB2b2lkICpidWYsIGludCBsZW4sIGludCAqcmxlbik7CiBzdHJ1Y3QgZGV2aWNlX2luZm8gKgl1Yl9kZXZfZ2V0KGludCk7CiAKKy8qIGRpc3BsYXkgKi8KK2ludCB1Yl9kaXNwbGF5X2dldF9pbmZvKGludCB0eXBlLCBzdHJ1Y3QgZGlzcGxheV9pbmZvICpkaSk7CitpbnQgdWJfZGlzcGxheV9kcmF3X2JpdG1hcCh1bG9uZyBiaXRtYXAsIGludCB4LCBpbnQgeSk7Cit2b2lkIHViX2Rpc3BsYXlfY2xlYXIodm9pZCk7CisKICNlbmRpZiAvKiBfQVBJX0dMVUVfSF8gKi8KZGlmZiAtLWdpdCBhL2ZzL3lhZmZzMi95YWZmc19ndXRzLmMgYi9mcy95YWZmczIveWFmZnNfZ3V0cy5jCmluZGV4IGM0MzI5YWYuLmYwZWY4ZGIgMTAwNjQ0Ci0tLSBhL2ZzL3lhZmZzMi95YWZmc19ndXRzLmMKKysrIGIvZnMveWFmZnMyL3lhZmZzX2d1dHMuYwpAQCAtODUxLDkgKzg1MSw4IEBACiAJaW50IHJldHZhbCA9IFlBRkZTX09LOwogCV9fdTggKmRhdGEgPSB5YWZmc19HZXRUZW1wQnVmZmVyKGRldiwgX19MSU5FX18pOwogCXlhZmZzX0V4dGVuZGVkVGFncyB0YWdzOwotCWludCByZXN1bHQ7CiAKLQlyZXN1bHQgPSB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmtJbk5BTkQsIGRhdGEsICZ0YWdzKTsKKwl5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmtJbk5BTkQsIGRhdGEsICZ0YWdzKTsKIAogCWlmKHRhZ3MuZWNjUmVzdWx0ID4gWUFGRlNfRUNDX1JFU1VMVF9OT19FUlJPUikKIAkJcmV0dmFsID0gWUFGRlNfRkFJTDsKQEAgLTM0NjAsNyArMzQ1OSw2IEBACiAKIAlpbnQgcHJldkNodW5rSWQ7CiAJaW50IHJldFZhbCA9IDA7Ci0JaW50IHJlc3VsdCA9IDA7CiAKIAlpbnQgbmV3Q2h1bmtJZDsKIAl5YWZmc19FeHRlbmRlZFRhZ3MgbmV3VGFnczsKQEAgLTM0ODQsNyArMzQ4Miw3IEBACiAJCXByZXZDaHVua0lkID0gaW4tPmNodW5rSWQ7CiAKIAkJaWYgKHByZXZDaHVua0lkID49IDApIHsKLQkJCXJlc3VsdCA9IHlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBwcmV2Q2h1bmtJZCwKKwkJCXlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBwcmV2Q2h1bmtJZCwKIAkJCQkJCQlidWZmZXIsICZvbGRUYWdzKTsKIAogCQkJeWFmZnNfVmVyaWZ5T2JqZWN0SGVhZGVyKGluLG9oLCZvbGRUYWdzLDApOwpAQCAtMzc3MSw3ICszNzY5LDYgQEAKIAl5YWZmc19PYmplY3QgKnRoZU9iajsKIAlpbnQgdXNhZ2U7CiAJaW50IGk7Ci0JaW50IHB1c2hvdXQ7CiAKIAlpZiAoZGV2LT5uU2hvcnRPcENhY2hlcyA+IDApIHsKIAkJLyogVHJ5IGZpbmQgYSBub24tZGlydHkgb25lLi4uICovCkBAIC0zNzkwLDcgKzM3ODcsNiBAQAogCQkJdGhlT2JqID0gTlVMTDsKIAkJCXVzYWdlID0gLTE7CiAJCQljYWNoZSA9IE5VTEw7Ci0JCQlwdXNob3V0ID0gLTE7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5TaG9ydE9wQ2FjaGVzOyBpKyspIHsKIAkJCQlpZiAoZGV2LT5zckNhY2hlW2ldLm9iamVjdCAmJgpAQCAtMzgwMCw3ICszNzk2LDYgQEAKIAkJCQkJdXNhZ2UgPSBkZXYtPnNyQ2FjaGVbaV0ubGFzdFVzZTsKIAkJCQkJdGhlT2JqID0gZGV2LT5zckNhY2hlW2ldLm9iamVjdDsKIAkJCQkJY2FjaGUgPSAmZGV2LT5zckNhY2hlW2ldOwotCQkJCQlwdXNob3V0ID0gaTsKIAkJCQl9CiAJCQl9CiAKQEAgLTUyMzQsNyArNTIyOSw2IEBACiAJaW50IHN0YXJ0SXRlcmF0b3I7CiAJaW50IGVuZEl0ZXJhdG9yOwogCWludCBuQmxvY2tzVG9TY2FuID0gMDsKLQlpbnQgcmVzdWx0OwogCiAJaW50IGNodW5rOwogCWludCBjOwpAQCAtNTM3Nyw3ICs1MzcxLDcgQEAKIAkJCS8qIFJlYWQgdGhlIHRhZ3MgYW5kIGRlY2lkZSB3aGF0IHRvIGRvICovCiAJCQljaHVuayA9IGJsayAqIGRldi0+bkNodW5rc1BlckJsb2NrICsgYzsKIAotCQkJcmVzdWx0ID0geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIGNodW5rLCBOVUxMLAorCQkJeWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIGNodW5rLCBOVUxMLAogCQkJCQkJCSZ0YWdzKTsKIAogCQkJLyogTGV0J3MgaGF2ZSBhIGdvb2QgbG9vayBhdCB0aGlzIGNodW5rLi4uICovCkBAIC01NDc0LDcgKzU0NjgsNyBAQAogCQkJCXlhZmZzX1NldENodW5rQml0KGRldiwgYmxrLCBjKTsKIAkJCQliaS0+cGFnZXNJblVzZSsrOwogCi0JCQkJcmVzdWx0ID0geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIGNodW5rLAorCQkJCXlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBjaHVuaywKIAkJCQkJCQkJY2h1bmtEYXRhLAogCQkJCQkJCQlOVUxMKTsKIApAQCAtNTc0NCw4ICs1NzM4LDYgQEAKIAl5YWZmc19PYmplY3RIZWFkZXIgKm9oOwogCXlhZmZzX0RldmljZSAqZGV2ID0gaW4tPm15RGV2OwogCXlhZmZzX0V4dGVuZGVkVGFncyB0YWdzOwotCWludCByZXN1bHQ7Ci0JaW50IGFsbG9jX2ZhaWxlZCA9IDA7CiAKIAlpZighaW4pCiAJCXJldHVybjsKQEAgLTU3NjAsNyArNTc1Miw4IEBACiAJCWluLT5sYXp5TG9hZGVkID0gMDsKIAkJY2h1bmtEYXRhID0geWFmZnNfR2V0VGVtcEJ1ZmZlcihkZXYsIF9fTElORV9fKTsKIAotCQlyZXN1bHQgPSB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldixpbi0+Y2h1bmtJZCxjaHVua0RhdGEsJnRhZ3MpOworCQl5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgaW4tPmNodW5rSWQsCisJCQkJCQljaHVua0RhdGEsICZ0YWdzKTsKIAkJb2ggPSAoeWFmZnNfT2JqZWN0SGVhZGVyICopIGNodW5rRGF0YTsKIAogCQlpbi0+eXN0X21vZGUgPSBvaC0+eXN0X21vZGU7CkBAIC01Nzg1LDggKzU3NzgsNiBAQAogCQlpZihpbi0+dmFyaWFudFR5cGUgPT0gWUFGRlNfT0JKRUNUX1RZUEVfU1lNTElOSyl7CiAJCQkgaW4tPnZhcmlhbnQuc3ltTGlua1ZhcmlhbnQuYWxpYXMgPQogCQkJCQkJICAgIHlhZmZzX0Nsb25lU3RyaW5nKG9oLT5hbGlhcyk7Ci0JCQlpZighaW4tPnZhcmlhbnQuc3ltTGlua1ZhcmlhbnQuYWxpYXMpCi0JCQkJYWxsb2NfZmFpbGVkID0gMTsgLyogTm90IHJldHVybmVkIHRvIGNhbGxlciAqLwogCQl9CiAKIAkJeWFmZnNfUmVsZWFzZVRlbXBCdWZmZXIoZGV2LGNodW5rRGF0YSwgX19MSU5FX18pOwpAQCAtNTgwMyw5ICs1Nzk0LDcgQEAKIAlpbnQgbkJsb2Nrc1RvU2NhbiA9IDA7CiAKIAlpbnQgY2h1bms7Ci0JaW50IHJlc3VsdDsKIAlpbnQgYzsKLQlpbnQgZGVsZXRlZDsKIAl5YWZmc19CbG9ja1N0YXRlIHN0YXRlOwogCXlhZmZzX09iamVjdCAqaGFyZExpc3QgPSBOVUxMOwogCXlhZmZzX0Jsb2NrSW5mbyAqYmk7CkBAIC01OTcxLDggKzU5NjAsNiBAQAogCiAJCXN0YXRlID0gYmktPmJsb2NrU3RhdGU7CiAKLQkJZGVsZXRlZCA9IDA7Ci0KIAkJLyogRm9yIGVhY2ggY2h1bmsgaW4gZWFjaCBibG9jayB0aGF0IG5lZWRzIHNjYW5uaW5nLi4uLiAqLwogCQlmb3VuZENodW5rc0luQmxvY2sgPSAwOwogCQlmb3IgKGMgPSBkZXYtPm5DaHVua3NQZXJCbG9jayAtIDE7CkBAIC01OTg1LDcgKzU5NzIsNyBAQAogCiAJCQljaHVuayA9IGJsayAqIGRldi0+bkNodW5rc1BlckJsb2NrICsgYzsKIAotCQkJcmVzdWx0ID0geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIGNodW5rLCBOVUxMLAorCQkJeWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIGNodW5rLCBOVUxMLAogCQkJCQkJCSZ0YWdzKTsKIAogCQkJLyogTGV0J3MgaGF2ZSBhIGdvb2QgbG9vayBhdCB0aGlzIGNodW5rLi4uICovCkBAIC02MTMyLDcgKzYxMTksNyBAQAogCQkJCQkgKiBsaXZpbmcgd2l0aCBpbnZhbGlkIGRhdGEgdW50aWwgbmVlZGVkLgogCQkJCQkgKi8KIAotCQkJCQlyZXN1bHQgPSB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwKKwkJCQkJeWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsCiAJCQkJCQkJCQljaHVuaywKIAkJCQkJCQkJCWNodW5rRGF0YSwKIAkJCQkJCQkJCU5VTEwpOwpAQCAtNjY1NCw3ICs2NjQxLDYgQEAKIAl9CiAjZW5kaWYKIAllbHNlIHsKLQkJaW50IHJlc3VsdDsKIAkJX191OCAqYnVmZmVyID0geWFmZnNfR2V0VGVtcEJ1ZmZlcihvYmotPm15RGV2LCBfX0xJTkVfXyk7CiAKIAkJeWFmZnNfT2JqZWN0SGVhZGVyICpvaCA9ICh5YWZmc19PYmplY3RIZWFkZXIgKikgYnVmZmVyOwpAQCAtNjY2Miw3ICs2NjQ4LDcgQEAKIAkJbWVtc2V0KGJ1ZmZlciwgMCwgb2JqLT5teURldi0+bkRhdGFCeXRlc1BlckNodW5rKTsKIAogCQlpZiAob2JqLT5jaHVua0lkID49IDApIHsKLQkJCXJlc3VsdCA9IHlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQob2JqLT5teURldiwKKwkJCXlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQob2JqLT5teURldiwKIAkJCQkJCQlvYmotPmNodW5rSWQsIGJ1ZmZlciwKIAkJCQkJCQlOVUxMKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMveWFmZnMyL3lhZmZzX3RhZ3Njb21wYXQuYyBiL2ZzL3lhZmZzMi95YWZmc190YWdzY29tcGF0LmMKaW5kZXggNzBhOGE4Yy4uZTg3MjMyMyAxMDA2NDQKLS0tIGEvZnMveWFmZnMyL3lhZmZzX3RhZ3Njb21wYXQuYworKysgYi9mcy95YWZmczIveWFmZnNfdGFnc2NvbXBhdC5jCkBAIC0xMzYsOSArMTM2LDggQEAKIH0KIAogc3RhdGljIHZvaWQgeWFmZnNfR2V0VGFnc0Zyb21TcGFyZSh5YWZmc19EZXZpY2UgKiBkZXYsIHlhZmZzX1NwYXJlICogc3BhcmVQdHIsCi0JCQkJICAgeWFmZnNfVGFncyAqIHRhZ3NQdHIpCisJCQkJICAgeWFmZnNfVGFnc1VuaW9uICp0dSkKIHsKLQl5YWZmc19UYWdzVW5pb24gKnR1ID0gKHlhZmZzX1RhZ3NVbmlvbiAqKSB0YWdzUHRyOwogCWludCByZXN1bHQ7CiAKIAl0dS0+YXNCeXRlc1swXSA9IHNwYXJlUHRyLT50YWdCeXRlMDsKQEAgLTE1MCw3ICsxNDksNyBAQAogCXR1LT5hc0J5dGVzWzZdID0gc3BhcmVQdHItPnRhZ0J5dGU2OwogCXR1LT5hc0J5dGVzWzddID0gc3BhcmVQdHItPnRhZ0J5dGU3OwogCi0JcmVzdWx0ID0geWFmZnNfQ2hlY2tFQ0NPblRhZ3ModGFnc1B0cik7CisJcmVzdWx0ID0geWFmZnNfQ2hlY2tFQ0NPblRhZ3MoJnR1LT5hc1RhZ3MpOwogCWlmIChyZXN1bHQgPiAwKSB7CiAJCWRldi0+dGFnc0VjY0ZpeGVkKys7CiAJfSBlbHNlIGlmIChyZXN1bHQgPCAwKSB7CkBAIC00MzcsNyArNDM2LDcgQEAKIHsKIAogCXlhZmZzX1NwYXJlIHNwYXJlOwotCXlhZmZzX1RhZ3MgdGFnczsKKwl5YWZmc19UYWdzVW5pb24gdGFnczsKIAl5YWZmc19FQ0NSZXN1bHQgZWNjUmVzdWx0OwogCiAJc3RhdGljIHlhZmZzX1NwYXJlIHNwYXJlRkY7CkBAIC00NjcsMTAgKzQ2NiwxMCBAQAogCQkJaWYgKGVUYWdzLT5jaHVua1VzZWQpIHsKIAkJCQl5YWZmc19HZXRUYWdzRnJvbVNwYXJlKGRldiwgJnNwYXJlLCAmdGFncyk7CiAKLQkJCQllVGFncy0+b2JqZWN0SWQgPSB0YWdzLm9iamVjdElkOwotCQkJCWVUYWdzLT5jaHVua0lkID0gdGFncy5jaHVua0lkOwotCQkJCWVUYWdzLT5ieXRlQ291bnQgPSB0YWdzLmJ5dGVDb3VudDsKLQkJCQllVGFncy0+c2VyaWFsTnVtYmVyID0gdGFncy5zZXJpYWxOdW1iZXI7CisJCQkJZVRhZ3MtPm9iamVjdElkID0gdGFncy5hc1RhZ3Mub2JqZWN0SWQ7CisJCQkJZVRhZ3MtPmNodW5rSWQgPSB0YWdzLmFzVGFncy5jaHVua0lkOworCQkJCWVUYWdzLT5ieXRlQ291bnQgPSB0YWdzLmFzVGFncy5ieXRlQ291bnQ7CisJCQkJZVRhZ3MtPnNlcmlhbE51bWJlciA9IHRhZ3MuYXNUYWdzLnNlcmlhbE51bWJlcjsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlLy5naXRpZ25vcmUgYi9pbmNsdWRlLy5naXRpZ25vcmUKaW5kZXggZWMyMjRjNS4uN2NkM2U5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS8uZ2l0aWdub3JlCisrKyBiL2luY2x1ZGUvLmdpdGlnbm9yZQpAQCAtMSw1ICsxLDYgQEAKIC9hdXRvY29uZi5tayoKIC9hc20KIC9ibXBfbG9nby5oCisvYm1wX2xvZ29fZGF0YS5oCiAvY29uZmlnLmgKIC9jb25maWcubWsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kZXN0ZWNoL2FuZGVzX3BjdS5oIGIvaW5jbHVkZS9hbmRlc3RlY2gvYW5kZXNfcGN1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkYmQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYW5kZXN0ZWNoL2FuZGVzX3BjdS5oCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDExIEFuZGVzIFRlY2hub2xvZ3kgQ29ycAorICogTWFjcGF1bCBMaW4gPG1hY3BhdWxAYW5kZXN0ZWNoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogQW5kZXMgUG93ZXIgQ29udHJvbCBVbml0CisgKi8KKyNpZm5kZWYgX19BTkRFU19QQ1VfSAorI2RlZmluZSBfX0FOREVTX1BDVV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwY3MgeworCXVuc2lnbmVkIGludAljcjsJCS8qIFBDU3ggQ29uZmlndXJhdGlvbiAoY2xvY2sgc2NhbGluZykgKi8KKwl1bnNpZ25lZCBpbnQJcGFybTsJCS8qIFBDU3ggUGFyYW1ldGVyKi8KKwl1bnNpZ25lZCBpbnQJc3RhdDE7CQkvKiBQQ1N4IFN0YXR1cyAxICovCisJdW5zaWduZWQgaW50CXN0YXQyOwkJLyogUENTeCBTdHVzdHMgMiAqLworCXVuc2lnbmVkIGludAlwZGQ7CQkvKiBQQ1N4IFBERCAqLworfTsKKworc3RydWN0IGFuZGVzX3BjdSB7CisJdW5zaWduZWQgaW50CXJldjsJCS8qIDB4MDAgLSBQQ1UgUmV2aXNpb24gKi8KKwl1bnNpZ25lZCBpbnQJc3BpbmZvOwkJLyogMHgwNCAtIFNjcmF0Y2ggUGFkIEluZm8gKi8KKwl1bnNpZ25lZCBpbnQJcnN2ZDFbMl07CS8qIDB4MDgtMHgwQzogUmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQJc29jX2lkOwkJLyogMHgxMCAtIFNvQyBJRCAqLworCXVuc2lnbmVkIGludAlzb2NfYWhiOwkvKiAweDE0IC0gU29DIEFIQiBjb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgaW50CXNvY19hcGI7CS8qIDB4MTggLSBTb0MgQVBCIGNvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJcnN2ZDI7CQkvKiAweDFDICovCisJdW5zaWduZWQgaW50CWRjc3JjcjA7CS8qIDB4MjAgLSBEcml2aW5nIENhcGFiaWxpdHkKKwkJCQkJCWFuZCBTbGV3IFJhdGUgQ29udHJvbCAwICovCisJdW5zaWduZWQgaW50CWRjc3JjcjE7CS8qIDB4MjQgLSBEcml2aW5nIENhcGFiaWxpdHkKKwkJCQkJCWFuZCBTbGV3IFJhdGUgQ29udHJvbCAxICovCisJdW5zaWduZWQgaW50CWRjc3JjcjI7CS8qIDB4MjggLSBEcml2aW5nIENhcGFiaWxpdHkKKwkJCQkJCWFuZCBTbGV3IFJhdGUgQ29udHJvbCAyICovCisJdW5zaWduZWQgaW50CXJzdmQzOwkJLyogMHgyQyAqLworCXVuc2lnbmVkIGludAltZnBzcjA7CQkvKiAweDMwIC0gTXVsdGktRnVuYyBQb3J0IFNldHRpbmcgMCAqLworCXVuc2lnbmVkIGludAltZnBzcjE7CQkvKiAweDM0IC0gTXVsdGktRnVuYyBQb3J0IFNldHRpbmcgMSAqLworCXVuc2lnbmVkIGludAlkbWFlczsJCS8qIDB4MzggLSBETUEgRW5naW5lIFNlbGVjdGlvbiAqLworCXVuc2lnbmVkIGludAlyc3ZkNDsJCS8qIDB4M0MgKi8KKwl1bnNpZ25lZCBpbnQJb3NjYzsJCS8qIDB4NDAgLSBPU0MgQ29udHJvbCAqLworCXVuc2lnbmVkIGludAlwd21jZDsJCS8qIDB4NDQgLSBQV00gQ2xvY2sgZGl2aWRlciAqLworCXVuc2lnbmVkIGludAlzb2NtaXNjOwkvKiAweDQ4IC0gU29DIE1pc2MuICovCisJdW5zaWduZWQgaW50CXJzdmQ1WzEzXTsJLyogMHg0Qy0weDdDOiBSZXNlcnZlZCAqLworCXVuc2lnbmVkIGludAlic21jcjsJCS8qIDB4ODAgLSBCU00gQ29udHJvcmwgKi8KKwl1bnNpZ25lZCBpbnQJYnNtc3Q7CQkvKiAweDg0IC0gQlNNIFN0YXR1cyAqLworCXVuc2lnbmVkIGludAl3ZXM7CQkvKiAweDg4IC0gV2FrZXVwIEV2ZW50IFNlbnNpdGl2aXR5Ki8KKwl1bnNpZ25lZCBpbnQJd2VzdDsJCS8qIDB4OEMgLSBXYWtldXAgRXZlbnQgU3RhdHVzICovCisJdW5zaWduZWQgaW50CXJzdHRpbWluZzsJLyogMHg5MCAtIFJlc2V0IFRpbWluZyAgKi8KKwl1bnNpZ25lZCBpbnQJaW50cl9zdDsJLyogMHg5NCAtIFBDVSBJbnRlcnJ1cHQgU3RhdHVzICovCisJdW5zaWduZWQgaW50CXJzdmQ2WzJdOwkvKiAweDk4LTB4OUM6IFJlc2VydmVkICovCisJc3RydWN0IHBjcwlwY3MxOwkJLyogMHhBMC0weEIwOiBQQ1MxIChjbG9jayBzY2FsaW5nKSAqLworCXVuc2lnbmVkIGludAlwY3Nyc3ZkMVszXTsJLyogMHhCNC0weEJDOiBSZXNlcnZlZCAqLworCXN0cnVjdCBwY3MJcGNzMjsJCS8qIDB4QzAtMHhEMDogUENTMiAoQUhCIGNsb2NrIGdhdGluZykgKi8KKwl1bnNpZ25lZCBpbnQJcGNzcnN2ZDJbM107CS8qIDB4RDQtMHhEQzogUmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgcGNzCXBjczM7CQkvKiAweEUwLTB4RjA6IFBDUzMgKEFQQiBjbG9jayBnYXRpbmcpICovCisJdW5zaWduZWQgaW50CXBjc3JzdmQzWzNdOwkvKiAweEY0LTB4RkM6IFJlc2VydmVkICovCisJc3RydWN0IHBjcwlwY3M0OwkJLyogMHgxMDAtMHgxMTA6IFBDUzQgbWFpbiBQTEwgc2NhbGluZyAqLworCXVuc2lnbmVkIGludAlwY3Nyc3ZkNFszXTsJLyogMHgxMTQtMHgxMUM6IFJlc2VydmVkICovCisJc3RydWN0IHBjcwlwY3M1OwkJLyogMHgxMjAtMHgxMzA6IFBDUzUgUENJIFBMTCBzY2FsaW5nICovCisJdW5zaWduZWQgaW50CXBjc3JzdmQ1WzNdOwkvKiAweDEzNC0weDEzQzogUmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgcGNzCXBjczY7CQkvKiAweDE0MC0weDE1MDogUENTNiBBQzk3IFBMTCBzY2FsaW5nICovCisJdW5zaWduZWQgaW50CXBjc3JzdmQ2WzNdOwkvKiAweDE1NC0weDE1QzogUmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgcGNzCXBjczc7CQkvKiAweDE2MC0weDE3MDogUENTNyBHTUFDIFBMTCBzY2FsaW5nICovCisJdW5zaWduZWQgaW50CXBjc3JzdmQ3WzNdOwkvKiAweDE3NC0weDE3QzogUmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgcGNzCXBjczg7CQkvKiAweDE4MC0weDE5MDogUENTOCB2b2x0YWdlIHNjYWxpbmcgKi8KKwl1bnNpZ25lZCBpbnQJcGNzcnN2ZDhbM107CS8qIDB4MTk0LTB4MTlDOiBSZXNlcnZlZCAqLworCXN0cnVjdCBwY3MJcGNzOTsJCS8qIDB4MUEwLTB4MUIwOiBQQ1M5IHBvd2VyIGNvbnRyb2wgKi8KKwl1bnNpZ25lZCBpbnQJcGNzcnN2ZDlbOTNdOwkvKiAweDFCNC0weDNGQzogUmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBpbnQJcG1zcGRtWzQwXTsJLyogMHg0MDAtMHg0ZkM6IFBvd2VyIE1hbmFnZXIKKwkJCQkJCQlTY3JhdGNoIFBhZCBNZW1vcnkgMCAqLworfTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFBDVSBSZXZpc2lvbiBSZWdpc3RlciAocm8pCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1JFVl9OVU1CRVJfUENTKHgpCSgoKHgpID4+IDApICYgMHhmZikKKyNkZWZpbmUgQU5ERVNfUENVX1JFVl9WRVIoeCkJCSgoKHgpID4+IDE2KSAmIDB4ZmZmZikKKworLyoKKyAqIFNjcmF0Y2ggUGFkIEluZm8gUmVnaXN0ZXIgKHJvKQorICovCisjZGVmaW5lIEFOREVTX1BDVV9TUElORk9fU0laRSh4KQkoKCh4KSA+PiAwKSAmIDB4ZmYpCisjZGVmaW5lIEFOREVTX1BDVV9TUElORk9fT0ZGU0VUKHgpCSgoKHgpID4+IDgpICYgMHhmKQorCisvKgorICogU29DIElEIFJlZ2lzdGVyIChybykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfU09DX0lEX1ZFUl9NSU5PUih4KQkoKCh4KSA+PiAwKSAmIDB4ZikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19JRF9WRVJfTUFKT1IoeCkJKCgoeCkgPj4gNCkgJiAweGZmZikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19JRF9ERVZJQ0VJRCh4KQkoKCh4KSA+PiAxNikgJiAweGZmZmYpCisKKy8qCisgKiBTb0MgQUhCIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKHJvKQorICovCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0FIQkMoeCkJCSgoeCkgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQVBCUkVHKHgpCQkoKHgpIDw8IDEpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0FQQih4KQkJKCh4KSA8PCAyKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9ETE0xKHgpCQkoKHgpIDw8IDMpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX1NQSVJPTSh4KQkJKCh4KSA8PCA0KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9ERFIyQyh4KQkJKCh4KSA8PCA1KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9ERFIyTUVNKHgpCQkoKHgpIDw8IDYpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0RNQUMoeCkJCSgoeCkgPDwgNykKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfRExNMih4KQkJKCh4KSA8PCA4KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9HUFUoeCkJCSgoeCkgPDwgOSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfR01BQyh4KQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfSURFKHgpCQkoKHgpIDw8IDEzKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9VU0JPVEcoeCkJCSgoeCkgPDwgMTQpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0lOVEMoeCkJCSgoeCkgPDwgMTUpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0xQQ0lPKHgpCQkoKHgpIDw8IDE2KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9MUENSRUcoeCkJCSgoeCkgPDwgMTcpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX1BDSUlPKHgpCQkoKHgpIDw8IDE4KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9QQ0lNRU0oeCkJCSgoeCkgPDwgMTkpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0wyQ0MoeCkJCSgoeCkgPDwgMjApCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0FIQjJBSEJSRUcoeCkJCSgoeCkgPDwgMjcpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0FIQjJBSEJNRU0wKHgpCSgoeCkgPDwgMjgpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0FIQjJBSEJNRU0xKHgpCSgoeCkgPDwgMjkpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0FIQjJBSEJNRU0yKHgpCSgoeCkgPDwgMzApCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0FIQjJBSEJNRU0zKHgpCSgoeCkgPDwgMzEpCisKKy8qCisgKiBTb0MgQVBCIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKHJvKQorICovCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX0NGQyh4KQkoKHgpIDw8IDEpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX1NTUCh4KQkoKHgpIDw8IDIpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX1VBUlQxKHgpCSgoeCkgPDwgMykKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfU0RDKHgpCSgoeCkgPDwgNSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfQUM5N0kyUyh4KQkoKHgpIDw8IDYpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX1VBUlQyKHgpCSgoeCkgPDwgOCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfUENVKHgpCSgoeCkgPDwgMTYpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX1RNUih4KQkoKHgpIDw8IDE3KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FQQl9XRFQoeCkJKCh4KSA8PCAxOCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfUlRDKHgpCSgoeCkgPDwgMTkpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX0dQSU8oeCkJKCh4KSA8PCAyMCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfSTJDKHgpCSgoeCkgPDwgMjIpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX1BXTSh4KQkoKHgpIDw8IDIzKQorCisvKgorICogRHJpdmluZyBDYXBhYmlsaXR5IGFuZCBTbGV3IFJhdGUgQ29udHJvbCBSZWdpc3RlciAwIChydykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMF9UUklBSEIoeCkJKCgoeCkgJiAweDFmKSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMF9MUEMoeCkJKCgoeCkgJiAweGYpIDw8IDgpCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IwX1VMUEkoeCkJKCgoeCkgJiAweGYpIDw8IDEyKQorI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMF9HTUFDKHgpCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjBfR1BVKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKKworLyoKKyAqIERyaXZpbmcgQ2FwYWJpbGl0eSBhbmQgU2xldyBSYXRlIENvbnRyb2wgUmVnaXN0ZXIgMSAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjFfSTJDKHgpCSgoKHgpICYgMHhmKSA8PCAwKQorCisvKgorICogRHJpdmluZyBDYXBhYmlsaXR5IGFuZCBTbGV3IFJhdGUgQ29udHJvbCBSZWdpc3RlciAyIChydykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMl9VQVJUMSh4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjJfVUFSVDIoeCkJKCgoeCkgJiAweGYpIDw8IDQpCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IyX0FDOTcoeCkJKCgoeCkgJiAweGYpIDw8IDgpCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IyX1NQSSh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IyX1NEKHgpCQkoKCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IyX0NGQyh4KQkoKCh4KSAmIDB4ZikgPDwgMjApCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IyX0dQSU8oeCkJKCgoeCkgJiAweGYpIDw8IDI0KQorI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMl9QQ1UoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorCisvKgorICogTXVsdGktZnVuY3Rpb24gUG9ydCBTZXR0aW5nIFJlZ2lzdGVyIDAgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjBfUENJTU9ERSh4KQkJKCh4KSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IwX0lERU1PREUoeCkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMF9NSU5JX1RDMDEoeCkJCSgoeCkgPDwgMikKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMF9BSEJfREVCVUcoeCkJCSgoeCkgPDwgMykKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMF9BSEJfVEFSR0VUKHgpCQkoKHgpIDw8IDQpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjBfREVGQVVMVF9JVkIoeCkJCSgoKHgpICYgMHg3KSA8PCAyOCkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMF9ERUZBVUxUX0VORElBTih4KQkoKHgpIDw8IDMxKQorCisvKgorICogTXVsdGktZnVuY3Rpb24gUG9ydCBTZXR0aW5nIFJlZ2lzdGVyIDEgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfU1VTUEVORCh4KQkJKCh4KSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX1BXTTAoeCkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9QV00xKHgpCQkoKHgpIDw8IDIpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfQUM5N0NMS09VVCh4KQkJKCh4KSA8PCAzKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX1BXUkVOKHgpCQkoKHgpIDw8IDQpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfUE1FKHgpCQkJKCh4KSA8PCA1KQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX0kyQyh4KQkJCSgoeCkgPDwgNikKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9VQVJUMSh4KQkJKCh4KSA8PCA3KQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX1VBUlQyKHgpCQkoKHgpIDw8IDgpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfU1BJKHgpCQkJKCh4KSA8PCA5KQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX1NEKHgpCQkJKCh4KSA8PCAxMCkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9HUFVQTExTUkMoeCkJCSgoeCkgPDwgMjcpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfRFZPTU9ERSh4KQkJKCh4KSA8PCAyOCkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9IU01QX0ZBU1RfUkVRKHgpCSgoeCkgPDwgMjkpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfQUhCX0ZBU1RfUkVRKHgpCSgoeCkgPDwgMzApCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfUE1VUl9FWFRfSU5UKHgpCSgoeCkgPDwgMzEpCisKKy8qCisgKiBETUEgRW5naW5lIFNlbGVjdGlvbiBSZWdpc3RlciAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX0RNQUVTX0FDOTdSWCh4KQkJKCh4KSA8PCAyKQorI2RlZmluZSBBTkRFU19QQ1VfRE1BRVNfQUM5N1RYKHgpCQkoKHgpIDw8IDMpCisjZGVmaW5lIEFOREVTX1BDVV9ETUFFU19VQVJUMVJYKHgpCQkoKHgpIDw8IDQpCisjZGVmaW5lIEFOREVTX1BDVV9ETUFFU19VQVJUMVRYKHgpCQkoKHgpIDw8IDUpCisjZGVmaW5lIEFOREVTX1BDVV9ETUFFU19VQVJUMlJYKHgpCQkoKHgpIDw8IDYpCisjZGVmaW5lIEFOREVTX1BDVV9ETUFFU19VQVJUMlRYKHgpCQkoKHgpIDw8IDcpCisjZGVmaW5lIEFOREVTX1BDVV9ETUFFU19TRERNQSh4KQkJKCh4KSA8PCA4KQorI2RlZmluZSBBTkRFU19QQ1VfRE1BRVNfQ0ZDRE1BKHgpCQkoKHgpIDw8IDkpCisKKy8qCisgKiBPU0MgQ29udHJvbCBSZWdpc3RlciAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX09TQ0NfT1NDSF9PRkYoeCkJKCh4KSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfT1NDQ19PU0NIX1NUQUJMRSh4KQkoKHgpIDw8IDEpCisjZGVmaW5lIEFOREVTX1BDVV9PU0NDX09TQ0hfVFJJKHgpCSgoeCkgPDwgMikKKyNkZWZpbmUgQU5ERVNfUENVX09TQ0NfT1NDSF9SQU5HRSh4KQkoKCh4KSAmIDB4MykgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX09TQ0NfT1NDSDJfUkFOR0UoeCkJKCgoeCkgJiAweDMpIDw8IDYpCisjZGVmaW5lIEFOREVTX1BDVV9PU0NDX09TQ0gzX1JBTkdFKHgpCSgoKHgpICYgMHgzKSA8PCA4KQorCisvKgorICogUFdNIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9QV01DRF9QV01ESVYoeCkJKCgoeCkgJiAweGYpIDw8IDApCisKKy8qCisgKiBTb0MgTWlzYy4gUmVnaXN0ZXIgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1JTQ1BVQSh4KQkJKCh4KSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19SU0NQVUIoeCkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUlNQQ0koeCkJCSgoeCkgPDwgMikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfVVNCV0FLRSh4KQkJKCh4KSA8PCAzKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19FWExNX1dBSVRBKHgpCQkoKCh4KSAmIDB4MykgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfRVhMTV9XQUlUQih4KQkJKCgoeCkgJiAweDMpIDw8IDYpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0REUlBMTF9CWVBBU1MoeCkJKCgoeCkgPDwgOCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfMzAwTUhaU0VMKHgpCQkoKCh4KSA8PCA5KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19ERFJETExfU1JTVCh4KQkoKCh4KSA8PCAxMCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfRERSRERRX1RFU1QoeCkJKCgoeCkgPDwgMTEpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0REUkRMTF9URVNUKHgpCSgoKHgpIDw8IDEyKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19HUFVQTExfQllQQVNTKHgpCSgoKHgpIDw8IDEzKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19FTkNQVUEoeCkJCSgoKHgpIDw8IDE0KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19FTkNQVUIoeCkJCSgoKHgpIDw8IDE1KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19QV09OX1BXQlROKHgpCQkoKCh4KSA8PCAxNikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9HUElPMSh4KQkJKCgoeCkgPDwgMTcpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fR1BJTzIoeCkJCSgoKHgpIDw8IDE4KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19QV09OX0dQSU8zKHgpCQkoKCh4KSA8PCAxOSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9HUElPNCh4KQkJKCgoeCkgPDwgMjApCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fR1BJTzUoeCkJCSgoKHgpIDw8IDIxKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19QV09OX1dPTCh4KQkJKCgoeCkgPDwgMjIpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fUlRDKHgpCQkoKCh4KSA8PCAyMykKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9SVENBTE0oeCkJKCgoeCkgPDwgMjQpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fWERCR0lOKHgpCSgoKHgpIDw8IDI1KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19QV09OX1BNRSh4KQkJKCgoeCkgPDwgMjYpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fUFdGQUlMKHgpCSgoKHgpIDw8IDI3KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19DUFVBX1NSU1RFRCh4KQkoKCh4KSA8PCAyOCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfQ1BVQl9TUlNURUQoeCkJKCgoeCkgPDwgMjkpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1dEX1JFU0VUKHgpCQkoKCh4KSA8PCAzMCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfSFdfUkVTRVQoeCkJCSgoKHgpIDw8IDMxKQorCisvKgorICogQlNNIENvbnRyb2wgUmVnaXN0ZXIgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9CU01DUl9MSU5LMCh4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX0JTTUNSX0xJTksxKHgpCSgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSBBTkRFU19QQ1VfQlNNQ1JfU1lOQ1NSQyh4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIEFOREVTX1BDVV9CU01DUl9DTUQoeCkJCSgoKHgpICYgMHg3KSA8PCAyOCkKKyNkZWZpbmUgQU5ERVNfUENVX0JTTUNSX0lFKHgpCQkoKHgpIDw8IDMxKQorCisvKgorICogQlNNIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIEFOREVTX1BDVV9CU01TUl9DSTAoeCkJCSgoKHgpICYgMHhmKSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfQlNNU1JfQ0kxKHgpCQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX0JTTVNSX1NZTkNTUkMoeCkJKCgoeCkgJiAweGYpIDw8IDI0KQorI2RlZmluZSBBTkRFU19QQ1VfQlNNU1JfQlNNU1QoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorCisvKgorICogV2FrZXVwIEV2ZW50IFNlbnNpdGl2aXR5IFJlZ2lzdGVyIChydykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfV0VTUl9QT0xPUih4KQkJKCgoeCkgJiAweGZmKSA8PCAwKQorCisvKgorICogV2FrZXVwIEV2ZW50IFN0YXR1cyBSZWdpc3RlciAocm8pCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1dFU1RfU0lHKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDApCisKKy8qCisgKiBSZXNldCBUaW1pbmcgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfUlNUVElNSU5HX1JHMCh4KQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9SU1RUSU1JTkdfUkcxKHgpCSgoKHgpICYgMHhmZikgPDwgOCkKKyNkZWZpbmUgQU5ERVNfUENVX1JTVFRJTUlOR19SRzIoeCkJKCgoeCkgJiAweGZmKSA8PCAxNikKKyNkZWZpbmUgQU5ERVNfUENVX1JTVFRJTUlOR19SRzMoeCkJKCgoeCkgJiAweGZmKSA8PCAyNCkKKworLyoKKyAqIFBDVSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX0lOVFJfU1RfQlNNKHgpCSgoeCkgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX0lOVFJfU1RfUENTMSh4KQkoKHgpIDw8IDEpCisjZGVmaW5lIEFOREVTX1BDVV9JTlRSX1NUX1BDUzIoeCkJKCh4KSA8PCAyKQorI2RlZmluZSBBTkRFU19QQ1VfSU5UUl9TVF9QQ1MzKHgpCSgoeCkgPDwgMykKKyNkZWZpbmUgQU5ERVNfUENVX0lOVFJfU1RfUENTNCh4KQkoKHgpIDw8IDQpCisjZGVmaW5lIEFOREVTX1BDVV9JTlRSX1NUX1BDUzUoeCkJKCh4KSA8PCA1KQorI2RlZmluZSBBTkRFU19QQ1VfSU5UUl9TVF9QQ1M2KHgpCSgoeCkgPDwgNikKKyNkZWZpbmUgQU5ERVNfUENVX0lOVFJfU1RfUENTNyh4KQkoKHgpIDw8IDcpCisjZGVmaW5lIEFOREVTX1BDVV9JTlRSX1NUX1BDUzgoeCkJKCh4KSA8PCA4KQorI2RlZmluZSBBTkRFU19QQ1VfSU5UUl9TVF9QQ1M5KHgpCSgoeCkgPDwgOSkKKworLyoKKyAqIFBDU3ggQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX0NSX1dBS0VVUF9FTih4KQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX0NSX0xXKHgpCQkoKCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX0NSX0xTKHgpCQkoKCh4KSAmIDB4ZikgPDwgMjApCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX0NSX1RZUEUoeCkJKCgoeCkgPj4gMjgpICYgMHg3KQkvKiAocm8pICovCisKKy8qCisgKiBQQ1N4IFBhcmFtZXRlciBSZWdpc3RlciAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfUEFSTV9ORVhUKHgpCSgoKHgpICYgMHhmZmZmZmYpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX1BBUk1fU1lOQ1NSQyh4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX1BBUk1fUENTQ01EKHgpCSgoKHgpICYgMHg3KSA8PCAyOCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfUEFSTV9JRSh4KQkoKCh4KSA8PCAzMSkKKworLyoKKyAqIFBDU3ggU3RhdHVzIFJlZ2lzdGVyIDEKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfUENTWF9TVEFUMV9FUlJOTyh4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfU1RBVDFfU1QoeCkJKCgoeCkgJiAweDcpIDw8IDI4KQorCisvKgorICogUENTeCBTdGF0dXMgUmVnaXN0ZXIgMgorICovCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX1NUQVQyX0NSTlRQQVJNKHgpCSgoKHgpICYgMHhmZmZmZmYpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX1NUQVQyX1NZTkNTUkMoeCkJCSgoKHgpICYgMHhmKSA8PCAyNCkKKworLyoKKyAqIFBDU3ggUEREIFJlZ2lzdGVyCisgKiBUaGlzIGlzIHJlc2VydmVkIGZvciBQQ1MoMS03KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M4X1BERF8xQllURSh4KQkJKCgoeCkgJiAweGZmKSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfUENTOF9QRERfMkJZVEUoeCkJCSgoKHgpICYgMHhmZikgPDwgOCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDUzhfUEREXzNCWVRFKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBBTkRFU19QQ1VfUENTOF9QRERfNEJZVEUoeCkJCSgoKHgpICYgMHhmZikgPDwgMjQpCisKKyNkZWZpbmUgQU5ERVNfUENVX1BDUzlfUEREX1RJTUUxKHgpCQkoKCh4KSAmIDB4M2YpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M5X1BERF9USU1FMih4KQkJKCgoeCkgJiAweDNmKSA8PCA2KQorI2RlZmluZSBBTkRFU19QQ1VfUENTOV9QRERfVElNRTMoeCkJCSgoKHgpICYgMHgzZikgPDwgMTIpCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M5X1BERF9USU1FNCh4KQkJKCgoeCkgJiAweDNmKSA8PCAxOCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDUzlfUEREX1RJQ0tUWVBFKHgpCQkoKHgpIDw8IDI0KQorI2RlZmluZSBBTkRFU19QQ1VfUENTOV9QRERfR1BVX1NSU1QoeCkJCSgoeCkgPDwgMjcpCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M5X1BERF9QV09GRlRJTUUoeCkJCSgoKHgpICYgMHgzKSA8PCAyOCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDUzlfUEREX1NVUzJEUkFNKHgpCQkoKHgpIDw8IDMwKQorI2RlZmluZSBBTkRFU19QQ1VfUENTOV9QRERfQ0xSUFdPRkZfRkxBRyh4KQkoKHgpIDw8IDMxKQorCisjZW5kaWYJLyogX19BTkRFU19QQ1VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hcGlfcHVibGljLmggYi9pbmNsdWRlL2FwaV9wdWJsaWMuaAppbmRleCA1OTQwZDgxLi40NDIwYzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FwaV9wdWJsaWMuaAorKysgYi9pbmNsdWRlL2FwaV9wdWJsaWMuaApAQCAtOTAsNiArOTAsOSBAQAogCUFQSV9FTlZfRU5VTSwKIAlBUElfRU5WX0dFVCwKIAlBUElfRU5WX1NFVCwKKwlBUElfRElTUExBWV9HRVRfSU5GTywKKwlBUElfRElTUExBWV9EUkFXX0JJVE1BUCwKKwlBUElfRElTUExBWV9DTEVBUiwKIAlBUElfTUFYQ0FMTAogfTsKIApAQCAtMTUyLDQgKzE1NSwxNyBAQAogCWludAlzdGF0ZTsKIH07CiAKKyNkZWZpbmUgRElTUExBWV9UWVBFX0xDRAkweDAwMDEKKyNkZWZpbmUgRElTUExBWV9UWVBFX1ZJREVPCTB4MDAwMgorCitzdHJ1Y3QgZGlzcGxheV9pbmZvIHsKKwlpbnQgdHlwZTsKKwkvKiBzY3JlZW4gc2l6ZSBpbiBwaXhlbHMgKi8KKwlpbnQgcGl4ZWxfd2lkdGg7CisJaW50IHBpeGVsX2hlaWdodDsKKwkvKiBzY3JlZW4gc2l6ZSBpbiByb3dzIGFuZCBjb2x1bW5zIG9mIHRleHQgKi8KKwlpbnQgc2NyZWVuX3Jvd3M7CisJaW50IHNjcmVlbl9jb2xzOworfTsKKwogI2VuZGlmIC8qIF9BUElfUFVCTElDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1hbmQuaCBiL2luY2x1ZGUvY29tbWFuZC5oCmluZGV4IGMyNzAxMTAuLjM5MTJiODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbWFuZC5oCisrKyBiL2luY2x1ZGUvY29tbWFuZC5oCkBAIC02NCw2ICs2NCw5IEBACiBleHRlcm4gY21kX3RibF90ICBfX3VfYm9vdF9jbWRfc3RhcnQ7CiBleHRlcm4gY21kX3RibF90ICBfX3VfYm9vdF9jbWRfZW5kOwogCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX1JVTikKK2V4dGVybiBpbnQgZG9fcnVuKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSk7CisjZW5kaWYKIAogLyogY29tbW9uL2NvbW1hbmQuYyAqLwogaW50IF9kb19oZWxwIChjbWRfdGJsX3QgKmNtZF9zdGFydCwgaW50IGNtZF9pdGVtcywgY21kX3RibF90ICogY21kdHAsIGludApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tb24uaCBiL2luY2x1ZGUvY29tbW9uLmgKaW5kZXggNWNhODgyMC4uMDVhNjU4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tb24uaAorKysgYi9pbmNsdWRlL2NvbW1vbi5oCkBAIC0yNzIsNiArMjcyLDcgQEAKICNpZmRlZiBDT05GSUdfTUVOVQogaW50CWFib3J0Ym9vdChpbnQgYm9vdGRlbGF5KTsKICNlbmRpZgorZXh0ZXJuIGNoYXIgY29uc29sZV9idWZmZXJbXTsKIAogLyogYXJjaC8kKEFSQ0gpL2xpYi9ib2FyZC5jICovCiB2b2lkCWJvYXJkX2luaXRfZiAgKHVsb25nKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tcGlsZXIuaCBiL2luY2x1ZGUvY29tcGlsZXIuaAppbmRleCA1NDk5OWE3Li4wNzM0ZWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9jb21waWxlci5oCkBAIC0xMjMsMTYgKzEyMywxMCBAQAogI2RlZmluZSBfX1dPUkRTSVpFCTMyCiAjZW5kaWYKIAotLyogVHlwZXMgZm9yIGB2b2lkIConIHBvaW50ZXJzLiAqLwotI2lmIF9fV09SRFNJWkUgPT0gNjQKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgICAgICAgdWludHB0cl90OwotI2VsaWYgX19XT1JEU0laRSA9PSAzMgotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgICB1aW50cHRyX3Q7Ci0jZWxzZQotI2Vycm9yICJfX1dPUkRTSVpFIGhhcyB1bmV4cGVjdGVkIHZhbHVlIgotI2VuZGlmCisvKiBUeXBlIGZvciBgdm9pZCAqJyBwb2ludGVycy4gKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludHB0cl90OwogCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSE9TVENDICovCiAKIC8qIGNvbXBpbGVyIG9wdGlvbnMgKi8KICNkZWZpbmUgdW5pbml0aWFsaXplZF92YXIoeCkJCXggPSB4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ19waHlsaWJfYWxsX2RyaXZlcnMuaCBiL2luY2x1ZGUvY29uZmlnX3BoeWxpYl9hbGxfZHJpdmVycy5oCmluZGV4IDkwM2M3YTcuLjFkYjdjZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlnX3BoeWxpYl9hbGxfZHJpdmVycy5oCisrKyBiL2luY2x1ZGUvY29uZmlnX3BoeWxpYl9hbGxfZHJpdmVycy5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIENPTkZJR19QSFlfUkVBTFRFSwogI2RlZmluZSBDT05GSUdfUEhZX05BVFNFTUkKICNkZWZpbmUgQ09ORklHX1BIWV9MWFQKKyNkZWZpbmUgQ09ORklHX1BIWV9BVEhFUk9TCiAKICNpZmRlZiBDT05GSUdfUEhZTElCXzEwRwogI2RlZmluZSBDT05GSUdfUEhZX1RFUkFORVRJQ1MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTM2RFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTM2RFMuaAppbmRleCBkNGUzZWY1Li4xNmRiOThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODUzNkRTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1MzZEUy5oCkBAIC0xMzEsNyArMTMxLDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSCQkweGZmZTAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUkJBUl9QSFlTX0xPVwlDT05GSUdfU1lTX0NDU1JCQVIKIAotI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfTkFORCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQorI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JfRE9fTk9UX1JFTE9DQVRFCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDhDRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ4Q0RTLmgKaW5kZXggYTk5ZjhkNS4uMWE2YmE2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDhDRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oCkBAIC00NjQsNiArNDY0LDggQEAKICNkZWZpbmUgQ09ORklHX1RTRUM0X05BTUUJImVUU0VDMyIKICN1bmRlZiBDT05GSUdfTVBDODVYWF9GRUMKIAorI2RlZmluZSBDT05GSUdfUEhZX01BUlZFTEwKKwogI2RlZmluZSBUU0VDMV9QSFlfQUREUgkJMAogI2RlZmluZSBUU0VDMl9QSFlfQUREUgkJMQogI2RlZmluZSBUU0VDM19QSFlfQUREUgkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjlNRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTY5TURTLmgKaW5kZXggMTlkMzI3MS4uYWIyN2I5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjlNRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OU1EUy5oCkBAIC0xMDgsNyArMTA4LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSCQkweGUwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUkJBUl9QSFlTX0xPVwlDT05GSUdfU1lTX0NDU1JCQVIKIAotI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfTkFORCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQorI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JfRE9fTk9UX1JFTE9DQVRFCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NzJEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NzJEUy5oCmluZGV4IGZmZWU4ZmMuLmQ3OTEwZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTcyRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU3MkRTLmgKQEAgLTExNSw3ICsxMTUsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JCQVIJCTB4ZmZlMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX1BIWVNfTE9XCUNPTkZJR19TWVNfQ0NTUkJBUgogCi0jaWYgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9OQU5EKSAmJiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisjaWYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUDEwMjJEUy5oIGIvaW5jbHVkZS9jb25maWdzL1AxMDIyRFMuaAppbmRleCAwMDc3MDYwLi4xMTU4ZmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUDEwMjJEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QMTAyMkRTLmgKQEAgLTE3Myw3ICsxNzMsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCiAKICNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDUxMiAqIDEwMjQpCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDYgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMTAgKiAxMDI0ICogMTAyNCkKIAogLyoKICAqIFNlcmlhbCBQb3J0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUDFfUDJfUkRCLmggYi9pbmNsdWRlL2NvbmZpZ3MvUDFfUDJfUkRCLmgKaW5kZXggODgzZDQ0ZS4uMDBmYTc0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1AxX1AyX1JEQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QMV9QMl9SREIuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUkJBUgkJMHhmZmUwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JCQVJfUEhZU19MT1cJQ09ORklHX1NZU19DQ1NSQkFSCiAKLSNpZiBkZWZpbmVkKENPTkZJR19SQU1CT09UX05BTkQpICYmICFkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKKyNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSX0RPX05PVF9SRUxPQ0FURQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9WQ01BOS5oIGIvaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKaW5kZXggOGI4MTEzZC4uYTM3MGMxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKQEAgLTI5LDYgKzI5LDkgQEAKICNpZm5kZWYgX19DT05GSUdfSAogI2RlZmluZSBfX0NPTkZJR19ICiAKKworI2RlZmluZSBNQUNIX1RZUEVfTVBMX1ZDTUE5CTIyNworCiAvKgogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqIChlYXN5IHRvIGNoYW5nZSkKQEAgLTM3LDYgKzQwLDcgQEAKICNkZWZpbmUgQ09ORklHX1MzQzI0WDAJCS8qIGluIGEgU0FNU1VORyBTM0MyNHgwLXR5cGUgU29DICovCiAjZGVmaW5lIENPTkZJR19TM0MyNDEwCQkvKiBzcGVjaWZpY2FsbHkgYSBTQU1TVU5HIFMzQzI0MTAgU29DICovCiAjZGVmaW5lIENPTkZJR19WQ01BOQkJLyogb24gYSBNUEwgVkNNQTkgQm9hcmQgICovCisjZGVmaW5lIENPTkZJR19NQUNIX1RZUEUJTUFDSF9UWVBFX01QTF9WQ01BOSAvKiBNYWNoaW5lIHR5cGUgKi8KIAogI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkweDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2FkcC1hZzEwMXAuaCBiL2luY2x1ZGUvY29uZmlncy9hZHAtYWcxMDFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjNzBhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9hZHAtYWcxMDFwLmgKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQW5kZXMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogU2hhd24gTGluLCBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uIDxub2J1aGlyb0BhbmRlc3RlY2guY29tPgorICogTWFjcGF1bCBMaW4sIEFuZGVzIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gPG1hY3BhdWxAYW5kZXN0ZWNoLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvYWcxMDEuaD4KKworLyoKKyAqIENQVSBhbmQgQm9hcmQgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0FEUF9BRzEwMVAKKworI2RlZmluZSBDT05GSUdfVVNFX0lOVEVSUlVQVAorCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisjZGVmaW5lIENPTkZJR19NRU1fUkVNQVAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkweDAzMjAwMDAwCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkweDAwMDAwMDAwCisjZW5kaWYKKworLyoKKyAqIFRpbWVyCisgKi8KKworLyoKKyAqIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBpbiB1LWJvb3QgbWFpbGluZyBsaXN0IGJlZm9yZSwKKyAqIENPTkZJR19TWVNfSFogYXQgMTAwMCBpcyBtYW5kYXRvcnkuCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJMTAwMAorI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTM5MDYyNTAwCisjZGVmaW5lIFZFUlNJT05fQ0xPQ0sJCUNPTkZJR19TWVNfQ0xLX0ZSRVEKKworLyoKKyAqIFVzZSBFeHRlcm5lbCBDTE9DSyBvciBQQ0xLCisgKi8KKyN1bmRlZiBDT05GSUdfRlRSVEMwMTBfRVhUQ0xLCisKKyNpZm5kZWYgQ09ORklHX0ZUUlRDMDEwX0VYVENMSworI2RlZmluZSBDT05GSUdfRlRSVEMwMTBfUENMSworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRlRSVEMwMTBfRVhUQ0xLCisjZGVmaW5lIFRJTUVSX0NMT0NLCTMyNzY4CQkJLyogQ09ORklHX0ZUUlRDMDEwX0VYVENMSyAqLworI2Vsc2UKKyNkZWZpbmUgVElNRVJfQ0xPQ0sJQ09ORklHX1NZU19IWgkJLyogQ09ORklHX0ZUUlRDMDEwX1BDTEsgKi8KKyNlbmRpZgorCisjZGVmaW5lIFRJTUVSX0xPQURfVkFMCTB4ZmZmZmZmZmYKKworLyoKKyAqIFJlYWwgVGltZSBDbG9jaworICovCisjZGVmaW5lIENPTkZJR19SVENfRlRSVEMwMTAKKworLyoKKyAqIFJlYWwgVGltZSBDbG9jayBEaXZpZGVyCisgKiBSVENfRElWX0NPVU5UCQkJKE9TQ19DTEsvT1NDXzVNSFopCisgKi8KKyNkZWZpbmUgT1NDXzVNSFoJCQkoNSoxMDAwMDAwKQorI2RlZmluZSBPU0NfQ0xLCQkJCSg0Kk9TQ181TUhaKQorI2RlZmluZSBSVENfRElWX0NPVU5UCQkJKDAuNSkJLyogV2h5Pz8gKi8KKworLyoKKyAqIFNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKiBGVFVBUlQgaXMgYSBoaWdoIHNwZWVkIE5TIDE2QzU1MEEgY29tcGF0aWJsZSBVQVJULCBhZGRyOiAweDk5NjAwMDAwICovCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJCTM4NDAwCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCQkxCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00xCQlDT05GSUdfRlRVQVJUMDEwXzAyX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCS00CisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DTEsJCSgoMTg0MzIwMDAgKiAyMCkgLyAyNSkJLyogQUcxMDFQICovCisKKy8qIHZhbGlkIGJhdWRyYXRlcyAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KKworLyoKKyAqIEV0aGVybmV0CisgKi8KKyNkZWZpbmUgQ09ORklHX0ZUTUFDMTAwCisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisKKy8qCisgKiBTRCAoTU1DKSBjb250cm9sbGVyCisgKi8KKyNkZWZpbmUgQ09ORklHX01NQworI2RlZmluZSBDT05GSUdfQ01EX01NQworI2RlZmluZSBDT05GSUdfR0VORVJJQ19NTUMKKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KKyNkZWZpbmUgQ09ORklHX0ZUU0RDMDEwCisjZGVmaW5lIENPTkZJR19GVFNEQzAxMF9OVU1CRVIJCTEKKyNkZWZpbmUgQ09ORklHX0NNRF9GQVQKKworLyoKKyAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgorICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisKKyNkZWZpbmUgQ09ORklHX0NNRF9DQUNIRQorI2RlZmluZSBDT05GSUdfQ01EX0RBVEUKKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCSJORFMzMiAjICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisKKy8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCVwKKwkoQ09ORklHX1NZU19DQlNJWkUgKyBzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCisKKy8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkxNgorCisvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfQkFSR1NJWkUJQ09ORklHX1NZU19DQlNJWkUKKworLyoKKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgxMjggKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworLyogNTEya0IgaXMgc3VnZ2VzdGVkLCAoQ09ORklHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkgd2FzIG5vdCBlbm91Z2ggKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoNTEyIDw8IDEwKQorCisvKgorICogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19HQkxfREFUQV9TSVpFCTEyOAorCisvKgorICogQUhCIENvbnRyb2xsZXIgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19GVEFIQkMwMjBTCisKKyNpZmRlZiBDT05GSUdfRlRBSEJDMDIwUworI2luY2x1ZGUgPGZhcmFkYXkvZnRhaGJjMDIwcy5oPgorCisvKiBBZGRyZXNzIG9mIFBIWVNfU0RSQU1fMCBiZWZvcmUgbWVtb3J5IHJlbWFwIGlzIGF0IDB4KDEwMCkwMDAwMCAqLworI2RlZmluZSBDT05GSUdfU1lTX0ZUQUhCQzAyMFNfU0xBVkVfQlNSX0JBU0UJMHgxMDAKKworLyoKKyAqIENPTkZJR19TWVNfRlRBSEJDMDIwU19TTEFWRV9CU1JfNjogdGhpcyBkZWZpbmUgaXMgdXNlZCBpbiBsb3dsZXZlbF9pbml0LlMsCisgKiBoZW5jZSB3ZSBjYW5ub3QgdXNlIEZUQUhCQzAyMFNfQlNSX1NJWkUoMjA0OCkgc2luY2UgaXQgd2lsbCB1c2UgZmZzKCkgd3JvdGUKKyAqIGluIEMgbGFuZ3VhZ2UuCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GVEFIQkMwMjBTX1NMQVZFX0JTUl82IFwKKwkoRlRBSEJDMDIwU19TTEFWRV9CU1JfQkFTRShDT05GSUdfU1lTX0ZUQUhCQzAyMFNfU0xBVkVfQlNSX0JBU0UpIHwgXAorCQkJCQlGVEFIQkMwMjBTX1NMQVZFX0JTUl9TSVpFKDB4YikpCisjZW5kaWYKKworLyoKKyAqIFdhdGNoZG9nCisgKi8KKyNkZWZpbmUgQ09ORklHX0ZUV0RUMDEwX1dBVENIRE9HCisKKy8qCisgKiBQTVUgUG93ZXIgY29udHJvbGxlciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1BNVQorI2RlZmluZSBDT05GSUdfRlRQTVUwMTBfUE9XRVIKKworI2lmZGVmIENPTkZJR19GVFBNVTAxMF9QT1dFUgorI2luY2x1ZGUgPGZhcmFkYXkvZnRwbXUwMTAuaD4KKyNkZWZpbmUgQ09ORklHX1NZU19GVFBNVTAxMF9QRExMQ1IwX0hDTEtPVVRESVMJCTB4MEUKKyNkZWZpbmUgQ09ORklHX1NZU19GVFBNVTAxMF9TRFJBTUhUQwkoRlRQTVUwMTBfU0RSQU1IVENfRUJJQ1RSTF9EQ1NSICB8IFwKKwkJCQkJIEZUUE1VMDEwX1NEUkFNSFRDX0VCSURBVEFfRENTUiAgfCBcCisJCQkJCSBGVFBNVTAxMF9TRFJBTUhUQ19TRFJBTUNTX0RDU1IgIHwgXAorCQkJCQkgRlRQTVUwMTBfU0RSQU1IVENfU0RSQU1DVExfRENTUiB8IFwKKwkJCQkJIEZUUE1VMDEwX1NEUkFNSFRDX0NLRV9EQ1NSCSB8IFwKKwkJCQkJIEZUUE1VMDEwX1NEUkFNSFRDX0RRTV9EQ1NSCSB8IFwKKwkJCQkJIEZUUE1VMDEwX1NEUkFNSFRDX1NEQ0xLX0RDU1IpCisjZW5kaWYKKworLyoKKyAqIFNEUkFNIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19GVFNETUMwMjEKKworI2lmZGVmIENPTkZJR19GVFNETUMwMjEKKyNpbmNsdWRlIDxmYXJhZGF5L2Z0c2RtYzAyMS5oPgorCisjZGVmaW5lIENPTkZJR19TWVNfRlRTRE1DMDIxX1RQMQkoRlRTRE1DMDIxX1RQMV9UUkFTKDIpCXwJXAorCQkJCQkgRlRTRE1DMDIxX1RQMV9UUlAoMSkJfAlcCisJCQkJCSBGVFNETUMwMjFfVFAxX1RSQ0QoMSkJfAlcCisJCQkJCSBGVFNETUMwMjFfVFAxX1RSRigzKQl8CVwKKwkJCQkJIEZUU0RNQzAyMV9UUDFfVFdSKDEpCXwJXAorCQkJCQkgRlRTRE1DMDIxX1RQMV9UQ0woMikpCisKKyNkZWZpbmUgQ09ORklHX1NZU19GVFNETUMwMjFfVFAyCShGVFNETUMwMjFfVFAyX0lOSV9QUkVDKDQpIHwJXAorCQkJCQkgRlRTRE1DMDIxX1RQMl9JTklfUkVGVCg4KSB8CVwKKwkJCQkJIEZUU0RNQzAyMV9UUDJfUkVGX0lOVFYoMHgxODApKQorCisvKgorICogQ09ORklHX1NZU19GVFNETUMwMjFfQ1IxOiB0aGlzIGRlZmluZSBpcyB1c2VkIGluIGxvd2xldmVsX2luaXQuUywKKyAqIGhlbmNlIHdlIGNhbm5vdCB1c2UgRlRTRE1DMDIxX0JBTktfU0laRSg2NCkgc2luY2UgaXQgd2lsbCB1c2UgZmZzKCkgd3JvdGUgaW4KKyAqIEMgbGFuZ3VhZ2UuCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GVFNETUMwMjFfQ1IxCShGVFNETUMwMjFfQ1IxX0REVygyKQkgfAlcCisJCQkJCSBGVFNETUMwMjFfQ1IxX0RTWigzKQkgfAlcCisJCQkJCSBGVFNETUMwMjFfQ1IxX01CVygyKQkgfAlcCisJCQkJCSBGVFNETUMwMjFfQ1IxX0JOS1NJWkUoNikpCisKKyNkZWZpbmUgQ09ORklHX1NZU19GVFNETUMwMjFfQ1IyCShGVFNETUMwMjFfQ1IyX0lQUkVDCSB8CVwKKwkJCQkJIEZUU0RNQzAyMV9DUjJfSVJFRgkgfAlcCisJCQkJCSBGVFNETUMwMjFfQ1IyX0lTTVIpCisKKyNkZWZpbmUgQ09ORklHX1NZU19GVFNETUMwMjFfQkFOSzBfQkFTRQlDT05GSUdfU1lTX0ZUQUhCQzAyMFNfU0xBVkVfQlNSX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19GVFNETUMwMjFfQkFOSzBfQlNSCShGVFNETUMwMjFfQkFOS19FTkFCTEUJIHwJXAorCQkJCQkgQ09ORklHX1NZU19GVFNETUMwMjFfQkFOSzBfQkFTRSkKKworI2VuZGlmCisKKy8qCisgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NRU1fUkVNQVApIHx8IGRlZmluZWQoQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCkKKyNkZWZpbmUgUEhZU19TRFJBTV8wCQkweDAwMDAwMDAwCS8qIFNEUkFNIEJhbmsgIzEgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NRU1fUkVNQVApCisjZGVmaW5lIFBIWVNfU0RSQU1fMF9BVF9JTklUCTB4MTAwMDAwMDAJLyogU0RSQU0gQmFuayAjMSBiZWZvcmUgcmVtYXAqLworI2VuZGlmCisjZWxzZQkvKiAhQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCAmJiAhQ09ORklHX01FTV9SRU1BUCAqLworI2RlZmluZSBQSFlTX1NEUkFNXzAJCTB4MTAwMDAwMDAJLyogU0RSQU0gQmFuayAjMSAqLworI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkJLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzBfU0laRQkweDA0MDAwMDAwCS8qIDY0IE1CICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQlQSFlTX1NEUkFNXzAKKworI2lmZGVmIENPTkZJR19NRU1fUkVNQVAKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIJCShDT05GSUdfU1lTX1NEUkFNX0JBU0UgKyAweEEwMDAwIC0gXAorCQkJCQlHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKKyNlbHNlCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9BRERSCQkoQ09ORklHX1NZU19TRFJBTV9CQVNFICsgMHgxMDAwIC0gXAorCQkJCQlHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKKyNlbmRpZiAvKiBDT05GSUdfTUVNX1JFTUFQICovCisKKy8qCisgKiBMb2FkIGFkZHJlc3MgYW5kIG1lbW9yeSB0ZXN0IGFyZWEgc2hvdWxkIGFncmVlIHdpdGgKKyAqIGFyY2gvbmRzMzIvY29uZmlnLm1rLiBCZSBjYXJlZnVsIG5vdCB0byBvdmVyd3JpdGUgVS1ib290IGl0c2VsZi4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJMHgzMDAwMDAKKworLyogbWVtdGVzdCB3b3JrcyBvbiA2MyBNQiBpbiBEUkFNICovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAlQSFlTX1NEUkFNXzAKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJKFBIWVNfU0RSQU1fMCArIDB4MDNGMDAwMDApCisKKy8qCisgKiBTdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19GVFNNQzAyMAorCisjaWZkZWYgQ09ORklHX0ZUU01DMDIwCisjaW5jbHVkZSA8ZmFyYWRheS9mdHNtYzAyMC5oPgorCisjZGVmaW5lIENPTkZJR19TWVNfRlRTTUMwMjBfQ09ORklHUwl7CQkJXAorCXsgRlRTTUMwMjBfQkFOSzBfQ09ORklHLCBGVFNNQzAyMF9CQU5LMF9USU1JTkcsIH0sCVwKKwl7IEZUU01DMDIwX0JBTksxX0NPTkZJRywgRlRTTUMwMjBfQkFOSzFfVElNSU5HLCB9LAlcCit9CisKKyNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAkvKiBGTEFTSCBpcyBvbiBCQU5LIDAgKi8KKyNkZWZpbmUgRlRTTUMwMjBfQkFOSzBfTE9XTFZfQ09ORklHCShGVFNNQzAyMF9CQU5LX0VOQUJMRQl8CVwKKwkJCQkJIEZUU01DMDIwX0JBTktfU0laRV8zMk0JfAlcCisJCQkJCSBGVFNNQzAyMF9CQU5LX01CV18zMikKKworI2RlZmluZSBGVFNNQzAyMF9CQU5LMF9MT1dMVl9USU1JTkcJKEZUU01DMDIwX1RQUl9SQkUJfAlcCisJCQkJCSBGVFNNQzAyMF9UUFJfQVNUKDEpCXwJXAorCQkJCQkgRlRTTUMwMjBfVFBSX0NUVygxKQl8CVwKKwkJCQkJIEZUU01DMDIwX1RQUl9BVEkoMSkJfAlcCisJCQkJCSBGVFNNQzAyMF9UUFJfQVQyKDEpCXwJXAorCQkJCQkgRlRTTUMwMjBfVFBSX1dUQygxKQl8CVwKKwkJCQkJIEZUU01DMDIwX1RQUl9BSFQoMSkJfAlcCisJCQkJCSBGVFNNQzAyMF9UUFJfVFJOQSgxKSkKKyNlbmRpZgorCisvKgorICogRkxBU0ggb24gQURQX0FHMTAxUCBpcyBjb25uZWN0ZWQgdG8gQkFOSzAKKyAqIEp1c3QgZGlzYWxiZSB0aGUgb3RoZXIgQkFOSyB0byBhdm9pZCBkZXRlY3Rpb24gZXJyb3IuCisgKi8KKyNkZWZpbmUgRlRTTUMwMjBfQkFOSzBfQ09ORklHCShGVFNNQzAyMF9CQU5LX0VOQUJMRSAgICAgICAgICAgICB8CVwKKwkJCQkgRlRTTUMwMjBfQkFOS19CQVNFKFBIWVNfRkxBU0hfMSkgfAlcCisJCQkJIEZUU01DMDIwX0JBTktfU0laRV8zMk0gICAgICAgICAgIHwJXAorCQkJCSBGVFNNQzAyMF9CQU5LX01CV18zMikKKworI2RlZmluZSBGVFNNQzAyMF9CQU5LMF9USU1JTkcJKEZUU01DMDIwX1RQUl9BU1QoMykgICB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX0NUVygzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfQVRJKDB4ZikgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9BVDIoMykgICB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX1dUQygzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfQUhUKDMpICAgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9UUk5BKDB4ZikpCisKKyNkZWZpbmUgRlRTTUMwMjBfQkFOSzFfQ09ORklHCSgweDAwKQorI2RlZmluZSBGVFNNQzAyMF9CQU5LMV9USU1JTkcJKDB4MDApCisjZW5kaWYgLyogQ09ORklHX0ZUU01DMDIwICovCisKKy8qCisgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCisgKi8KKy8qIHVzZSBDRkkgZnJhbWV3b3JrICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJCisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfRFJJVkVSCisKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9DRklfV0lEVEgJRkxBU0hfQ0ZJXzE2QklUCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfVVNFX0JVRkZFUl9XUklURQorCisvKiBzdXBwb3J0IEpFREVDICovCisKKy8qIERvIG5vdCB1c2UgQ09ORklHX0ZMQVNIX0NGSV9MRUdBQ1kgdG8gZGV0ZWN0IG9uIGJvYXJkIGZsYXNoICovCisjaWZkZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorI2RlZmluZSBQSFlTX0ZMQVNIXzEJCQkweDgwNDAwMDAwCS8qIEJBTksgMSAqLworI2Vsc2UJLyogIUNPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgKi8KKyNpZmRlZiBDT05GSUdfTUVNX1JFTUFQCisjZGVmaW5lIFBIWVNfRkxBU0hfMQkJCTB4ODAwMDAwMDAJLyogQkFOSyAwICovCisjZWxzZQorI2RlZmluZSBQSFlTX0ZMQVNIXzEJCQkweDAwMDAwMDAwCS8qIEJBTksgMCAqLworI2VuZGlmCS8qIENPTkZJR19NRU1fUkVNQVAgKi8KKyNlbmRpZgkvKiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQlQSFlTX0ZMQVNIXzEKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQU5LU19MSVNUCXsgUEhZU19GTEFTSF8xLCB9CisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCQlQSFlTX0ZMQVNIXzEKKworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRPIGZvciBGbGFzaCBFcmFzZSAobXMpICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVE8gZm9yIEZsYXNoIFdyaXRlIChtcykgKi8KKworLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKy8qCisgKiBUaGVyZSBhcmUgNCBiYW5rcyBzdXBwb3J0ZWQgZm9yIHRoaXMgQ29udHJvbGxlciwKKyAqIGJ1dCB3ZSBoYXZlIG9ubHkgMSBiYW5rIGNvbm5lY3RlZCB0byBmbGFzaCBvbiBib2FyZAorICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTEKKworLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjZGVmaW5lIENPTkZJR19GTEFTSF9TRUNUT1JfU0laRQkoMHgxMDAwMCoyKjIpCisjZGVmaW5lIENPTkZJR19FTlZfU0VDVF9TSVpFCQlDT05GSUdfRkxBU0hfU0VDVE9SX1NJWkUKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkxMjgKKworLyogZW52aXJvbm1lbnRzICovCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJKENPTkZJR19TWVNfTU9OSVRPUl9CQVNFICsgMHgxNDAwMDApCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCTgxOTIKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jc2IyMjYuaCBiL2luY2x1ZGUvY29uZmlncy9jc2IyMjYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0NDY5Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvY3NiMjI2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MDYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgotICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZS4KLSAqCi0gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29nZW50IENTQjIyNiBib2FyZC4gRm9yIGRldGFpbHMgc2VlCi0gKiBodHRwOi8vd3d3LmNvZ2NvbXAuY29tL2NzYl9jc2IyMjYuaHRtCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIGluY2x1ZGUvY29uZmlncy9jc2IyMjYuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKLSAqLwotCi0jaWZuZGVmIF9fQ09ORklHX0gKLSNkZWZpbmUgX19DT05GSUdfSAotCi0jZGVmaW5lIERFQlVHIDEKLQotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLSNkZWZpbmUgQ09ORklHX1BYQTI1MAkJMQkvKiBUaGlzIGlzIGFuIFBYQTI1MCBDUFUgICAgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfQ1NCMjI2CQkxCS8qIG9uIGEgQ1NCMjI2IGJvYXJkICAgICAgICAgICAgICAgICovCi0KLSN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgICAgICovCi0JCQkJCS8qIGZvciB0aW1lci9jb25zb2xlL2V0aGVybmV0ICAgICAgICovCi0KLS8qIHdlIHdpbGwgbmV2ZXIgZW5hYmxlIGRjYWNoZSwgYmVjYXVzZSB3ZSBoYXZlIHRvIHNldHVwIE1NVSBmaXJzdCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0RDQUNIRV9PRkYKLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHgwCi0vKgotICogSGFyZHdhcmUgZHJpdmVycwotICovCi0KLS8qCi0gKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19QWEFfU0VSSUFMCi0jZGVmaW5lIENPTkZJR19GRlVBUlQJCTEJLyogd2UgdXNlIEZGVUFSVCBvbiBDU0IyMjYgICAgICAgICAgKi8KLQotLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLwotI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQotCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTkyMDAKLSN1bmRlZiAgQ09ORklHX01JU0NfSU5JVF9SCQkvKiBub3QgdXNlZCB5ZXQgICAgICAgICAgICAgICAgICAgICAqLwotCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX0NNRF9CREkKLSNkZWZpbmUgQ09ORklHX0NNRF9MT0FEQgotI2RlZmluZSBDT05GSUdfQ01EX0lNSQotI2RlZmluZSBDT05GSUdfQ01EX0ZMQVNICi0jZGVmaW5lIENPTkZJR19DTURfTUVNT1JZCi0jZGVmaW5lIENPTkZJR19DTURfTkVUCi0jZGVmaW5lIENPTkZJR19DTURfU0FWRUVOVgotI2RlZmluZSBDT05GSUdfQ01EX1JVTgotI2RlZmluZSBDT05GSUdfQ01EX0FTS0VOVgotI2RlZmluZSBDT05GSUdfQ01EX0VDSE8KLSNkZWZpbmUgQ09ORklHX0NNRF9ESENQCi0jZGVmaW5lIENPTkZJR19DTURfQ0FDSEUKLQotCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJMwotI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCSJjb25zb2xlPXR0eVMwLDE5MjAwIGlwPTE5Mi4xNjguMS4xMCwxOTIuMTY4LjEuNSwsMjU1LDI1NSwyNTUsMCxjc2Igcm9vdD0vZGV2L25mcywgZXRoZXI9MCwweDA4MDAwMDAwLGV0aDAiCi0jZGVmaW5lIENPTkZJR19FVEhBRERSCQlGRjpGRjpGRjpGRjpGRjpGRgotI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAotI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjEuNTYKLSNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjEuNQotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDB4NDAwMDAiCi0jZGVmaW5lIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKLQotI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJMQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTE5MjAwCQkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLwotI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMgkJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCi0jZW5kaWYKLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKLSAqLwotCi0vKgotICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sOyB0aGlzIGxpdmVzIGJlbG93IHRoZSB1cHBlcm1vc3QgMTI4IEtpQiB3aGljaCBhcmUKLSAqIHVzZWQgZm9yIHRoZSBSQU0gY29weSBvZiB0aGUgdWJvb3QgY29kZQotICoKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxMjgqMTAyNCkKLQotI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCSJ1Ym9vdD4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkxMjgJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUgKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJQ09ORklHX1NZU19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgICAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweGEwNDAwMDAwICAgICAgLyogbWVtdGVzdCB3b3JrcyBvbiAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORCAgICAgICAgIDB4YTA4MDAwMDAgICAgICAvKiA0IC4uLiA4IE1CIGluIERSQU0gICAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSICAgICAgICAgICAweGEzMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCi0JCQkJCQkvKiBSUzogd2hlcmUgaXMgdGhpcyBkb2N1bWVudGVkPyAqLwotCQkJCQkJLyogUlM6IGlzIHRoaXMgd2hlcmUgVS1Cb290IGlzICAqLwotCQkJCQkJLyogUlM6IHJlbG9jYXRlZCB0byBpbiBSQU0/ICAgICAgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMAotCQkJCQkJLyogUlM6IHRoZSBvc2NpbGxhdG9yIGlzIGFjdHVhbGx5IDM2ODAxMzA/PyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0NQVVNQRUVEICAgICAgICAgICAgMHgxNDEgICAgICAgICAgIC8qIHNldCBjb3JlIGNsb2NrIHRvIDIwMC8yMDAvMTAwIE1IeiAqLwotCQkJCQkJLyogMDEwMTAwMDAwMSAqLwotCQkJCQkJLyogICAgICBeXl5eXiBNZW1vcnkgU3BlZWQgOTkuNTMgTUh6ICAgICAgICAgKi8KLQkJCQkJCS8qICAgIF5eICAgICAgUnVuIE1vZGUgU3BlZWQgPSAyeCBNZW0gU3BlZWQgICovCi0JCQkJCQkvKiBeXiAgICAgICAgIFR1cmJvIE1vZGUgU3AuID0gMXggUnVuIE0uIFNwLiAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCTB4MWMwMDAJCS8qIDExMiBLaUIgKi8KLQotCQkJCQkJLyogdmFsaWQgYmF1ZHJhdGVzICovCi0jZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUgICAgICB7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9Ci0KLS8qCi0gKiBOZXR3b3JrIGNoaXAKLSAqLwotI2RlZmluZSBDT05GSUdfQ1M4OTAwCi0jZGVmaW5lIENPTkZJR19DUzg5MDBfQlVTMzIKLSNkZWZpbmUgQ09ORklHX0NTODkwMF9CQVNFCTB4MDgwMDAwMDAKLQotLyoKLSAqIFN0YWNrIHNpemVzCi0gKgotICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKLSAqLwotI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFICAgICAgICAoMTI4KjEwMjQpICAgICAgLyogcmVndWxhciBzdGFjayAqLwotI2lmZGVmICBDT05GSUdfVVNFX0lSUQotI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0lSUSAgICAoNCoxMDI0KSAgICAgICAgLyogSVJRIHN0YWNrICovCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRICAgICg0KjEwMjQpICAgICAgICAvKiBGSVEgc3RhY2sgKi8KLSNlbmRpZgotCi0vKgotICogUGh5c2ljYWwgTWVtb3J5IE1hcAotICovCi0jZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJCS8qIHdlIGhhdmUgMSBiYW5rIG9mIERSQU0gICAqLwotI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4YTAwMDAwMDAJLyogU0RSQU0gQmFuayAjMSAgICAgICAgICAgICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDIwMDAwMDAJLyogMzIgTUIgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUgUEhZU19GTEFTSF8xCQkweDAwMDAwMDAwCS8qIEZsYXNoIEJhbmsgIzEgICAgICAgICAgICAqLwotI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCTB4MDIwMDAwMDAJLyogMzIgTUIgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19EUkFNX0JBU0UJCTB4YTAwMDAwMDAJLyogUkFNIHN0YXJ0cyBoZXJlICAgICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfRFJBTV9TSVpFCQkweDAyMDAwMDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFICAgICAgICAgIFBIWVNfRkxBU0hfMQotCi0jZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJUEhZU19TRFJBTV8xCi0jZGVmaW5lCUNPTkZJR19TWVNfSU5JVF9TUF9BRERSCQkoR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUgKyBQSFlTX1NEUkFNXzEpCi0KLSMgaWYgMAotLyogRklYTUU6IHN3aXRjaCB0byBfZG9jdW1lbnRlZF8gcmVnaXN0ZXJzICovCi0vKgotICogR1BJTyBzZXR0aW5ncwotICoKLSAqIEdQMTUgPT0gbkNTMSAgICAgIGlzIDEKLSAqIEdQMjQgPT0gU0ZSTSAgICAgIGlzIDEKLSAqIEdQMjUgPT0gVFhEICAgICAgIGlzIDEKLSAqIEdQMzMgPT0gbkNTNSAgICAgIGlzIDEKLSAqIEdQMzkgPT0gRkZUWEQgICAgIGlzIDEKLSAqIEdQNDEgPT0gUlRTICAgICAgIGlzIDEKLSAqIEdQNDcgPT0gVFhEICAgICAgIGlzIDEKLSAqIEdQNDkgPT0gblBXRSAgICAgIGlzIDEKLSAqIEdQNjIgPT0gTEVEX0IgICAgIGlzIDEKLSAqIEdQNjMgPT0gVERNX09FICAgIGlzIDEKLSAqIEdQNzggPT0gbkNTMiAgICAgIGlzIDEKLSAqIEdQNzkgPT0gbkNTMyAgICAgIGlzIDEKLSAqIEdQODAgPT0gbkNTNCAgICAgIGlzIDEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0dQU1IwX1ZBTCAgICAgICAweDAzMDA4MDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BTUjFfVkFMICAgICAgIDB4QzAwMjgyODIKLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMl9WQUwgICAgICAgMHgwMDAxQzAwMAotCi0vKiBHUDAyID09IERPTl9SU1QgICBpcyAwCi0gKiBHUDIzID09IFNDTEsgICAgICBpcyAwCi0gKiBHUDQ1ID09IFVTQl9BQ1QgICBpcyAwCi0gKiBHUDYwID09IFBMTEVOICAgICBpcyAwCi0gKiBHUDYxID09IExFRF9BICAgICBpcyAwCi0gKiBHUDczID09IFNXVVBEX0xFRCBpcyAwCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMF9WQUwgICAgICAgMHgwMDgwMDAwNAotI2RlZmluZSBDT05GSUdfU1lTX0dQQ1IxX1ZBTCAgICAgICAweDMwMDAyMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BDUjJfVkFMICAgICAgIDB4MDAwMDAxMDAKLQotLyogR1AwMCA9PSBET05fUkVBRFkgaXMgaW5wdXQKLSAqIEdQMDEgPT0gRE9OX09LICAgIGlzIGlucHV0Ci0gKiBHUDAyID09IERPTl9SU1QgICBpcyBvdXRwdXQKLSAqIEdQMDMgPT0gUkVTRVRfSU5EIGlzIGlucHV0Ci0gKiBHUDA3ID09IFJFUzExICAgICBpcyBpbnB1dAotICogR1AwOSA9PSBSRVMxMiAgICAgaXMgaW5wdXQKLSAqIEdQMTEgPT0gU1dVUERBVEUgIGlzIGlucHV0Ci0gKiBHUDE0ID09IG5QT1dFUk9LICBpcyBpbnB1dAotICogR1AxNSA9PSBuQ1MxICAgICAgaXMgb3V0cHV0Ci0gKiBHUDE3ID09IFJFUzIyICAgICBpcyBpbnB1dAotICogR1AxOCA9PSBSRFkgICAgICAgaXMgaW5wdXQKLSAqIEdQMjMgPT0gU0NMSyAgICAgIGlzIG91dHB1dAotICogR1AyNCA9PSBTRlJNICAgICAgaXMgb3V0cHV0Ci0gKiBHUDI1ID09IFRYRCAgICAgICBpcyBvdXRwdXQKLSAqIEdQMjYgPT0gUlhEICAgICAgIGlzIGlucHV0Ci0gKiBHUDMyID09IFJFUzIxICAgICBpcyBpbnB1dAotICogR1AzMyA9PSBuQ1M1ICAgICAgaXMgb3V0cHV0Ci0gKiBHUDM0ID09IEZGUlhEICAgICBpcyBpbnB1dAotICogR1AzNSA9PSBDVFMgICAgICAgaXMgaW5wdXQKLSAqIEdQMzkgPT0gRkZUWEQgICAgIGlzIG91dHB1dAotICogR1A0MSA9PSBSVFMgICAgICAgaXMgb3V0cHV0Ci0gKiBHUDQyID09IFVTQl9PSyAgICBpcyBpbnB1dAotICogR1A0NSA9PSBVU0JfQUNUICAgaXMgb3V0cHV0Ci0gKiBHUDQ2ID09IFJYRCAgICAgICBpcyBpbnB1dAotICogR1A0NyA9PSBUWEQgICAgICAgaXMgb3V0cHV0Ci0gKiBHUDQ5ID09IG5QV0UgICAgICBpcyBvdXRwdXQKLSAqIEdQNTggPT0gbkNQVUJVU0lOVCBpcyBpbnB1dAotICogR1A1OSA9PSBMQU5JTlQgICAgaXMgaW5wdXQKLSAqIEdQNjAgPT0gUExMRU4gICAgIGlzIG91dHB1dAotICogR1A2MSA9PSBMRURfQSAgICAgaXMgb3V0cHV0Ci0gKiBHUDYyID09IExFRF9CICAgICBpcyBvdXRwdXQKLSAqIEdQNjMgPT0gVERNX09FICAgIGlzIG91dHB1dAotICogR1A2NCA9PSBuRFNQSU5UICAgaXMgaW5wdXQKLSAqIEdQNjUgPT0gU1RSQVAwICAgIGlzIGlucHV0Ci0gKiBHUDY3ID09IFNUUkFQMSAgICBpcyBpbnB1dAotICogR1A2OSA9PSBTVFJBUDIgICAgaXMgaW5wdXQKLSAqIEdQNzAgPT0gU1RSQVAzICAgIGlzIGlucHV0Ci0gKiBHUDcxID09IFNUUkFQNCAgICBpcyBpbnB1dAotICogR1A3MyA9PSBTV1VQRF9MRUQgaXMgb3V0cHV0Ci0gKiBHUDc4ID09IG5DUzIgICAgICBpcyBvdXRwdXQKLSAqIEdQNzkgPT0gbkNTMyAgICAgIGlzIG91dHB1dAotICogR1A4MCA9PSBuQ1M0ICAgICAgaXMgb3V0cHV0Ci0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMF9WQUwgICAgICAgMHgwMzgwODAwNAotI2RlZmluZSBDT05GSUdfU1lTX0dQRFIxX1ZBTCAgICAgICAweEYwMDJBMjgyCi0jZGVmaW5lIENPTkZJR19TWVNfR1BEUjJfVkFMICAgICAgIDB4MDAwMUMyMDAKLQotLyogR1AxNSA9PSBuQ1MxICBpcyBBRjEwCi0gKiBHUDE4ID09IFJEWSAgIGlzIEFGMDEKLSAqIEdQMjMgPT0gU0NMSyAgaXMgQUYxMAotICogR1AyNCA9PSBTRlJNICBpcyBBRjEwCi0gKiBHUDI1ID09IFRYRCAgIGlzIEFGMTAKLSAqIEdQMjYgPT0gUlhEICAgaXMgQUYwMQotICogR1AzMyA9PSBuQ1M1ICBpcyBBRjEwCi0gKiBHUDM0ID09IEZGUlhEIGlzIEFGMDEKLSAqIEdQMzUgPT0gQ1RTICAgaXMgQUYwMQotICogR1AzOSA9PSBGRlRYRCBpcyBBRjEwCi0gKiBHUDQxID09IFJUUyAgIGlzIEFGMTAKLSAqIEdQNDYgPT0gUlhEICAgaXMgQUYxMAotICogR1A0NyA9PSBUWEQgICBpcyBBRjAxCi0gKiBHUDQ5ID09IG5QV0UgIGlzIEFGMTAKLSAqIEdQNzggPT0gbkNTMiAgaXMgQUYxMAotICogR1A3OSA9PSBuQ1MzICBpcyBBRjEwCi0gKiBHUDgwID09IG5DUzQgIGlzIEFGMTAKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIwX0xfVkFMICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjBfVV9WQUwgICAgIDB4MDAxQTgwMTAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMV9MX1ZBTCAgICAgMHg2MDA4ODA1OAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIxX1VfVkFMICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjJfTF9WQUwgICAgIDB4QTAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMl9VX1ZBTCAgICAgMHgwMDAwMDAwMgotCi0KLS8qIEZJWE1FOiBzZXQgR1BJT19SRVIvRkVSICovCi0KLS8qIFJESCA9IDEKLSAqIFBIICA9IDEKLSAqIFZGUyA9IDEKLSAqIEJGUyA9IDEKLSAqIFNTUyA9IDEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BTU1JfVkFMCQkweDM3Ci0KLS8qCi0gKiBNZW1vcnkgc2V0dGluZ3MKLSAqCi0gKiBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBuQ1MwLzEgLT4gZmxhc2ggYmFua3MKLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzE6Ci0gKiBbMzFdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMzA6MjhdIDAxMCAgLSBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAyKigyKk1lbUNsaykgPSA0MCBucwotICogWzI3OjI0XSAwMTAxIC0gQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDUrMSkqTWVtQ2xrID0gNjAgbnMKLSAqIFsyMzoyMF0gMTAxMSAtICIgZm9yIGZpcnN0IGFjY2VzczogKDExKzIpKk1lbUNsayA9IDEzMCBucwotICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzE4OjE2XSAwMDAgIC0gbm9uYnVyc3QgUkFNIG9yIEZMQVNICi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1MwOgotICogWzE1XSAgICAwICAgIC0gU2xvd2VyIERldmljZQotICogWzE0OjEyXSAwMTAgIC0gQ1MgZGVzZWxlY3QgdG8gQ1MgdGltZTogMiooMipNZW1DbGspID0gNDAgbnMKLSAqIFsxMTowOF0gMDEwMSAtIEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICg1KzEpKk1lbUNsayA9IDYwIG5zCi0gKiBbMDc6MDRdIDEwMTEgLSAiIGZvciBmaXJzdCBhY2Nlc3M6ICgxMSsyKSpNZW1DbGsgPSAxMzAgbnMKLSAqIFswM10gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKLSAqIFswMjowMF0gMDAwICAtIG5vbmJ1cnN0IFJBTSBvciBGTEFTSAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMF9WQUwJCTB4MjViODI1YjggLyogZmxhc2ggYmFua3MgICAgICAgICAgICAgICAgICAgKi8KLQotLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgbkNTMi8zIC0+IFRETS1Td2l0Y2gsIERTUAotICogY29uZmlndXJhdGlvbiBmb3IgbkNTMzogRFNQCi0gKiBbMzFdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMzA6MjhdIDAwMSAgLSBSUlIzOiBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAxKigyKk1lbUNsaykgPSAyMCBucwotICogWzI3OjI0XSAwMDEwIC0gUkROMzogQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDIrMSkqTWVtQ2xrID0gMzAgbnMKLSAqIFsyMzoyMF0gMDAxMSAtIFJERjM6IEFkZHJlc3MgZm9yIGZpcnN0IGFjY2VzczogKDMrMSkqTWVtQ2xrID0gNDAgbnMKLSAqIFsxOV0gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKLSAqIFsxODoxNl0gMTAwICAtIHZhcmlhYmxlIGxhdGVuY3kgSS9PCi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1MyOiBURE0tU3dpdGNoCi0gKiBbMTVdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMTQ6MTJdIDEwMSAgLSBSUlIyOiBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiA1KigyKk1lbUNsaykgPSAxMDAgbnMKLSAqIFsxMTowOF0gMTAwMSAtIFJETjI6IEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICg5KzEpKk1lbUNsayA9IDEwMCBucwotICogWzA3OjA0XSAwMDExIC0gUkRGMjogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAoMysxKSpNZW1DbGsgPSA0MCBucwotICogWzAzXSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzAyOjAwXSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01TQzFfVkFMCQkweDEyM0M1OTNDIC8qIFRETSBzd2l0Y2gsIERTUCAgICAgICAgICAgICAgICovCi0KLS8qIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzQvNSAtPiBFeHRCdXMsIExBTiBDb250cm9sbGVyCi0gKgotICogY29uZmlndXJhdGlvbiBmb3IgbkNTNTogTEFOIENvbnRyb2xsZXIKLSAqIFszMV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFszMDoyOF0gMDAxICAtIFJSUjU6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDEqKDIqTWVtQ2xrKSA9IDIwIG5zCi0gKiBbMjc6MjRdIDAwMTAgLSBSRE41OiBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoMisxKSpNZW1DbGsgPSAzMCBucwotICogWzIzOjIwXSAwMDExIC0gUkRGNTogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAoMysxKSpNZW1DbGsgPSA0MCBucwotICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzE4OjE2XSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzQ6IEV4dEJ1cwotICogWzE1XSAgICAwICAgIC0gU2xvd2VyIERldmljZQotICogWzE0OjEyXSAxMTAgIC0gUlJSNDogQ1MgZGVzZWxlY3QgdG8gQ1MgdGltZTogNiooMipNZW1DbGspID0gMTIwIG5zCi0gKiBbMTE6MDhdIDExMDAgLSBSRE40OiBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoMTIrMSkqTWVtQ2xrID0gMTMwIG5zCi0gKiBbMDc6MDRdIDExMDEgLSBSREY0OiBBZGRyZXNzIGZvciBmaXJzdCBhY2Nlc3M6IDEzLT4oMTUrMSkqTWVtQ2xrID0gMTYwIG5zCi0gKiBbMDNdICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMDI6MDBdIDEwMCAgLSB2YXJpYWJsZSBsYXRlbmN5IEkvTwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMl9WQUwJCTB4MTIzQzZDREMgLyogZXh0cmEgYnVzLCBMQU4gY29udHJvbGxlciAgICAgKi8KLQotLyogTURDTkZHOiBTRFJBTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0gKgotICogWzMxOjI5XSAgIDAwMCAtIHJlc2VydmVkCi0gKiBbMjhdICAgICAgMAkgLSBubyBTQTExMTEgY29tcGF0aWJsaXR5IG1vZGUKLSAqIFsyN10gICAgICAwICAgLSBsYXRjaCByZXR1cm4gZGF0YSB3aXRoIHJldHVybiBjbG9jawotICogWzI2XSAgICAgIDAgICAtIGFsdGVybmF0ZSBhZGRyZXNzaW5nIGZvciBwYWlyIDIvMwotICogWzI1OjI0XSAgIDAwICAtIHRpbWluZ3MKLSAqIFsyM10gICAgICAwICAgLSBpbnRlcm5hbCBiYW5rcyBpbiBsb3dlciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKLSAqIFsyMjoyMV0gICAwMCAgLSByb3cgYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKLSAqIFsyMDoxOV0gICAwMCAgLSBjb2x1bW4gYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKLSAqIFsxOF0gICAgICAwICAgLSBTRFJBTSBwYXJ0aXRpb24gMi8zIHdpZHRoIGlzIDMyIGJpdAotICogWzE3XSAgICAgIDAgICAtIFNEUkFNIHBhcnRpdGlvbiAzIGRpc2FibGVkCi0gKiBbMTZdICAgICAgMCAgIC0gU0RSQU0gcGFydGl0aW9uIDIgZGlzYWJsZWQKLSAqIFsxNToxM10gICAwMDAgLSByZXNlcnZlZAotICogWzEyXSAgICAgIDEJIC0gU0ExMTExIGNvbXBhdGlibGl0eSBtb2RlCi0gKiBbMTFdICAgICAgMSAgIC0gbGF0Y2ggcmV0dXJuIGRhdGEgd2l0aCByZXR1cm4gY2xvY2sKLSAqIFsxMF0gICAgICAwICAgLSBubyBhbHRlcm5hdGUgYWRkcmVzc2luZyBmb3IgcGFpciAwLzEKLSAqIFswOTowOF0gICAwMSAgLSB0UlA9MipNZW1DbGsgQ0w9MiB0UkNEPTIqTWVtQ2xrIHRSQVM9NSpNZW1DbGsgdFJDPTgqTWVtQ2xrCi0gKiBbN10gICAgICAgMSAgIC0gNCBpbnRlcm5hbCBiYW5rcyBpbiBsb3dlciBwYXJ0aXRpb24gcGFpcgotICogWzA2OjA1XSAgIDEwICAtIDEzIHJvdyBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAwLzEKLSAqIFswNDowM10gICAwMSAgLSA5IGNvbHVtbiBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAwLzEKLSAqIFswMl0gICAgICAwICAgLSBTRFJBTSBwYXJ0aXRpb24gMC8xIHdpZHRoIGlzIDMyIGJpdAotICogWzAxXSAgICAgIDAgICAtIGRpc2FibGUgU0RSQU0gcGFydGl0aW9uIDEKLSAqIFswMF0gICAgICAxICAgLSBlbmFibGUgIFNEUkFNIHBhcnRpdGlvbiAwCi0gKi8KLS8qIHVzZSB0aGUgY29uZmlndXJhdGlvbiBhYm92ZSBidXQgZGlzYWJsZSBwYXJ0aXRpb24gMCAqLwotI2RlZmluZSBDT05GSUdfU1lTX01EQ05GR19WQUwJCTB4MDAwMDE5YzgKLQotLyogTURSRUZSOiBTRFJBTSBSZWZyZXNoIENvbnRyb2wgUmVnaXN0ZXIKLSAqCi0gKiBbMzI6MjZdIDAgICAgIC0gcmVzZXJ2ZWQKLSAqIFsyNV0gICAgMCAgICAgLSBLMkZSRUU6IG5vdCBmcmVlIHJ1bm5pbmcKLSAqIFsyNF0gICAgMCAgICAgLSBLMUZSRUU6IG5vdCBmcmVlIHJ1bm5pbmcKLSAqIFsyM10gICAgMSAgICAgLSBLMEZSRUU6IG5vdCBmcmVlIHJ1bm5pbmcKLSAqIFsyMl0gICAgMCAgICAgLSBTTEZSU0g6IHNlbGYgcmVmcmVzaCBkaXNhYmxlZAotICogWzIxXSAgICAwICAgICAtIHJlc2VydmVkCi0gKiBbMjBdICAgIDAgICAgIC0gQVBEOiBubyBhdXRvIHBvd2VyIGRvd24KLSAqIFsxOV0gICAgMCAgICAgLSBLMkRCMjogU0RDTEsyIGlzIE1lbUNsawotICogWzE4XSAgICAwICAgICAtIEsyUlVOOiBkaXNhYmxlIFNEQ0xLMgotICogWzE3XSAgICAwICAgICAtIEsxREIyOiBTRENMSzEgaXMgTWVtQ2xrCi0gKiBbMTZdICAgIDEgICAgIC0gSzFSVU46IGVuYWJsZSBTRENMSzEKLSAqIFsxNV0gICAgMSAgICAgLSBFMVBJTjogU0RSQU0gY2xvY2sgZW5hYmxlCi0gKiBbMTRdICAgIDEgICAgIC0gSzBEQjI6IFNEQ0xLMCBpcyBNZW1DbGsKLSAqIFsxM10gICAgMCAgICAgLSBLMFJVTjogZGlzYWJsZSBTRENMSzAKLSAqIFsxMl0gICAgMSAgICAgLSBFMFBJTjogZGlzYWJsZSBTRENLRTAKLSAqIFsxMTowMF0gMDAwMDAwMDExMDAwIC0gKDY0bXMvODE5MikqTWVtQ2xrRnJlcS8zMiA9IDI0Ci0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRFJFRlJfVkFMCQkweDAwODFEMDE4Ci0KLS8qIE1ETVJTOiBNb2RlIFJlZ2lzdGVyIFNldCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0gKgotICogWzMxXSAgICAgIDAgICAgICAgLSByZXNlcnZlZAotICogWzMwOjIzXSAgIDAwMDAwMDAwLSBNRE1SUzI6IFNEUkFNMi8zIE1SUyBWYWx1ZS4gKG5vdCB1c2VkKQotICogWzIyOjIwXSAgIDAwMCAgICAgLSBNRENMMjogIFNEUkFNMi8zIENhcyBMYXRlbmN5LiAgKG5vdCB1c2VkKQotICogWzE5XSAgICAgIDAgICAgICAgLSBNREFERDI6IFNEUkFNMi8zIGJ1cnN0IFR5cGUuIEZpeGVkIHRvIHNlcXVlbnRpYWwuICAobm90IHVzZWQpCi0gKiBbMTg6MTZdICAgMDEwICAgICAtIE1EQkwyOiAgU0RSQU0yLzMgYnVyc3QgTGVuZ3RoLiBGaXhlZCB0byA0LiAgKG5vdCB1c2VkKQotICogWzE1XSAgICAgIDAgICAgICAgLSByZXNlcnZlZAotICogWzE0OjA3XSAgIDAwMDAwMDAwLSBNRE1SUzA6IFNEUkFNMC8xIE1SUyBWYWx1ZS4KLSAqIFswNjowNF0gICAwMTAgICAgIC0gTURDTDA6ICBTRFJBTTAvMSBDYXMgTGF0ZW5jeS4KLSAqIFswM10gICAgICAwICAgICAgIC0gTURBREQwOiBTRFJBTTAvMSBidXJzdCBUeXBlLiBGaXhlZCB0byBzZXF1ZW50aWFsLgotICogWzAyOjAwXSAgIDAxMCAgICAgLSBNREJMMDogIFNEUkFNMC8xIGJ1cnN0IExlbmd0aC4gRml4ZWQgdG8gNC4KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01ETVJTX1ZBTAkJMHgwMDAyMDAyMgotCi0vKgotICogUENNQ0lBIGFuZCBDRiBJbnRlcmZhY2VzCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRUNSX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DTUVNMF9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ01FTTFfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNBVFQwX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DQVRUMV9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0lPMF9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0lPMV9WQUwJCTB4MDAwMDAwMDAKLSNlbmRpZgotCi0vKgotICogR1BJTyBzZXR0aW5ncwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfR1BTUjBfVkFMCQkweEZGRkZGRkZGCi0jZGVmaW5lIENPTkZJR19TWVNfR1BTUjFfVkFMCQkweEZGRkZGRkZGCi0jZGVmaW5lIENPTkZJR19TWVNfR1BTUjJfVkFMCQkweEZGRkZGRkZGCi0jZGVmaW5lIENPTkZJR19TWVNfR1BDUjBfVkFMCQkweDA4MDIyMDgwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BDUjFfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BDUjJfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BEUjBfVkFMCQkweENEODJBODc4Ci0jZGVmaW5lIENPTkZJR19TWVNfR1BEUjFfVkFMCQkweEZDRkZBQjgwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BEUjJfVkFMCQkweDAwMDFGRkZGCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjBfTF9WQUwJCTB4ODAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMF9VX1ZBTAkJMHhBNTI1NDAxMAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIxX0xfVkFMCQkweDU5OUE5NTUwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjFfVV9WQUwJCTB4QUFBNUFBQUEKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMl9MX1ZBTAkJMHhBQUFBQUFBQQotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIyX1VfVkFMCQkweDAwMDAwMDAyCi0KLS8qIEZJWE1FOiBzZXQgR1BJT19SRVIvRkVSICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19QU1NSX1ZBTCAgICAgICAgMHgyMAotCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0NDUgkJCUNDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTAKLSNkZWZpbmUJQ09ORklHX1NZU19DS0VOCQkJMHgwCi0KLS8qCi0gKiBNZW1vcnkgc2V0dGluZ3MKLSAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMF9WQUwgICAgICAgICAgICAweDJlZjE1YWYwCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMV9WQUwgICAgICAgICAgICAweDAwMDAzZmY0Ci0jZGVmaW5lIENPTkZJR19TWVNfTVNDMl9WQUwgICAgICAgICAgICAweDdmZjA3ZmYwCi0jZGVmaW5lIENPTkZJR19TWVNfTURDTkZHX1ZBTCAgICAgICAgICAweDA5YTkwOWE5Ci0jZGVmaW5lIENPTkZJR19TWVNfTURSRUZSX1ZBTCAgICAgICAgICAweDAzOGZmMDMwCi0jZGVmaW5lIENPTkZJR19TWVNfTURNUlNfVkFMICAgICAgICAgICAweDAwMjIwMDIyCi0jZGVmaW5lCUNPTkZJR19TWVNfRkxZQ05GR19WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUJQ09ORklHX1NZU19TWENORkdfVkFMCQkweDAwMDAwMDAwCi0KLS8qCi0gKiBQQ01DSUEgYW5kIENGIEludGVyZmFjZXMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01FQ1JfVkFMICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNNRU0wX1ZBTCAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ01FTTFfVkFMICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DQVRUMF9WQUwgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNBVFQxX1ZBTCAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0lPMF9WQUwgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DSU8xX1ZBTCAgICAgICAweDAwMDAwMDAwCi0KLSNkZWZpbmUgQ1NCMjI2X1VTRVJfTEVEMAkweDAwMDAwMDA4Ci0jZGVmaW5lIENTQjIyNl9VU0VSX0xFRDEJMHgwMDAwMDAxMAotI2RlZmluZSBDU0IyMjZfVVNFUl9MRUQyCTB4MDAwMDAwMjAKLQotCi0vKgotICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTICAgICAxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJMTI4CS8qIG1heCBudW1iZXIgb2Ygc2VjdC4gb24gb25lIGNoaXAgICovCi0KLS8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQgICAgKDIqQ09ORklHX1NZU19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUICAgICgyKkNPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICAgICAgICovCi0KLSNkZWZpbmUJQ09ORklHX0VOVl9JU19JTl9GTEFTSAkxCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUiAgICAgICAgICAgIChQSFlTX0ZMQVNIXzEgKyAweDFDMDAwKQotCQkJCQkvKiBBZGRyIG9mIEVudmlyb25tZW50IFNlY3RvciAgICAgICAqLwotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUgICAgICAgICAgICAweDQwMDAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCi0KLSNlbmRpZiAgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2RhODUwX2FtMTh4eGV2bS5oIGIvaW5jbHVkZS9jb25maWdzL2RhODUwX2FtMTh4eGV2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjgzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZGE4NTBfYW0xOHh4ZXZtLmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogQmFzZWQgb24gZGF2aW5jaV9kdmV2bS5oLiBPcmlnaW5hbCBDb3B5cmlnaHRzIGZvbGxvdzoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2VyZ2V5IEt1YnVzaHluIDxrc2lAa29pOC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEJvYXJkCisgKi8KKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9USV9FTUFDCisjZGVmaW5lIENPTkZJR19VU0VfU1BJRkxBU0gKKworCisvKgorICogU29DIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTUFDSF9EQVZJTkNJX0RBODUwX0VWTQorI2RlZmluZSBDT05GSUdfQVJNOTI2RUpTCQkvKiBhcm05MjZlanMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX1NPQ19EQThYWAkJLyogVEkgREE4eHggU29DICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJCWNsa19nZXQoREFWSU5DSV9BUk1fQ0xLSUQpCisjZGVmaW5lIENPTkZJR19TWVNfT1NDSU5fRlJFUQkJMjQwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19USU1FUkJBU0UJCURBVklOQ0lfVElNRVIwX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19IWl9DTE9DSwkJY2xrX2dldChEQVZJTkNJX0FVWENMS19DTEtJRCkKKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCTEwMDAKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHhjMTA4MDAwMAorCisvKgorICogTWVtb3J5IEluZm8KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JKDB4MTAwMDAgKyAxKjEwMjQqMTAyNCkgLyogbWFsbG9jKCkgbGVuICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMQkJREFWSU5DSV9ERFJfRU1JRl9EQVRBX0JBU0UgLyogRERSIFN0YXJ0ICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCSg2NCA8PCAyMCkgLyogU0RSQU0gc2l6ZSA2NE1CICovCisjZGVmaW5lIENPTkZJR19NQVhfUkFNX0JBTktfU0laRSAoNTEyIDw8IDIwKSAvKiBtYXggc2l6ZSBmcm9tIFNQUlM1ODYqLworCisvKiBtZW10ZXN0IHN0YXJ0IGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCShQSFlTX1NEUkFNXzEgKyAweDIwMDAwMDApCisKKy8qIG1lbXRlc3Qgd2lsbCBiZSBydW4gb24gMTZNQiAqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECShQSFlTX1NEUkFNXzEgKyAweDIwMDAwMDAgKyAxNioxMDI0KjEwMjQpCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMSAvKiB3ZSBoYXZlIDEgYmFuayBvZiBEUkFNICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDI1NioxMDI0KSAvKiByZWd1bGFyIHN0YWNrICovCisKKy8qCisgKiBTZXJpYWwgRHJpdmVyIGluZm8KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJLTQJLyogTlMxNjU1MCByZWdpc3RlciBzaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00xCURBVklOQ0lfVUFSVDJfQkFTRSAvKiBCYXNlIGFkZHJlc3Mgb2YgVUFSVDIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NMSwljbGtfZ2V0KERBVklOQ0lfVUFSVDJfQ0xLSUQpCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCTEJCS8qIHVzZSBVQVJUMCBmb3IgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAkJLyogRGVmYXVsdCBiYXVkIHJhdGUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKyNkZWZpbmUgQ09ORklHX1NQSQorI2RlZmluZSBDT05GSUdfU1BJX0ZMQVNICisjZGVmaW5lIENPTkZJR19TUElfRkxBU0hfV0lOQk9ORAorI2RlZmluZSBDT05GSUdfREFWSU5DSV9TUEkKKyNkZWZpbmUgQ09ORklHX1NZU19TUElfQkFTRQkJREFWSU5DSV9TUEkxX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19TUElfQ0xLCQljbGtfZ2V0KERBVklOQ0lfU1BJMV9DTEtJRCkKKyNkZWZpbmUgQ09ORklHX1NGX0RFRkFVTFRfU1BFRUQJCTMwMDAwMDAwCisjZGVmaW5lIENPTkZJR19FTlZfU1BJX01BWF9IWglDT05GSUdfU0ZfREVGQVVMVF9TUEVFRAorCisvKgorICogSTJDIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9EQVZJTkNJX0kyQworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMjUwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfU0xBVkUJCTEwIC8qIEJvZ3VzLCBtYXN0ZXItb25seSBpbiBVLUJvb3QgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfRVhQQU5ERVJfQUREUiAgIDB4MjAKKworLyoKKyAqIEZsYXNoICYgRW52aXJvbm1lbnQKKyAqLworI2lmZGVmIENPTkZJR19VU0VfTkFORAorI3VuZGVmIENPTkZJR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ09ORklHX05BTkRfREFWSU5DSQorI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTkFORAkJLyogVS1Cb290IGVudiBpbiBOQU5EIEZsYXNoICAqLworI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJMHgwIC8qIEJsb2NrIDAtLW5vdCB1c2VkIGJ5IGJvb3Rjb2RlICovCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCSgxMjggPDwgMTApCisjZGVmaW5lCUNPTkZJR19TWVNfTkFORF9VU0VfRkxBU0hfQkJUCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF80QklUX0hXX0VDQ19PT0JGSVJTVAorI2RlZmluZQlDT05GSUdfU1lTX05BTkRfUEFHRV8ySworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQ1MJCTMKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UJCURBVklOQ0lfQVNZTkNfRU1JRl9EQVRBX0NFM19CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfQ0xFX01BU0sJCTB4MTAKKyNkZWZpbmUgQ09ORklHX1NZU19BTEVfTUFTSwkJMHg4CisjdW5kZWYgQ09ORklHX1NZU19OQU5EX0hXX0VDQworI2RlZmluZSBDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRQkxIC8qIE1heCBudW1iZXIgb2YgTkFORCBkZXZpY2VzICovCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2VuZGlmCisKKy8qCisgKiBOZXR3b3JrICYgRXRoZXJuZXQgQ29uZmlndXJhdGlvbgorICovCisjaWZkZWYgQ09ORklHX0RSSVZFUl9USV9FTUFDCisjZGVmaW5lIENPTkZJR19FTUFDX01ESU9fUEhZX05VTQkwCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0RFRkFVTFQKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0ROUworI2RlZmluZSBDT05GSUdfQk9PVFBfRE5TMgorI2RlZmluZSBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRQorI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCTEwCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTRV9OT1IKKyNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9GTEFTSAorI2RlZmluZSBDT05GSUdfRkxBU0hfQ0ZJX0RSSVZFUgorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0NGSQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1BST1RFQ1RJT04KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMSAvKiBtYXggbnVtYmVyIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfU0VDVF9TWgkoMTI4IDw8IDEwKSAvKiAxMjhLQiAqLworI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJKENPTkZJR19TWVNfRkxBU0hfU0VDVF9TWiAqIDMpCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCSgxMCA8PCAxMCkgLyogMTBLQiAqLworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJCURBVklOQ0lfQVNZTkNfRU1JRl9EQVRBX0NFMl9CQVNFCisjZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJCSg4IDw8IDIwKSAvKiBGbGFzaCBzaXplIDhNQiAqLworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUICgoUEhZU19GTEFTSF9TSVpFL0NPTkZJR19TWVNfRkxBU0hfU0VDVF9TWilcCisJICAgICAgICsgMykKKyNkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUJCUNPTkZJR19TWVNfRkxBU0hfU0VDVF9TWgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX1NQSUZMQVNICisjdW5kZWYgQ09ORklHX0VOVl9JU19JTl9GTEFTSAorI3VuZGVmIENPTkZJR19FTlZfSVNfSU5fTkFORAorI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX1NQSV9GTEFTSAorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkoNjQgPDwgMTApCisjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkoMjU2IDw8IDEwKQorI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRQkJKDY0IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICisjZW5kaWYKKworLyoKKyAqIFUtQm9vdCBnZW5lcmFsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQkidUltYWdlIiAvKiBCb290IGZpbGUgbmFtZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkiVS1Cb290ID4gIiAvKiBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkxMDI0IC8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCShDT05GSUdfU1lTX0NCU0laRStzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpKzE2KQorI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJMTYgLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRSAvKiBCb290IEFyZ3MgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJKFBIWVNfU0RSQU1fMSArIDB4NzAwMDAwKQorI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQorI2RlZmluZSBDT05GSUdfQVVUT19DT01QTEVURQorI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyCSI+ICIKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORworI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCisjZGVmaW5lIENPTkZJR19DUkMzMl9WRVJJRlkKKyNkZWZpbmUgQ09ORklHX01YX0NZQ0xJQworCisvKgorICogTGludXggSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBMSU5VWF9CT09UX1BBUkFNX0FERFIJKFBIWVNfU0RSQU1fMSArIDB4MTAwKQorI2RlZmluZSBDT05GSUdfSFdDT05GSUcJCS8qIGVuYWJsZSBod2NvbmZpZyAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcKKyNkZWZpbmUgQ09ORklHX1JFVklTSU9OX1RBRworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQlcCisJIm1lbT0zMk0gY29uc29sZT10dHlTMiwxMTUyMDBuOCByb290PS9kZXYvbXRkYmxvY2syIHJ3IG5vaW5pdHJkIGlwPWRoY3AiCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCSJod2NvbmZpZz1kc3A6d2FrZT15ZXMiCisKKy8qCisgKiBVLUJvb3QgY29tbWFuZHMKKyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorI2RlZmluZSBDT05GSUdfQ01EX0VOVgorI2RlZmluZSBDT05GSUdfQ01EX0FTS0VOVgorI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKKyNkZWZpbmUgQ09ORklHX0NNRF9ESUFHCisjZGVmaW5lIENPTkZJR19DTURfTUlJCisjZGVmaW5lIENPTkZJR19DTURfUElORworI2RlZmluZSBDT05GSUdfQ01EX1NBVkVTCisjZGVmaW5lIENPTkZJR19DTURfTUVNT1JZCisKKyNpZm5kZWYgQ09ORklHX0RSSVZFUl9USV9FTUFDCisjdW5kZWYgQ09ORklHX0NNRF9ORVQKKyN1bmRlZiBDT05GSUdfQ01EX0RIQ1AKKyN1bmRlZiBDT05GSUdfQ01EX01JSQorI3VuZGVmIENPTkZJR19DTURfUElORworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX05BTkQKKyN1bmRlZiBDT05GSUdfQ01EX0ZMQVNICisjdW5kZWYgQ09ORklHX0NNRF9JTUxTCisjZGVmaW5lIENPTkZJR19DTURfTkFORAorCisjZGVmaW5lIENPTkZJR19DTURfTVREUEFSVFMKKyNkZWZpbmUgQ09ORklHX01URF9ERVZJQ0UKKyNkZWZpbmUgQ09ORklHX01URF9QQVJUSVRJT05TCisjZGVmaW5lIENPTkZJR19MWk8KKyNkZWZpbmUgQ09ORklHX1JCVFJFRQorI2RlZmluZSBDT05GSUdfQ01EX1VCSQorI2RlZmluZSBDT05GSUdfQ01EX1VCSUZTCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfU1BJRkxBU0gKKyN1bmRlZiBDT05GSUdfQ01EX0lNTFMKKyN1bmRlZiBDT05GSUdfQ01EX0ZMQVNICisjZGVmaW5lIENPTkZJR19DTURfU1BJCisjZGVmaW5lIENPTkZJR19DTURfU0YKKyNkZWZpbmUgQ09ORklHX0NNRF9TQVZFRU5WCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19VU0VfTkFORCkgJiYgXAorCSFkZWZpbmVkKENPTkZJR19VU0VfTk9SKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX1VTRV9TUElGTEFTSCkKKyNkZWZpbmUgQ09ORklHX0VOVl9JU19OT1dIRVJFCisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gKKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkoMTYgPDwgMTApCisjdW5kZWYgQ09ORklHX0NNRF9JTUxTCisjdW5kZWYgQ09ORklHX0NNRF9FTlYKKyNlbmRpZgorCisvKiBhZGRpdGlvbnMgZm9yIG5ldyByZWxvY2F0aW9uIGNvZGUsIG11c3QgYWRkZWQgdG8gYWxsIGJvYXJkcyAqLworI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0JBU0UJCTB4YzAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIJCShDT05GSUdfU1lTX1NEUkFNX0JBU0UgKyAweDEwMDAgLSBcCisJCQkJCS8qIEZpeCB0aGlzICovIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQorI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX2RtNjQ2N1Rldm0uaCBiL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX2RtNjQ2N1Rldm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M5OTRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2RhdmluY2lfZG02NDY3VGV2bS5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyogU3BlY3RydW0gRGlnaXRhbCBUTVMzMjBETTY0NjdUIEVWTSBib2FyZCAqLworI2RlZmluZSBEQVZJTkNJX0RNNjQ2N0VWTQorI2RlZmluZSBEQVZJTkNJX0RNNjQ2N1RFVk0KKyNkZWZpbmUgQ09ORklHX1NZU19VU0VfTkFORAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfU01BTExQQUdFCisKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKiBTb0MgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDT05GSUdfQVJNOTI2RUpTCQkJCS8qIGFybTkyNmVqcyBDUFUgKi8KKworLyogQ2xvY2sgcmF0ZXMgZGV0ZWN0aW9uICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGludCBkYXZpbmNpX2FybV9jbGtfZ2V0KHZvaWQpOworI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS19GUkVRCQkzMzAwMDAwMAorLyogQXJtIENsb2NrIGZyZXF1ZW5jeSAgICAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCWRhdmluY2lfYXJtX2Nsa19nZXQoKQorLyogVGltZXIgSW5wdXQgY2xvY2sgZnJlcSAqLworI2RlZmluZSBDT05GSUdfU1lTX0haX0NMT0NLCQkoQ09ORklHX1NZU19DTEtfRlJFUS8yKQorI2RlZmluZSBDT05GSUdfU1lTX1RJTUVSQkFTRQkJMHgwMWMyMTQwMAkvKiB1c2UgdGltZXIgMCAqLworI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMAorI2RlZmluZSBDT05GSUdfU09DX0RNNjQ2WAorCisvKiBFRVBST00gZGVmaW5pdGlvbnMgZm9yIEVFUFJPTSAqLworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9MRU4JCTIKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFIJCTB4NTAKKyNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fUEFHRV9XUklURV9CSVRTCTYKKyNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUwkyMAorCisvKiBNZW1vcnkgSW5mbyAqLworI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxIDw8IDIwKQkvKiAxIE1pQiAqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHg4MDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDgxMDAwMDAwCS8qIDE2TUIgUkFNIHRlc3QgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJCTEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkJKDI1NiA8PCAxMCkJLyogMjU2IEtpQiAqLworI2RlZmluZSBQSFlTX1NEUkFNXzEJCQkweDgwMDAwMDAwCS8qIEREUiBTdGFydCAqLworI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkJKDI1NiA8PCAyMCkJLyogRERSIHNpemUgMjU2TUIgKi8KKworLyogTGludXggaW50ZXJmYWNpbmcgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQkxMDI0CQkvKiBCb290YXJnIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJCTB4ODA3MDAwMDAJLyoga2VybmVsIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ09ORklHX1JFVklTSU9OX1RBRworCisvKiBTZXJpYWwgRHJpdmVyIGluZm8gKi8KKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCTQKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEJCTB4MDFjMjAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NMSwkJMjQwMDAwMDAKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKiBJMkMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9EQVZJTkNJX0kyQworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJODAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfU0xBVkUJCTEwCisKKy8qIE5ldHdvcmsgJiBFdGhlcm5ldCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENPTkZJR19EUklWRVJfVElfRU1BQworI2RlZmluZSBDT05GSUdfRU1BQ19NRElPX1BIWV9OVU0JMQorI2RlZmluZSBDT05GSUdfTUlJCisjZGVmaW5lIENPTkZJR19CT09UUF9ERUZBVUxUCisjZGVmaW5lIENPTkZJR19CT09UUF9ETlMKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0ROUzIKKyNkZWZpbmUgQ09ORklHX0JPT1RQX1NFTkRfSE9TVE5BTUUKKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkxMAorI2RlZmluZSBDT05GSUdfQ01EX05FVAorCisvKiBGbGFzaCAmIEVudmlyb25tZW50ICovCisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gKKyNpZmRlZiBDT05GSUdfU1lTX1VTRV9OQU5ECisjZGVmaW5lIENPTkZJR19OQU5EX0RBVklOQ0kKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0NTCQkyCisjdW5kZWYgQ09ORklHX0VOVl9JU19JTl9GTEFTSAorI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQKKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJKDE2IDw8IDEwKQkvKiAxNiBLaUIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0VfTElTVAl7MHg0MjAwMDAwMCwgfQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfSFdfRUNDCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEKKyNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCTAKKyNlbHNlCisjZGVmaW5lIENPTkZJR19FTlZfSVNfTk9XSEVSRQorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkoNCA8PCAxMCkJLyogNCBLaUIgKi8KKyNlbmRpZgorCisvKiBVLUJvb3QgZ2VuZXJhbCBjb25maWd1cmF0aW9uICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogTm8gSVJRL0ZJUSBpbiBVLUJvb3QgKi8KKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisjZGVmaW5lIENPTkZJR19CT09URklMRQkJInVJbWFnZSIJLyogQm9vdCBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJIkRNNjQ2NyBFVk0gPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICovCisjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCQlcCisJCQkoQ09ORklHX1NZU19DQlNJWkUgKyBzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkJMTYKKyNkZWZpbmUgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUKKyNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUKKyNkZWZpbmUgQ09ORklHX1NZU19IVVNIX1BBUlNFUgorI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcKKyNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAorI2RlZmluZSBDT05GSUdfQ1JDMzJfVkVSSUZZCisjZGVmaW5lIENPTkZJR19NWF9DWUNMSUMKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECQkic291cmNlIDB4ODIwODAwMDA7IGRoY3A7IGJvb3RtIgorI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCQlcCisJCQkJCSJtZW09MTIwTSBjb25zb2xlPXR0eVMwLDExNTIwMG44ICIgXAorCQkJCQkicm9vdD0vZGV2L2hkYTEgcncgbm9pbml0cmQgaXA9ZGhjcCIKKworLyogVS1Cb290IGNvbW1hbmRzICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisjZGVmaW5lIENPTkZJR19DTURfQVNLRU5WCisjZGVmaW5lIENPTkZJR19DTURfRElBRworI2RlZmluZSBDT05GSUdfQ01EX0kyQworI2RlZmluZSBDT05GSUdfQ01EX01JSQorI2RlZmluZSBDT05GSUdfQ01EX1NBVkVTCisjZGVmaW5lIENPTkZJR19DTURfRUVQUk9NCisjZGVmaW5lIENPTkZJR19DTURfUElORworI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKKyN1bmRlZiBDT05GSUdfQ01EX0JESQorI3VuZGVmIENPTkZJR19DTURfRlBHQQorI3VuZGVmIENPTkZJR19DTURfU0VUR0VURENSCisjaWZkZWYgQ09ORklHX1NZU19VU0VfTkFORAorI3VuZGVmIENPTkZJR19DTURfRkxBU0gKKyN1bmRlZiBDT05GSUdfQ01EX0lNTFMKKyNkZWZpbmUgQ09ORklHX0NNRF9OQU5ECisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfTUFYX1JBTV9CQU5LX1NJWkUJKDI1NiA8PCAyMCkJLyogMjU2IE1CICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQlQSFlTX1NEUkFNXzEKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4MTAwMAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfQUREUgkJKENPTkZJR19TWVNfU0RSQU1fQkFTRSArIFwKKwkJCQkJIENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAtIFwKKwkJCQkJIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2RhdmluY2lfZG02NDY3ZXZtLmggYi9pbmNsdWRlL2NvbmZpZ3MvZGF2aW5jaV9kbTY0Njdldm0uaAppbmRleCBlYzFjMzFjLi5jOWEwY2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZGF2aW5jaV9kbTY0Njdldm0uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZGF2aW5jaV9kbTY0Njdldm0uaApAQCAtNjUsNiArNjUsNyBAQAogI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MKICNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJMTAyNAkJLyogQm9vdGFyZyBTaXplICovCiAjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkweDgwNzAwMDAwCS8qIGtlcm5lbCBhZGRyZXNzICovCisjZGVmaW5lIENPTkZJR19SRVZJU0lPTl9UQUcKIAogLyogU2VyaWFsIERyaXZlciBpbmZvICovCiAjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2RldmtpdDgwMDAuaCBiL2luY2x1ZGUvY29uZmlncy9kZXZraXQ4MDAwLmgKaW5kZXggNmM1MWEyNy4uZTE3NDNkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2RldmtpdDgwMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZGV2a2l0ODAwMC5oCkBAIC0zMzcsNiArMzM3LDcgQEAKICNkZWZpbmUgQ09ORklHX1NQTF9CU1NfTUFYX1NJWkUJCTB4ODAwMDAKIAogLyogTkFORCBib290IGNvbmZpZyAqLworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfNV9BRERSX0NZQ0xFCiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9QQUdFX0NPVU5UCTY0CiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9QQUdFX1NJWkUJMjA0OAogI2RlZmluZSBDT05GSUdfU1lTX05BTkRfT09CU0laRQkJNjQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9pbm5va29tLmggYi9pbmNsdWRlL2NvbmZpZ3MvaW5ub2tvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGEzZGExLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9pbm5va29tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MDcgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgotICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZS4KLSAqCi0gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQXVlcnN3YWxkIElubm9rb20gQ1BVIGJvYXJkLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBpbmNsdWRlL2NvbmZpZ3MvaW5ub2tvbS5oIC0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBib2FyZCBzcGVjaWZpYwotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLS8qCi0gKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwotICogKGVhc3kgdG8gY2hhbmdlKQotICovCi0jZGVmaW5lIENPTkZJR19QWEEyNTAJCTEJLyogVGhpcyBpcyBhbiBQWEEyNTAgQ1BVICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX0lOTk9LT00JCTEJLyogb24gYW4gQXVlcnN3YWxkIElubm9rb20gYm9hcmQgICAgKi8KLQotI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAgICAgKi8KLQkJCQkJLyogZm9yIHRpbWVyL2NvbnNvbGUvZXRoZXJuZXQgICAgICAgKi8KLQotI2RlZmluZQlDT05GSUdfU1lTX1RFWFRfQkFTRQkweDAKLQotLyogd2Ugd2lsbCBuZXZlciBlbmFibGUgZGNhY2hlLCBiZWNhdXNlIHdlIGhhdmUgdG8gc2V0dXAgTU1VIGZpcnN0ICovCi0jZGVmaW5lIENPTkZJR19TWVNfRENBQ0hFX09GRgotCi0vKgotICogSGFyZHdhcmUgZHJpdmVycwotICovCi0KLS8qCi0gKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19QWEFfU0VSSUFMCi0jZGVmaW5lIENPTkZJR19GRlVBUlQJCTEJLyogd2UgdXNlIEZGVUFSVCBvbiBDU0IyMjYgKi8KLQotLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLwotI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQotCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTkyMDAKLSNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCTEJLyogd2UgaGF2ZSBhIG1pc2NfaW5pdF9yKCkgZnVuY3Rpb24gKi8KLQotCi0vKgotICogQk9PVFAgb3B0aW9ucwotICovCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICi0jZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCi0jZGVmaW5lIENPTkZJR19CT09UUF9IT1NUTkFNRQotCi0KLS8qCi0gKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KLSAqLwotCi0jZGVmaW5lIENPTkZJR19DTURfQVNLRU5WCi0jZGVmaW5lIENPTkZJR19DTURfQkRJCi0jZGVmaW5lIENPTkZJR19DTURfQ0FDSEUKLSNkZWZpbmUgQ09ORklHX0NNRF9ESENQCi0jZGVmaW5lIENPTkZJR19DTURfRUNITwotI2RlZmluZSBDT05GSUdfQ01EX1NBVkVFTlYKLSNkZWZpbmUgQ09ORklHX0NNRF9GTEFTSAotI2RlZmluZSBDT05GSUdfQ01EX0kyQwotI2RlZmluZSBDT05GSUdfQ01EX0lNSQotI2RlZmluZSBDT05GSUdfQ01EX0xPQURCCi0jZGVmaW5lIENPTkZJR19DTURfTUVNT1JZCi0jZGVmaW5lIENPTkZJR19DTURfTkVUCi0jZGVmaW5lIENPTkZJR19DTURfUlVOCi0KLQotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKLS8qICNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCSJyb290PS9kZXYvbmZzIGlwPWJvb3RwIGNvbnNvbGU9dHR5UzAsMTkyMDAiICovCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUwkJImNvbnNvbGU9dHR5UzAsMTkyMDAiCi0jZGVmaW5lIENPTkZJR19FVEhBRERSCQlGRjpGRjpGRjpGRjpGRjpGRgotI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAotI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjEuNTYKLSNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjEuMgotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDB4NDAwMDAiCi0jZGVmaW5lIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKLQotI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJMQotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0KLS8qCi0gKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSgyNTYqMTAyNCkKLQotI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCSJ1Ym9vdD4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUgKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJQ09ORklHX1NZU19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgICAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweGEwNDAwMDAwICAgICAgLyogbWVtdGVzdCB3b3JrcyBvbiAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORCAgICAgICAgIDB4YTA4MDAwMDAgICAgICAvKiA0IC4uLiA4IE1CIGluIERSQU0gICAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSICAgICAgICAgICAweGEzMDAwMDAwICAgICAgLyogbG9hZCBrZXJuZWwgdG8gdGhpcyBhZGRyZXNzICAgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMAotCQkJCQkJLyogUlM6IHRoZSBvc2NpbGxhdG9yIGlzIGFjdHVhbGx5IDM2ODAxMzA/PyAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfQ1BVU1BFRUQgICAgICAgICAgICAweDE0MSAgICAgICAgICAgLyogc2V0IGNvcmUgY2xvY2sgdG8gMjAwLzIwMC8xMDAgTUh6ICovCi0JCQkJCQkvKiAwMTAxMDAwMDAxICovCi0JCQkJCQkvKiAgICAgIF5eXl5eIE1lbW9yeSBTcGVlZCA5OS41MyBNSHogICAgICAgICAqLwotCQkJCQkJLyogICAgXl4gICAgICBSdW4gTW9kZSBTcGVlZCA9IDJ4IE1lbSBTcGVlZCAgKi8KLQkJCQkJCS8qIF5eICAgICAgICAgVHVyYm8gTW9kZSBTcC4gPSAxeCBSdW4gTS4gU3AuICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJMHgyMDAwMAkJLyogMTI4IEtpQiAqLwotCi0JCQkJCQkvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRSAgICAgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KLQotLyoKLSAqIEkyQyBidXMKLSAqLwotI2RlZmluZSBDT05GSUdfSTJDX01WCQkJMQotI2RlZmluZSBDT05GSUdfTVZfSTJDX1JFRwkJMHg0MDMwMTY4MAotI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCQkxCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECQkJNTAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfU0xBVkUJCQkweGZlCi0KLSNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9FRVBST00JCTEKLQotI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJCTB4MDAJLyogZW52aXJvbm1lbnQgc3RhcnRzIGhlcmUgICovCi0jZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCTEwMjQJLyogMSBLaUIgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSCQkweDUwCS8qIEEwID0gMCAoaGFyZHdpcmVkKSAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMJNQkvKiA1IGJpdHMgPSAzMiBvY3RldHMgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUwkxNQkvKiBiZXR3ZWVuIHN0b3AgYW5kIHN0YXJ0ICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFJfTEVOCQkyCS8qIGxlbmd0aCBvZiBhZGRyZXNzICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0VFUFJPTV9TSVpFCQkJNDA5NgkvKiBzaXplIGluIGJ5dGVzICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfSU5JVF9CT0FSRAkJMQkvKiBib2FyZCBoYXMgaXQncyBvd24gaW5pdCAgKi8KLQotLyoKLSAqIFNNU0M5MUMxMTEgTmV0d29yayBDYXJkCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NNQzkxMTExCQkxCi0jZGVmaW5lIENPTkZJR19TTUM5MTExMV9CQVNFCQkweDE0MDAwMDAwIC8qIGNoaXAgc2VsZWN0IDUgICAgICAgICAqLwotI3VuZGVmICBDT05GSUdfU01DX1VTRV8zMl9CSVQJCSAgICAgICAgICAgLyogMTYgYml0IGJ1cyBhY2Nlc3MgICAgICovCi0jdW5kZWYgIENPTkZJR19TTUNfOTExMTFfRVhUX1BIWQkJICAgLyogd2UgdXNlIGludGVybmFsIHBoeSAgICovCi0jZGVmaW5lIENPTkZJR19TTUNfQVVUT05FR19USU1FT1VUCTEwCSAgIC8qIHRpbWVvdXQgMTAgc2Vjb25kcyAgICAqLwotI3VuZGVmICBDT05GSUdfU0hPV19BQ1RJVklUWQotI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQkxMAkgICAvKiAjIG9mIHJldHJpZXMgICAgICAgICAgKi8KLQotLyoKLSAqIFN0YWNrIHNpemVzCi0gKgotICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKLSAqLwotI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFICAgICAgICAoMTI4KjEwMjQpICAgICAgLyogcmVndWxhciBzdGFjayAqLwotI2lmZGVmICBDT05GSUdfVVNFX0lSUQotI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0lSUSAgICAoNCoxMDI0KSAgICAgICAgLyogSVJRIHN0YWNrICovCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRICAgICg0KjEwMjQpICAgICAgICAvKiBGSVEgc3RhY2sgKi8KLSNlbmRpZgotCi0vKgotICogUGh5c2ljYWwgTWVtb3J5IE1hcAotICovCi0jZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJCS8qIHdlIGhhdmUgMSBiYW5rIG9mIERSQU0gICAqLwotI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4YTAwMDAwMDAJLyogU0RSQU0gQmFuayAjMSAgICAgICAgICAgICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDQwMDAwMDAJLyogNjQgTUIgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUgUEhZU19GTEFTSF8xCQkweDAwMDAwMDAwCS8qIEZsYXNoIEJhbmsgIzEgICAgICAgICAgICAqLwotI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCTB4MDEwMDAwMDAJLyogMTYgTUIgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19EUkFNX0JBU0UJCTB4YTAwMDAwMDAJLyogUkFNIHN0YXJ0cyBoZXJlICAgICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfRFJBTV9TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFICAgICAgICAgIFBIWVNfRkxBU0hfMQotCi0jZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJUEhZU19TRFJBTV8xCi0jZGVmaW5lCUNPTkZJR19TWVNfSU5JVF9TUF9BRERSCQkoR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUgKyBQSFlTX1NEUkFNXzEpCi0KLS8qCi0gKiBKRkZTMiBwYXJ0aXRpb25zCi0gKgotICovCi0vKiBkZXZlbG9wbWVudCBmbGFzaCAqLwotI2RlZmluZSBDT05GSUdfTVREX0lOTk9LT01fMTZNQgkxCi0jdW5kZWYgQ09ORklHX01URF9JTk5PS09NXzY0TUIKLQotLyogcHJvZHVjdGlvbiBmbGFzaCAqLwotLyoKLSNkZWZpbmUgQ09ORklHX01URF9JTk5PS09NXzY0TUIJMQotI3VuZGVmIENPTkZJR19NVERfSU5OT0tPTV8xNk1CCi0qLwotCi0vKiBObyBjb21tYW5kIGxpbmUsIG9uZSBzdGF0aWMgcGFydGl0aW9uLCB3aG9sZSBkZXZpY2UgKi8KLSN1bmRlZiBDT05GSUdfQ01EX01URFBBUlRTCi0jZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSJub3IwIgotI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCQkweEZGRkZGRkZGCi0jZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkweDAwMDAwMDAwCi0KLS8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCi0vKiBOb3RlOiBmYWtlIG10ZF9pZCB1c2VkLCBubyBsaW51eCBtdGQgbWFwIGZpbGUgKi8KLS8qCi0jZGVmaW5lIENPTkZJR19DTURfTVREUEFSVFMKLSNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWlubm9rb20tMCIKLSovCi0KLS8qIGRldmVsb3BtZW50IGZsYXNoICovCi0vKgotI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1pbm5va29tLTA6MjU2ayh1Ym9vdCksNzY4ayhrZXJuZWwpLDhtKHVzZXIpLDdtKGRhdGEpIgotKi8KLQotLyogcHJvZHVjdGlvbiBmbGFzaCAqLwotLyoKLSNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9aW5ub2tvbS0wOjI1NmsodWJvb3QpLDc2OGsoa2VybmVsKSwxNjI1NmsodXNlcjEpLDE2MjU2ayh1c2VyMiksMzJtKGRhdGEpIgotKi8KLQotLyoKLSAqIEdQSU8gc2V0dGluZ3MKLSAqCi0gKiBHUDE1ID09IG5DUzEgICAgICBpcyAxCi0gKiBHUDI0ID09IFNGUk0gICAgICBpcyAxCi0gKiBHUDI1ID09IFRYRCAgICAgICBpcyAxCi0gKiBHUDMzID09IG5DUzUgICAgICBpcyAxCi0gKiBHUDM5ID09IEZGVFhEICAgICBpcyAxCi0gKiBHUDQxID09IFJUUyAgICAgICBpcyAxCi0gKiBHUDQ3ID09IFRYRCAgICAgICBpcyAxCi0gKiBHUDQ5ID09IG5QV0UgICAgICBpcyAxCi0gKiBHUDYyID09IExFRF9CICAgICBpcyAxCi0gKiBHUDYzID09IFRETV9PRSAgICBpcyAxCi0gKiBHUDc4ID09IG5DUzIgICAgICBpcyAxCi0gKiBHUDc5ID09IG5DUzMgICAgICBpcyAxCi0gKiBHUDgwID09IG5DUzQgICAgICBpcyAxCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMF9WQUwgICAgICAgMHgwMzAwODAwMAotI2RlZmluZSBDT05GSUdfU1lTX0dQU1IxX1ZBTCAgICAgICAweEMwMDI4MjgyCi0jZGVmaW5lIENPTkZJR19TWVNfR1BTUjJfVkFMICAgICAgIDB4MDAwMUMwMDAKLQotLyogR1AwMiA9PSBET05fUlNUICAgaXMgMAotICogR1AyMyA9PSBTQ0xLICAgICAgaXMgMAotICogR1A0NSA9PSBVU0JfQUNUICAgaXMgMAotICogR1A2MCA9PSBQTExFTiAgICAgaXMgMAotICogR1A2MSA9PSBMRURfQSAgICAgaXMgMAotICogR1A3MyA9PSBTV1VQRF9MRUQgaXMgMAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfR1BDUjBfVkFMICAgICAgIDB4MDA4MDAwMDQKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMV9WQUwgICAgICAgMHgzMDAwMjAwMAotI2RlZmluZSBDT05GSUdfU1lTX0dQQ1IyX1ZBTCAgICAgICAweDAwMDAwMTAwCi0KLS8qIEdQMDAgPT0gRE9OX1JFQURZIGlzIGlucHV0Ci0gKiBHUDAxID09IERPTl9PSyAgICBpcyBpbnB1dAotICogR1AwMiA9PSBET05fUlNUICAgaXMgb3V0cHV0Ci0gKiBHUDAzID09IFJFU0VUX0lORCBpcyBpbnB1dAotICogR1AwNyA9PSBSRVMxMSAgICAgaXMgaW5wdXQKLSAqIEdQMDkgPT0gUkVTMTIgICAgIGlzIGlucHV0Ci0gKiBHUDExID09IFNXVVBEQVRFICBpcyBpbnB1dAotICogR1AxNCA9PSBuUE9XRVJPSyAgaXMgaW5wdXQKLSAqIEdQMTUgPT0gbkNTMSAgICAgIGlzIG91dHB1dAotICogR1AxNyA9PSBSRVMyMiAgICAgaXMgaW5wdXQKLSAqIEdQMTggPT0gUkRZICAgICAgIGlzIGlucHV0Ci0gKiBHUDIzID09IFNDTEsgICAgICBpcyBvdXRwdXQKLSAqIEdQMjQgPT0gU0ZSTSAgICAgIGlzIG91dHB1dAotICogR1AyNSA9PSBUWEQgICAgICAgaXMgb3V0cHV0Ci0gKiBHUDI2ID09IFJYRCAgICAgICBpcyBpbnB1dAotICogR1AzMiA9PSBSRVMyMSAgICAgaXMgaW5wdXQKLSAqIEdQMzMgPT0gbkNTNSAgICAgIGlzIG91dHB1dAotICogR1AzNCA9PSBGRlJYRCAgICAgaXMgaW5wdXQKLSAqIEdQMzUgPT0gQ1RTICAgICAgIGlzIGlucHV0Ci0gKiBHUDM5ID09IEZGVFhEICAgICBpcyBvdXRwdXQKLSAqIEdQNDEgPT0gUlRTICAgICAgIGlzIG91dHB1dAotICogR1A0MiA9PSBVU0JfT0sgICAgaXMgaW5wdXQKLSAqIEdQNDUgPT0gVVNCX0FDVCAgIGlzIG91dHB1dAotICogR1A0NiA9PSBSWEQgICAgICAgaXMgaW5wdXQKLSAqIEdQNDcgPT0gVFhEICAgICAgIGlzIG91dHB1dAotICogR1A0OSA9PSBuUFdFICAgICAgaXMgb3V0cHV0Ci0gKiBHUDU4ID09IG5DUFVCVVNJTlQgaXMgaW5wdXQKLSAqIEdQNTkgPT0gTEFOSU5UICAgIGlzIGlucHV0Ci0gKiBHUDYwID09IFBMTEVOICAgICBpcyBvdXRwdXQKLSAqIEdQNjEgPT0gTEVEX0EgICAgIGlzIG91dHB1dAotICogR1A2MiA9PSBMRURfQiAgICAgaXMgb3V0cHV0Ci0gKiBHUDYzID09IFRETV9PRSAgICBpcyBvdXRwdXQKLSAqIEdQNjQgPT0gbkRTUElOVCAgIGlzIGlucHV0Ci0gKiBHUDY1ID09IFNUUkFQMCAgICBpcyBpbnB1dAotICogR1A2NyA9PSBTVFJBUDEgICAgaXMgaW5wdXQKLSAqIEdQNjkgPT0gU1RSQVAyICAgIGlzIGlucHV0Ci0gKiBHUDcwID09IFNUUkFQMyAgICBpcyBpbnB1dAotICogR1A3MSA9PSBTVFJBUDQgICAgaXMgaW5wdXQKLSAqIEdQNzMgPT0gU1dVUERfTEVEIGlzIG91dHB1dAotICogR1A3OCA9PSBuQ1MyICAgICAgaXMgb3V0cHV0Ci0gKiBHUDc5ID09IG5DUzMgICAgICBpcyBvdXRwdXQKLSAqIEdQODAgPT0gbkNTNCAgICAgIGlzIG91dHB1dAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfR1BEUjBfVkFMICAgICAgIDB4MDM4MDgwMDQKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMV9WQUwgICAgICAgMHhGMDAyQTI4MgotI2RlZmluZSBDT05GSUdfU1lTX0dQRFIyX1ZBTCAgICAgICAweDAwMDFDMjAwCi0KLS8qIEdQMTUgPT0gbkNTMSAgaXMgQUYxMAotICogR1AxOCA9PSBSRFkgICBpcyBBRjAxCi0gKiBHUDIzID09IFNDTEsgIGlzIEFGMTAKLSAqIEdQMjQgPT0gU0ZSTSAgaXMgQUYxMAotICogR1AyNSA9PSBUWEQgICBpcyBBRjEwCi0gKiBHUDI2ID09IFJYRCAgIGlzIEFGMDEKLSAqIEdQMzMgPT0gbkNTNSAgaXMgQUYxMAotICogR1AzNCA9PSBGRlJYRCBpcyBBRjAxCi0gKiBHUDM1ID09IENUUyAgIGlzIEFGMDEKLSAqIEdQMzkgPT0gRkZUWEQgaXMgQUYxMAotICogR1A0MSA9PSBSVFMgICBpcyBBRjEwCi0gKiBHUDQ2ID09IFJYRCAgIGlzIEFGMTAKLSAqIEdQNDcgPT0gVFhEICAgaXMgQUYwMQotICogR1A0OSA9PSBuUFdFICBpcyBBRjEwCi0gKiBHUDc4ID09IG5DUzIgIGlzIEFGMTAKLSAqIEdQNzkgPT0gbkNTMyAgaXMgQUYxMAotICogR1A4MCA9PSBuQ1M0ICBpcyBBRjEwCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMF9MX1ZBTCAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIwX1VfVkFMICAgICAweDAwMUE4MDEwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjFfTF9WQUwgICAgIDB4NjAwODgwNTgKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMV9VX1ZBTCAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIyX0xfVkFMICAgICAweEEwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjJfVV9WQUwgICAgIDB4MDAwMDAwMDIKLQotCi0vKiBGSVhNRTogc2V0IEdQSU9fUkVSL0ZFUiAqLwotCi0vKiBSREggPSAxCi0gKiBQSCAgPSAxCi0gKiBWRlMgPSAxCi0gKiBCRlMgPSAxCi0gKiBTU1MgPSAxCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QU1NSX1ZBTAkJMHgzNwotCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0NDUgkJCUNDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTAKLSNkZWZpbmUJQ09ORklHX1NZU19DS0VOCQkJMHgwCi0KLS8qCi0gKiBNZW1vcnkgc2V0dGluZ3MKLSAqCi0gKiBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBuQ1MwLzEgLT4gZmxhc2ggYmFua3MKLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzE6Ci0gKiBbMzFdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMzA6MjhdIDAxMCAgLSBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAyKigyKk1lbUNsaykgPSA0MCBucwotICogWzI3OjI0XSAwMTAxIC0gQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDUrMSkqTWVtQ2xrID0gNjAgbnMKLSAqIFsyMzoyMF0gMTAxMSAtICIgZm9yIGZpcnN0IGFjY2VzczogKDExKzIpKk1lbUNsayA9IDEzMCBucwotICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzE4OjE2XSAwMDAgIC0gbm9uYnVyc3QgUkFNIG9yIEZMQVNICi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1MwOgotICogWzE1XSAgICAwICAgIC0gU2xvd2VyIERldmljZQotICogWzE0OjEyXSAwMTAgIC0gQ1MgZGVzZWxlY3QgdG8gQ1MgdGltZTogMiooMipNZW1DbGspID0gNDAgbnMKLSAqIFsxMTowOF0gMDEwMSAtIEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICg1KzEpKk1lbUNsayA9IDYwIG5zCi0gKiBbMDc6MDRdIDEwMTEgLSAiIGZvciBmaXJzdCBhY2Nlc3M6ICgxMSsyKSpNZW1DbGsgPSAxMzAgbnMKLSAqIFswM10gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKLSAqIFswMjowMF0gMDAwICAtIG5vbmJ1cnN0IFJBTSBvciBGTEFTSAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMF9WQUwJCTB4MjViODI1YjggLyogZmxhc2ggYmFua3MgICAgICAgICAgICAgICAgICAgKi8KLQotLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgbkNTMi8zIC0+IFRETS1Td2l0Y2gsIERTUAotICogY29uZmlndXJhdGlvbiBmb3IgbkNTMzogRFNQCi0gKiBbMzFdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMzA6MjhdIDAwMSAgLSBSUlIzOiBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAxKigyKk1lbUNsaykgPSAyMCBucwotICogWzI3OjI0XSAwMDEwIC0gUkROMzogQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDIrMSkqTWVtQ2xrID0gMzAgbnMKLSAqIFsyMzoyMF0gMDAxMSAtIFJERjM6IEFkZHJlc3MgZm9yIGZpcnN0IGFjY2VzczogKDMrMSkqTWVtQ2xrID0gNDAgbnMKLSAqIFsxOV0gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKLSAqIFsxODoxNl0gMTAwICAtIHZhcmlhYmxlIGxhdGVuY3kgSS9PCi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1MyOiBURE0tU3dpdGNoCi0gKiBbMTVdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMTQ6MTJdIDEwMSAgLSBSUlIyOiBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiA1KigyKk1lbUNsaykgPSAxMDAgbnMKLSAqIFsxMTowOF0gMTAwMSAtIFJETjI6IEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICg5KzEpKk1lbUNsayA9IDEwMCBucwotICogWzA3OjA0XSAwMDExIC0gUkRGMjogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAoMysxKSpNZW1DbGsgPSA0MCBucwotICogWzAzXSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzAyOjAwXSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01TQzFfVkFMCQkweDEyM0M1OTNDIC8qIFRETSBzd2l0Y2gsIERTUCAgICAgICAgICAgICAgICovCi0KLS8qIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzQvNSAtPiBFeHRCdXMsIExBTiBDb250cm9sbGVyCi0gKgotICogY29uZmlndXJhdGlvbiBmb3IgbkNTNTogTEFOIENvbnRyb2xsZXIKLSAqIFszMV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFszMDoyOF0gMDAxICAtIFJSUjU6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDEqKDIqTWVtQ2xrKSA9IDIwIG5zCi0gKiBbMjc6MjRdIDAwMTAgLSBSRE41OiBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoMisxKSpNZW1DbGsgPSAzMCBucwotICogWzIzOjIwXSAwMDExIC0gUkRGNTogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAoMysxKSpNZW1DbGsgPSA0MCBucwotICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzE4OjE2XSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzQ6IEV4dEJ1cwotICogWzE1XSAgICAwICAgIC0gU2xvd2VyIERldmljZQotICogWzE0OjEyXSAxMTAgIC0gUlJSNDogQ1MgZGVzZWxlY3QgdG8gQ1MgdGltZTogNiooMipNZW1DbGspID0gMTIwIG5zCi0gKiBbMTE6MDhdIDExMDAgLSBSRE40OiBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoMTIrMSkqTWVtQ2xrID0gMTMwIG5zCi0gKiBbMDc6MDRdIDExMDEgLSBSREY0OiBBZGRyZXNzIGZvciBmaXJzdCBhY2Nlc3M6IDEzLT4oMTUrMSkqTWVtQ2xrID0gMTYwIG5zCi0gKiBbMDNdICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMDI6MDBdIDEwMCAgLSB2YXJpYWJsZSBsYXRlbmN5IEkvTwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMl9WQUwJCTB4MTIzQzZDREMgLyogZXh0cmEgYnVzLCBMQU4gY29udHJvbGxlciAgICAgKi8KLQotLyogTURDTkZHOiBTRFJBTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0gKgotICogWzMxOjI5XSAgIDAwMCAtIHJlc2VydmVkCi0gKiBbMjhdICAgICAgMAkgLSBubyBTQTExMTEgY29tcGF0aWJsaXR5IG1vZGUKLSAqIFsyN10gICAgICAwICAgLSBsYXRjaCByZXR1cm4gZGF0YSB3aXRoIHJldHVybiBjbG9jawotICogWzI2XSAgICAgIDAgICAtIGFsdGVybmF0ZSBhZGRyZXNzaW5nIGZvciBwYWlyIDIvMwotICogWzI1OjI0XSAgIDAwICAtIHRpbWluZ3MKLSAqIFsyM10gICAgICAwICAgLSBpbnRlcm5hbCBiYW5rcyBpbiBsb3dlciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKLSAqIFsyMjoyMV0gICAwMCAgLSByb3cgYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKLSAqIFsyMDoxOV0gICAwMCAgLSBjb2x1bW4gYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKLSAqIFsxOF0gICAgICAwICAgLSBTRFJBTSBwYXJ0aXRpb24gMi8zIHdpZHRoIGlzIDMyIGJpdAotICogWzE3XSAgICAgIDAgICAtIFNEUkFNIHBhcnRpdGlvbiAzIGRpc2FibGVkCi0gKiBbMTZdICAgICAgMCAgIC0gU0RSQU0gcGFydGl0aW9uIDIgZGlzYWJsZWQKLSAqIFsxNToxM10gICAwMDAgLSByZXNlcnZlZAotICogWzEyXSAgICAgIDEJIC0gU0ExMTExIGNvbXBhdGlibGl0eSBtb2RlCi0gKiBbMTFdICAgICAgMSAgIC0gbGF0Y2ggcmV0dXJuIGRhdGEgd2l0aCByZXR1cm4gY2xvY2sKLSAqIFsxMF0gICAgICAwICAgLSBubyBhbHRlcm5hdGUgYWRkcmVzc2luZyBmb3IgcGFpciAwLzEKLSAqIFswOTowOF0gICAwMSAgLSB0UlA9MipNZW1DbGsgQ0w9MiB0UkNEPTIqTWVtQ2xrIHRSQVM9NSpNZW1DbGsgdFJDPTgqTWVtQ2xrCi0gKiBbN10gICAgICAgMSAgIC0gNCBpbnRlcm5hbCBiYW5rcyBpbiBsb3dlciBwYXJ0aXRpb24gcGFpcgotICogWzA2OjA1XSAgIDEwICAtIDEzIHJvdyBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAwLzEKLSAqIFswNDowM10gICAwMSAgLSA5IGNvbHVtbiBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAwLzEKLSAqIFswMl0gICAgICAwICAgLSBTRFJBTSBwYXJ0aXRpb24gMC8xIHdpZHRoIGlzIDMyIGJpdAotICogWzAxXSAgICAgIDAgICAtIGRpc2FibGUgU0RSQU0gcGFydGl0aW9uIDEKLSAqIFswMF0gICAgICAxICAgLSBlbmFibGUgIFNEUkFNIHBhcnRpdGlvbiAwCi0gKi8KLS8qIHVzZSB0aGUgY29uZmlndXJhdGlvbiBhYm92ZSBidXQgZGlzYWJsZSBwYXJ0aXRpb24gMCAqLwotI2RlZmluZSBDT05GSUdfU1lTX01EQ05GR19WQUwJCTB4MDAwMDE5YzgKLQotLyogTURSRUZSOiBTRFJBTSBSZWZyZXNoIENvbnRyb2wgUmVnaXN0ZXIKLSAqCi0gKiBbMzI6MjZdIDAgICAgIC0gcmVzZXJ2ZWQKLSAqIFsyNV0gICAgMCAgICAgLSBLMkZSRUU6IG5vdCBmcmVlIHJ1bm5pbmcKLSAqIFsyNF0gICAgMCAgICAgLSBLMUZSRUU6IG5vdCBmcmVlIHJ1bm5pbmcKLSAqIFsyM10gICAgMSAgICAgLSBLMEZSRUU6IG5vdCBmcmVlIHJ1bm5pbmcKLSAqIFsyMl0gICAgMCAgICAgLSBTTEZSU0g6IHNlbGYgcmVmcmVzaCBkaXNhYmxlZAotICogWzIxXSAgICAwICAgICAtIHJlc2VydmVkCi0gKiBbMjBdICAgIDAgICAgIC0gQVBEOiBubyBhdXRvIHBvd2VyIGRvd24KLSAqIFsxOV0gICAgMCAgICAgLSBLMkRCMjogU0RDTEsyIGlzIE1lbUNsawotICogWzE4XSAgICAwICAgICAtIEsyUlVOOiBkaXNhYmxlIFNEQ0xLMgotICogWzE3XSAgICAwICAgICAtIEsxREIyOiBTRENMSzEgaXMgTWVtQ2xrCi0gKiBbMTZdICAgIDEgICAgIC0gSzFSVU46IGVuYWJsZSBTRENMSzEKLSAqIFsxNV0gICAgMSAgICAgLSBFMVBJTjogU0RSQU0gY2xvY2sgZW5hYmxlCi0gKiBbMTRdICAgIDEgICAgIC0gSzBEQjI6IFNEQ0xLMCBpcyBNZW1DbGsKLSAqIFsxM10gICAgMCAgICAgLSBLMFJVTjogZGlzYWJsZSBTRENMSzAKLSAqIFsxMl0gICAgMSAgICAgLSBFMFBJTjogZGlzYWJsZSBTRENLRTAKLSAqIFsxMTowMF0gMDAwMDAwMDExMDAwIC0gKDY0bXMvODE5MikqTWVtQ2xrRnJlcS8zMiA9IDI0Ci0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRFJFRlJfVkFMCQkweDAwODFEMDE4Ci0KLS8qIE1ETVJTOiBNb2RlIFJlZ2lzdGVyIFNldCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0gKgotICogWzMxXSAgICAgIDAgICAgICAgLSByZXNlcnZlZAotICogWzMwOjIzXSAgIDAwMDAwMDAwLSBNRE1SUzI6IFNEUkFNMi8zIE1SUyBWYWx1ZS4gKG5vdCB1c2VkKQotICogWzIyOjIwXSAgIDAwMCAgICAgLSBNRENMMjogIFNEUkFNMi8zIENhcyBMYXRlbmN5LiAgKG5vdCB1c2VkKQotICogWzE5XSAgICAgIDAgICAgICAgLSBNREFERDI6IFNEUkFNMi8zIGJ1cnN0IFR5cGUuIEZpeGVkIHRvIHNlcXVlbnRpYWwuICAobm90IHVzZWQpCi0gKiBbMTg6MTZdICAgMDEwICAgICAtIE1EQkwyOiAgU0RSQU0yLzMgYnVyc3QgTGVuZ3RoLiBGaXhlZCB0byA0LiAgKG5vdCB1c2VkKQotICogWzE1XSAgICAgIDAgICAgICAgLSByZXNlcnZlZAotICogWzE0OjA3XSAgIDAwMDAwMDAwLSBNRE1SUzA6IFNEUkFNMC8xIE1SUyBWYWx1ZS4KLSAqIFswNjowNF0gICAwMTAgICAgIC0gTURDTDA6ICBTRFJBTTAvMSBDYXMgTGF0ZW5jeS4KLSAqIFswM10gICAgICAwICAgICAgIC0gTURBREQwOiBTRFJBTTAvMSBidXJzdCBUeXBlLiBGaXhlZCB0byBzZXF1ZW50aWFsLgotICogWzAyOjAwXSAgIDAxMCAgICAgLSBNREJMMDogIFNEUkFNMC8xIGJ1cnN0IExlbmd0aC4gRml4ZWQgdG8gNC4KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01ETVJTX1ZBTAkJMHgwMDAyMDAyMgotCi0vKgotICogUENNQ0lBIGFuZCBDRiBJbnRlcmZhY2VzCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRUNSX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DTUVNMF9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ01FTTFfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNBVFQwX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DQVRUMV9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0lPMF9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0lPMV9WQUwJCTB4MDAwMDAwMDAKLQotI2RlZmluZQlDT05GSUdfU1lTX0ZMWUNORkdfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lCUNPTkZJR19TWVNfU1hDTkZHX1ZBTAkJMHgwMDAwMDAwMAotCi0vKgotI2RlZmluZSBDU0IyMjZfVVNFUl9MRUQwCTB4MDAwMDAwMDgKLSNkZWZpbmUgQ1NCMjI2X1VTRVJfTEVEMQkweDAwMDAwMDEwCi0jZGVmaW5lIENTQjIyNl9VU0VSX0xFRDIJMHgwMDAwMDAyMAotKi8KLQotLyoKLSAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUyAgICAgMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTEyOAkvKiBtYXggbnVtYmVyIG9mIHNlY3QuIG9uIG9uZSBjaGlwICAqLwotCi0vKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUICAgICgyKkNPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCAgICAoMipDT05GSUdfU1lTX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAgICAgICAqLwotCi0jZW5kaWYgIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9pbnRlZ3JhdG9yYXAuaCBiL2luY2x1ZGUvY29uZmlncy9pbnRlZ3JhdG9yYXAuaAppbmRleCA2MWI4NzYxLi5hMWZkYmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvaW50ZWdyYXRvcmFwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2ludGVncmF0b3JhcC5oCkBAIC0zNyw2ICszNyw3IEBACiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICogKGVhc3kgdG8gY2hhbmdlKQogICovCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCQkweDAxMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDEwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDEwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfSFoJCQkxMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvaW50ZWdyYXRvcmNwLmggYi9pbmNsdWRlL2NvbmZpZ3MvaW50ZWdyYXRvcmNwLmgKaW5kZXggN2FlMzRiNy4uY2NiZGY0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2ludGVncmF0b3JjcC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9pbnRlZ3JhdG9yY3AuaApAQCAtMzcsNiArMzcsNyBAQAogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqIChlYXN5IHRvIGNoYW5nZSkKICAqLworI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHgwMTAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgxMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgxMDAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL20yOGV2ay5oIGIvaW5jbHVkZS9jb25maWdzL20yOGV2ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YmQyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbTI4ZXZrLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfX00yOF9IX18KKyNkZWZpbmUgX19NMjhfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWJhc2UuaD4KKworLyoKKyAqIFNvQyBjb25maWd1cmF0aW9ucworICovCisjZGVmaW5lCUNPTkZJR19NWDI4CQkJCS8qIGkuTVgyOCBTb0MgKi8KKyNkZWZpbmUJQ09ORklHX01YU19HUElPCQkJCS8qIEdQSU8gY29udHJvbCAqLworI2RlZmluZQlDT05GSUdfU1lTX0haCQkxMDAwCQkvKiBUaWNrcyBwZXIgc2Vjb25kICovCisKKy8qCisgKiBEZWZpbmUgTTI4RVZLIG1hY2hpbmUgdHlwZSBieSBoYW5kIHVudGlsIGl0IGxhbmRzIGluIG1hY2gtdHlwZXMKKyAqLworI2RlZmluZQlNQUNIX1RZUEVfTTI4RVZLCTM2MTMKKworI2RlZmluZQlDT05GSUdfTUFDSF9UWVBFCU1BQ0hfVFlQRV9NMjhFVksKKworI2RlZmluZQlDT05GSUdfU1lTX05PX0ZMQVNICisjZGVmaW5lCUNPTkZJR19TWVNfSUNBQ0hFX09GRgorI2RlZmluZQlDT05GSUdfU1lTX0RDQUNIRV9PRkYKKyNkZWZpbmUJQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgorI2RlZmluZQlDT05GSUdfQVJDSF9DUFVfSU5JVAorI2RlZmluZQlDT05GSUdfQVJDSF9NSVNDX0lOSVQKKworLyoKKyAqIFNQTAorICovCisjZGVmaW5lCUNPTkZJR19TUEwKKyNkZWZpbmUJQ09ORklHX1NQTF9OT19DUFVfU1VQUE9SVF9DT0RFCisjZGVmaW5lCUNPTkZJR19TUExfU1RBUlRfU19QQVRICQkiYm9hcmQvZGVueC9tMjhldmsiCisjZGVmaW5lCUNPTkZJR19TUExfTERTQ1JJUFQJCSJib2FyZC9kZW54L20yOGV2ay91LWJvb3Qtc3BsLmxkcyIKKworLyoKKyAqIFUtQm9vdCBDb21tYW5kcworICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisjZGVmaW5lCUNPTkZJR19ESVNQTEFZX0NQVUlORk8KKyNkZWZpbmUJQ09ORklHX0RPU19QQVJUSVRJT04KKworI2RlZmluZQlDT05GSUdfQ01EX0NBQ0hFCisjZGVmaW5lCUNPTkZJR19DTURfREFURQorI2RlZmluZQlDT05GSUdfQ01EX0RIQ1AKKyNkZWZpbmUJQ09ORklHX0NNRF9FRVBST00KKyNkZWZpbmUJQ09ORklHX0NNRF9FWFQyCisjZGVmaW5lCUNPTkZJR19DTURfRkFUCisjZGVmaW5lCUNPTkZJR19DTURfR1BJTworI2RlZmluZQlDT05GSUdfQ01EX0kyQworI2RlZmluZQlDT05GSUdfQ01EX01JSQorI2RlZmluZQlDT05GSUdfQ01EX01NQworI2RlZmluZQlDT05GSUdfQ01EX05BTkQKKyNkZWZpbmUJQ09ORklHX0NNRF9ORVQKKyNkZWZpbmUJQ09ORklHX0NNRF9ORlMKKyNkZWZpbmUJQ09ORklHX0NNRF9QSU5HCisjZGVmaW5lCUNPTkZJR19DTURfU0VURVhQUgorI2RlZmluZQlDT05GSUdfQ01EX1NGCisjZGVmaW5lCUNPTkZJR19DTURfU1BJCisjZGVmaW5lCUNPTkZJR19DTURfVVNCCisKKy8qCisgKiBNZW1vcnkgY29uZmlndXJhdGlvbnMKKyAqLworI2RlZmluZQlDT05GSUdfTlJfRFJBTV9CQU5LUwkJMQkJLyogMSBiYW5rIG9mIERSQU0gKi8KKyNkZWZpbmUJUEhZU19TRFJBTV8xCQkJMHg0MDAwMDAwMAkvKiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUJUEhZU19TRFJBTV8xX1NJWkUJCTB4NDAwMDAwMDAJLyogTWF4IDEgR0IgUkFNICovCisjZGVmaW5lCUNPTkZJR19TVEFDS1NJWkUJCTB4MDAwMTAwMDAJLyogMTI4IEtCIHN0YWNrICovCisjZGVmaW5lCUNPTkZJR19TWVNfTUFMTE9DX0xFTgkJMHgwMDQwMDAwMAkvKiA0IE1CIGZvciBtYWxsb2MgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19HQkxfREFUQV9TSVpFCTEyOAkJLyogSW5pdGlhbCBkYXRhICovCisjZGVmaW5lCUNPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDQwMDAwMDAwCS8qIE1lbXRlc3Qgc3RhcnQgYWRyICovCisjZGVmaW5lCUNPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4NDA0MDAwMDAJLyogNCBNQiBSQU0gdGVzdCAqLworI2RlZmluZQlDT05GSUdfU1lTX1NEUkFNX0JBU0UJCVBIWVNfU0RSQU1fMQorLyogUG9pbnQgaW5pdGlhbCBTUCBpbiBTUkFNIHNvIFNQTCBjYW4gdXNlIGl0IHRvby4gKi8KKyNkZWZpbmUJQ09ORklHX1NZU19JTklUX1NQX0FERFIJCTB4MDAwMDIwMDAKKy8qCisgKiBXZSBuZWVkIHRvIHNhY3JpZmljZSBmaXJzdCA0IGJ5dGVzIG9mIFJBTSBoZXJlIHRvIGF2b2lkIHRyaWdnZXJpbmcgc29tZQorICogc3RyYW5nZSBCVUcgaW4gUk9NIGNvcnJ1cHRpbmcgZmlyc3QgNCBieXRlcyBvZiBSQU0gd2hlbiBsb2FkaW5nIFUtQm9vdAorICogYmluYXJ5LiBJbiBjYXNlIHRoZXJlIHdhcyBtb3JlIG9mIHRoaXMgbWVzcywgMHgxMDAgYnl0ZXMgYXJlIHNraXBwZWQuCisgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJCTB4NDAwMDAxMDAKKworLyoKKyAqIFUtQm9vdCBnZW5lcmFsIGNvbmZpZ3VyYXRpb25zCisgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19MT05HSEVMUAorI2RlZmluZQlDT05GSUdfU1lTX1BST01QVAkiPT4gIgorI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBidWZmZXIgc2l6ZSAqLworI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRQlcCisJKENPTkZJR19TWVNfQ0JTSVpFICsgc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSArIDE2KQorCQkJCQkJLyogUHJpbnQgYnVmZmVyIHNpemUgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCTMyCQkvKiBNYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZQlDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFCisJCQkJCQkvKiBCb290IGFyZ3VtZW50IGJ1ZmZlciBzaXplICovCisjZGVmaW5lCUNPTkZJR19WRVJTSU9OX1ZBUklBQkxFCQkJLyogVS1CT09UIHZlcnNpb24gKi8KKyNkZWZpbmUJQ09ORklHX0FVVE9fQ09NUExFVEUJCQkvKiBDb21tYW5kIGF1dG8gY29tcGxldGUgKi8KKyNkZWZpbmUJQ09ORklHX0NNRExJTkVfRURJVElORwkJCS8qIENvbW1hbmQgaGlzdG9yeSBldGMgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19IVVNIX1BBUlNFUgorI2RlZmluZQlDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCisKKy8qCisgKiBTZXJpYWwgRHJpdmVyCisgKi8KKyNkZWZpbmUJQ09ORklHX1BMMDExX1NFUklBTAorI2RlZmluZQlDT05GSUdfUEwwMTFfQ0xPQ0sJCTI0MDAwMDAwCisjZGVmaW5lCUNPTkZJR19QTDAxeF9QT1JUUwkJeyAodm9pZCAqKU1YU19VQVJUREJHX0JBU0UgfQorI2RlZmluZQlDT05GSUdfQ09OU19JTkRFWAkJMAorI2RlZmluZQlDT05GSUdfQkFVRFJBVEUJCQkxMTUyMDAJLyogRGVmYXVsdCBiYXVkIHJhdGUgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKy8qCisgKiBNTUMgRHJpdmVyCisgKi8KKyNpZmRlZglDT05GSUdfQ01EX01NQworI2RlZmluZQlDT05GSUdfTU1DCisjZGVmaW5lCUNPTkZJR19HRU5FUklDX01NQworI2RlZmluZQlDT05GSUdfTVhTX01NQworI2VuZGlmCisKKy8qCisgKiBOQU5ECisgKi8KKyNpZmRlZglDT05GSUdfQ01EX05BTkQKKyNkZWZpbmUJQ09ORklHX05BTkRfTVhTCisjZGVmaW5lIENPTkZJR19BUEJIX0RNQQorI2RlZmluZQlDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRQkxCisjZGVmaW5lCUNPTkZJR19TWVNfTkFORF9CQVNFCQkweDYwMDAwMDAwCisjZGVmaW5lCUNPTkZJR19TWVNfTkFORF81X0FERFJfQ1lDTEUKKyNkZWZpbmUJTkFORF9NQVhfQ0hJUFMJCQk4CisKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUJQ09ORklHX0VOVl9JU19JTl9OQU5ECisjZGVmaW5lCUNPTkZJR19FTlZfU0laRQkJCSgxNiAqIDEwMjQpCisjZGVmaW5lCUNPTkZJR19FTlZfU0laRV9SRURVTkQJCUNPTkZJR19FTlZfU0laRQorI2RlZmluZQlDT05GSUdfRU5WX1NFQ1RfU0laRQkJKDEyOCAqIDEwMjQpCisjZGVmaW5lCUNPTkZJR19FTlZfUkFOR0UJCSg1MTIgKiAxMDI0KQorI2RlZmluZQlDT05GSUdfRU5WX09GRlNFVAkJMHgzMDAwMDAKKyNkZWZpbmUJQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECVwKKwkJKENPTkZJR19FTlZfT0ZGU0VUICsgQ09ORklHX0VOVl9SQU5HRSkKKworI2RlZmluZQlDT05GSUdfQ01EX1VCSQorI2RlZmluZQlDT05GSUdfQ01EX1VCSUZTCisjZGVmaW5lCUNPTkZJR19DTURfTVREUEFSVFMKKyNkZWZpbmUJQ09ORklHX1JCVFJFRQorI2RlZmluZQlDT05GSUdfTFpPCisjZGVmaW5lCUNPTkZJR19NVERfREVWSUNFCisjZGVmaW5lCUNPTkZJR19NVERfUEFSVElUSU9OUworI2RlZmluZQlNVERJRFNfREVGQVVMVAkJCSJuYW5kMD1ncG1pLW5hbmQuMCIKKyNkZWZpbmUJTVREUEFSVFNfREVGQVVMVAkJCVwKKwkibXRkcGFydHM9Z3BtaS1uYW5kLjA6IgkJCVwKKwkJIjNtKGJvb3Rsb2FkZXIpcm8sIgkJXAorCQkiNTEyayhlbnZpcm9ubWVudCksIgkJXAorCQkiNTEyayhyZWR1bmRhbnQtZW52aXJvbm1lbnQpLCIJXAorCQkiNG0oa2VybmVsKSwiCQkJXAorCQkiLShmaWxlc3lzdGVtKSIKKyNlbmRpZgorCisvKgorICogRXRoZXJuZXQgb24gU09DIChGRUMpCisgKi8KKyNpZmRlZglDT05GSUdfQ01EX05FVAorI2RlZmluZQlDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lCUNPTkZJR19FVEhQUklNRQkJCSJGRUMwIgorI2RlZmluZQlDT05GSUdfRkVDX01YQworI2RlZmluZQlDT05GSUdfRkVDX01YQ19NVUxUSQorI2RlZmluZQlDT05GSUdfTUlJCisjZGVmaW5lCUNPTkZJR19ESVNDT1ZFUl9QSFkKKyNkZWZpbmUJQ09ORklHX0ZFQ19YQ1ZfVFlQRQkJUk1JSQorI2VuZGlmCisKKy8qCisgKiBJMkMKKyAqLworI2lmZGVmCUNPTkZJR19DTURfSTJDCisjZGVmaW5lCUNPTkZJR19JMkNfTVhTCisjZGVmaW5lCUNPTkZJR19IQVJEX0kyQworI2RlZmluZQlDT05GSUdfU1lTX0kyQ19TUEVFRAkJNDAwMDAwCisjZW5kaWYKKworLyoKKyAqIEVFUFJPTQorICovCisjaWZkZWYJQ09ORklHX0NNRF9FRVBST00KKyNkZWZpbmUJQ09ORklHX1NZU19JMkNfTVVMVElfRUVQUk9NUworI2RlZmluZQlDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9MRU4JMgorI2VuZGlmCisKKy8qCisgKiBSVEMKKyAqLworI2lmZGVmCUNPTkZJR19DTURfREFURQorLyogVXNlIHRoZSBpbnRlcm5hbCBSVEMgaW4gdGhlIE1YUyBjaGlwICovCisjZGVmaW5lCUNPTkZJR19SVENfSU5URVJOQUwKKyNpZmRlZglDT05GSUdfUlRDX0lOVEVSTkFMCisjZGVmaW5lCUNPTkZJR19SVENfTVhTCisjZWxzZQorI2RlZmluZQlDT05GSUdfUlRDX000MVQ2MgorI2RlZmluZQlDT05GSUdfU1lTX0kyQ19SVENfQUREUgkJMHg2OAorI2RlZmluZQlDT05GSUdfU1lTX000MVQxMV9CQVNFX1lFQVIJMjAwMAorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIFVTQgorICovCisjaWZkZWYJQ09ORklHX0NNRF9VU0IKKyNkZWZpbmUJQ09ORklHX1VTQl9FSENJCisjZGVmaW5lCUNPTkZJR19VU0JfRUhDSV9NWFMKKyNkZWZpbmUJQ09ORklHX0VIQ0lfTVhTX1BPUlQJCTEKKyNkZWZpbmUJQ09ORklHX0VIQ0lfSVNfVERJCisjZGVmaW5lCUNPTkZJR19VU0JfU1RPUkFHRQorI2VuZGlmCisKKy8qCisgKiBTUEkKKyAqLworI2lmZGVmCUNPTkZJR19DTURfU1BJCisjZGVmaW5lCUNPTkZJR19IQVJEX1NQSQorI2RlZmluZQlDT05GSUdfTVhTX1NQSQorI2RlZmluZQlDT05GSUdfU1BJX0hBTEZfRFVQTEVYCisjZGVmaW5lCUNPTkZJR19ERUZBVUxUX1NQSV9CVVMJCTIKKyNkZWZpbmUJQ09ORklHX0RFRkFVTFRfU1BJX01PREUJCVNQSV9NT0RFXzAKKworLyogU1BJIEZMQVNIICovCisjaWZkZWYJQ09ORklHX0NNRF9TRgorI2RlZmluZQlDT05GSUdfU1BJX0ZMQVNICisjZGVmaW5lCUNPTkZJR19TUElfRkxBU0hfU1RNSUNSTworI2RlZmluZQlDT05GSUdfU1BJX0ZMQVNIX0NTCQkyCisjZGVmaW5lCUNPTkZJR19TRl9ERUZBVUxUX01PREUJCVNQSV9NT0RFXzAKKyNkZWZpbmUJQ09ORklHX1NGX0RFRkFVTFRfU1BFRUQJCTI0MDAwMDAwCisKKyNkZWZpbmUJQ09ORklHX0VOVl9TUElfQ1MJCTAKKyNkZWZpbmUJQ09ORklHX0VOVl9TUElfQlVTCQkyCisjZGVmaW5lCUNPTkZJR19FTlZfU1BJX01BWF9IWgkJMjQwMDAwMDAKKyNkZWZpbmUJQ09ORklHX0VOVl9TUElfTU9ERQkJU1BJX01PREVfMAorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIEJvb3QgTGludXgKKyAqLworI2RlZmluZQlDT05GSUdfQ01ETElORV9UQUcKKyNkZWZpbmUJQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCisjZGVmaW5lCUNPTkZJR19CT09UREVMQVkJMworI2RlZmluZQlDT05GSUdfQk9PVEZJTEUJCSJ1SW1hZ2UiCisjZGVmaW5lCUNPTkZJR19CT09UQVJHUwkJImNvbnNvbGU9dHR5QU0wLDExNTIwMG44ICIKKyNkZWZpbmUJQ09ORklHX0JPT1RDT01NQU5ECSJydW4gYm9vdGNtZF9uZXQiCisjZGVmaW5lCUNPTkZJR19MT0FEQUREUgkJMHg0MjAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX0xPQURfQUREUglDT05GSUdfTE9BREFERFIKKworLyoKKyAqIEV4dHJhIEVudmlyb25tZW50cworICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCVwKKwkidXBkYXRlX25hbmRfZnVsbF9maWxlbmFtZT11LWJvb3QubmFuZFwwIgkJCVwKKwkidXBkYXRlX25hbmRfZmlybXdhcmVfZmlsZW5hbWU9dS1ib290LnNiXDAiCQkJXAorCSJ1cGRhdGVfbmFuZF9maXJtd2FyZV9tYXhzej0weDEwMDAwMFwwIgkJCQlcCisJInVwZGF0ZV9uYW5kX3N0cmlkZT0weDQwXDAiCS8qIE1YMjggZGF0YXNoZWV0IGNoLiAxMi4xMiAqLwlcCisJInVwZGF0ZV9uYW5kX2NvdW50PTB4NFwwIgkvKiBNWDI4IGRhdGFzaGVldCBjaC4gMTIuMTIgKi8JXAorCSJ1cGRhdGVfbmFuZF9nZXRfZmNiX3NpemU9IgkvKiBHZXQgc2l6ZSBvZiBGQ0IgYmxvY2tzICovCVwKKwkJIm5hbmQgZGV2aWNlIDAgOyAiCQkJCQlcCisJCSJuYW5kIGluZm8gOyAiCQkJCQkJXAorCQkic2V0ZXhwciBmY2Jfc3ogJHt1cGRhdGVfbmFuZF9zdHJpZGV9ICogJHt1cGRhdGVfbmFuZF9jb3VudH07IiBcCisJCSJzZXRleHByIHVwZGF0ZV9uYW5kX2ZjYiAke2ZjYl9zen0gKiAke25hbmRfd3JpdGVzaXplfVwwIiBcCisJInVwZGF0ZV9uYW5kX2Z1bGw9IgkJLyogVXBkYXRlIEZDQiwgREJCVCBhbmQgRlcgKi8JXAorCQkiaWYgdGZ0cCAke3VwZGF0ZV9uYW5kX2Z1bGxfZmlsZW5hbWV9IDsgdGhlbiAiCQlcCisJCSJydW4gdXBkYXRlX25hbmRfZ2V0X2ZjYl9zaXplIDsgIgkJCVwKKwkJIm5hbmQgc2NydWIgLXkgMHgwICR7ZmlsZXNpemV9IDsgIgkJCVwKKwkJIm5hbmQgd3JpdGUucmF3ICR7bG9hZGFkZHJ9IDB4MCAke3VwZGF0ZV9uYW5kX2ZjYn0gOyAiCVwKKwkJInNldGV4cHIgdXBkYXRlX29mZiAke2xvYWRhZGRyfSArICR7dXBkYXRlX25hbmRfZmNifSA7ICIgXAorCQkic2V0ZXhwciB1cGRhdGVfc3ogJHtmaWxlc2l6ZX0gLSAke3VwZGF0ZV9uYW5kX2ZjYn0gOyAiIFwKKwkJIm5hbmQgd3JpdGUgJHt1cGRhdGVfb2ZmfSAke3VwZGF0ZV9uYW5kX2ZjYn0gJHt1cGRhdGVfc3p9IDsgIiBcCisJCSJmaVwwIgkJCQkJCQlcCisJInVwZGF0ZV9uYW5kX2Zpcm13YXJlPSIJCS8qIFVwZGF0ZSBvbmx5IGZpcm13YXJlICovCVwKKwkJImlmIHRmdHAgJHt1cGRhdGVfbmFuZF9maXJtd2FyZV9maWxlbmFtZX0gOyB0aGVuICIJXAorCQkicnVuIHVwZGF0ZV9uYW5kX2dldF9mY2Jfc2l6ZSA7ICIJCQlcCisJCSJzZXRleHByIGZjYl9zeiAke3VwZGF0ZV9uYW5kX2ZjYn0gKiAyIDsgIiAvKiBGQ0IgKyBEQkJUICovIFwKKwkJInNldGV4cHIgZndfc3ogJHt1cGRhdGVfbmFuZF9maXJtd2FyZV9tYXhzen0gKiAyIDsgIglcCisJCSJzZXRleHByIGZ3X29mZiAke2ZjYl9zen0gKyAke3VwZGF0ZV9uYW5kX2Zpcm13YXJlX21heHN6fTsiIFwKKwkJIm5hbmQgZXJhc2UgJHtmY2Jfc3p9ICR7Zndfc3p9IDsgIgkJCVwKKwkJIm5hbmQgd3JpdGUgJHtsb2FkYWRkcn0gJHtmY2Jfc3p9ICR7ZmlsZXNpemV9IDsgIglcCisJCSJuYW5kIHdyaXRlICR7bG9hZGFkZHJ9ICR7Zndfb2ZmfSAke2ZpbGVzaXplfSA7ICIJXAorCQkiZmlcMCIKKworI2VuZGlmIC8qIF9fTTI4X0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL25pb3MyLWdlbmVyaWMuaCBiL2luY2x1ZGUvY29uZmlncy9uaW9zMi1nZW5lcmljLmgKaW5kZXggMTM5NTkzOS4uOWJhMzVlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL25pb3MyLWdlbmVyaWMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbmlvczItZ2VuZXJpYy5oCkBAIC02Myw2ICs2MywxMCBAQAogLyoKICAqIFNUQVRVUyBMRUQKICAqLworI2RlZmluZSBDT05GSUdfQUxURVJBX1BJTworI2RlZmluZSBDT05GSUdfU1lTX0FMVEVSQV9QSU9fTlVNCTEKKyNkZWZpbmUgQ09ORklHX1NZU19BTFRFUkFfUElPX0dQSU9fTlVNCUxFRF9QSU9fV0lEVEgKKwogI2RlZmluZSBDT05GSUdfU1RBVFVTX0xFRAkJLyogRW5hYmxlIHN0YXR1cyBkcml2ZXIgKi8KICNkZWZpbmUgQ09ORklHX0dQSU9fTEVECQkvKiBFbmFibGUgR1BJTyBMRUQgZHJpdmVyICovCiAjZGVmaW5lIENPTkZJR19HUElPCQkJLyogRW5hYmxlIEdQSU8gZHJpdmVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlLmgKaW5kZXggZWJiNTcyZS4uMTVlNDBjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXAzX2JlYWdsZS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19iZWFnbGUuaApAQCAtMjE1LDcgKzIxNSw3IEBACiAJInJkYWRkcj0weDgxMDAwMDAwXDAiIFwKIAkidXNidHR5PWNkY19hY21cMCIgXAogCSJib290ZmlsZT11SW1hZ2UuYmVhZ2xlXDAiIFwKLQkiY29uc29sZT10dHlTMiwxMTUyMDBuOFwwIiBcCisJImNvbnNvbGU9dHR5MDIsMTE1MjAwbjhcMCIgXAogCSJtcHVyYXRlPWF1dG9cMCIgXAogCSJidWRkeT1ub25lICJcCiAJIm9wdGFyZ3M9XDAiIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwNF9jb21tb24uaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwNF9jb21tb24uaAppbmRleCBmNTM1NzY5Li40MmE4ZjEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDRfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXA0X2NvbW1vbi5oCkBAIC0zOSw3ICszOSw3IEBACiAKIC8qIEdldCBDUFUgZGVmcyAqLwogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL29tYXA0Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcC5oPgogCiAvKiBEaXNwbGF5IENQVSBhbmQgQm9hcmQgSW5mbyAqLwogI2RlZmluZSBDT05GSUdfRElTUExBWV9DUFVJTkZPCQkxCkBAIC0xMjIsNiArMTIyLDkgQEAKIC8qIEZsYXNoICovCiAjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gJMQogCisvKiBjbG9ja3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DTE9DS1NfRU5BQkxFX0FMTAorCiAvKiBjb21tYW5kcyB0byBpbmNsdWRlICovCiAjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CiAKQEAgLTI3OCw0ICsyODEsNiBAQAogI2RlZmluZSBDT05GSUdfU1BMX1NFUklBTF9TVVBQT1JUCiAjZGVmaW5lIENPTkZJR19TUExfTERTQ1JJUFQgImFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi91LWJvb3Qtc3BsLmxkcyIKIAorI2RlZmluZSBDT05GSUdfU1lTX0VOQUJMRV9QQURTX0FMTAorCiAjZW5kaWYgLyogX19DT05GSUdfT01BUDRfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwNV9ldm0uaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwNV9ldm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzYzZjAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXA1X2V2bS5oCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQuCisgKiBTcmljaGFyYW4gUgkgIDxyLnNyaWNoYXJhbkB0aS5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIE9NQVA0IGRvbmUgYnk6CisgKglBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KKyAqCisgKiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgVEkgRVZNNTQzMCBib2FyZC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQVJNVjcJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVA1NFhYCS8qIHdoaWNoIGlzIGEgNTRYWCAqLworI2RlZmluZSBDT05GSUdfT01BUDU0MzAJLyogd2hpY2ggaXMgaW4gYSA1NDMwICovCisjZGVmaW5lIENPTkZJR181NDMwRVZNCS8qIHdvcmtpbmcgd2l0aCBFVk0gKi8KKyNkZWZpbmUgQ09ORklHX0FSQ0hfQ1BVX0lOSVQKKworLyogR2V0IENQVSBkZWZzICovCisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcC5oPgorCisvKiBEaXNwbGF5IENQVSBhbmQgQm9hcmQgSW5mbyAqLworI2RlZmluZSBDT05GSUdfRElTUExBWV9DUFVJTkZPCisjZGVmaW5lIENPTkZJR19ESVNQTEFZX0JPQVJESU5GTworCisvKiBDbG9jayBEZWZpbmVzICovCisjZGVmaW5lIFZfT1NDSwkzODQwMDAwMCAvKiBDbG9jayBvdXRwdXQgZnJvbSBUMiAqLworI2RlZmluZSBWX1NDTEsJVl9PU0NLCisKKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkvKiBubyBzdXBwb3J0IGZvciBJUlFzICovCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQKKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcgLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqIFRvdGFsIFNpemUgRW52aXJvbm1lbnQgLSAxMjhrCisgKiBNYWxsb2MgLSBhZGQgMjU2aworICovCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCSgxMjggPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKENPTkZJR19FTlZfU0laRSArICgyNTYgPDwgMTApKQorLyogVmVjdG9yIEJhc2UgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DQTlfVkVDVE9SX0JBU0UJU1JBTV9ST01fVkVDVF9CQVNFCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIHNlcmlhbCBwb3J0IC0gTlMxNjU1MCBjb21wYXRpYmxlCisgKi8KKyNkZWZpbmUgVl9OUzE2NTUwX0NMSwkJCTQ4MDAwMDAwCisKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCSgtNCkKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NMSwkJVl9OUzE2NTUwX0NMSworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkJMworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMwkJVUFSVDNfQkFTRQorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJCTExNTIwMAorI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXs0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLFwKKwkJCQkJMTE1MjAwfQorLyogSTJDICAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfU1BFRUQJCTEwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkJMQorI2RlZmluZSBDT05GSUdfRFJJVkVSX09NQVAzNFhYX0kyQworI2RlZmluZSBDT05GSUdfSTJDX01VTFRJX0JVUworCisvKiBUV0w2MDMwICovCisjZGVmaW5lIENPTkZJR19UV0w2MDMwX1BPV0VSCisjZGVmaW5lIENPTkZJR19DTURfQkFUCisKKy8qIE1NQyAqLworI2RlZmluZSBDT05GSUdfR0VORVJJQ19NTUMKKyNkZWZpbmUgQ09ORklHX01NQworI2RlZmluZSBDT05GSUdfT01BUF9IU01NQworI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorCisvKiBNTUMgRU5WIHJlbGF0ZWQgZGVmaW5lcyAqLworI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX01NQworI2RlZmluZSBDT05GSUdfU1lTX01NQ19FTlZfREVWCQkxCS8qIFNMT1QyOiBlTU1DKDEpICovCisjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkweEUwMDAwCisKKy8qIFVTQiAqLworI2RlZmluZSBDT05GSUdfTVVTQl9VREMKKyNkZWZpbmUgQ09ORklHX1VTQl9PTUFQMworCisvKiBVU0IgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ09ORklHX1VTQl9ERVZJQ0UKKyNkZWZpbmUgQ09ORklHX1VTQl9UVFkKKyNkZWZpbmUgQ09ORklHX1NZU19DT05TT0xFX0lTX0lOX0VOVgorCisvKiBGbGFzaCAqLworI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICisKKy8qIENhY2hlICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NJWkUJNjQKKyNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0hJRlQJNgorCisvKiBjb21tYW5kcyB0byBpbmNsdWRlICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisKKy8qIEVuYWJsZWQgY29tbWFuZHMgKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9FWFQyCQkvKiBFWFQyIFN1cHBvcnQgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPTkZJR19DTURfRkFUCQkvKiBGQVQgc3VwcG9ydCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPTkZJR19DTURfSTJDCQkvKiBJMkMgc2VyaWFsIGJ1cyBzdXBwb3J0CSovCisjZGVmaW5lIENPTkZJR19DTURfTU1DCQkvKiBNTUMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPTkZJR19DTURfU0FWRUVOVgorCisvKiBEaXNhYmxlZCBjb21tYW5kcyAqLworI3VuZGVmIENPTkZJR19DTURfTkVUCisjdW5kZWYgQ09ORklHX0NNRF9ORlMKKyN1bmRlZiBDT05GSUdfQ01EX0ZQR0EJCS8qIEZQR0EgY29uZmlndXJhdGlvbiBTdXBwb3J0ICAgKi8KKyN1bmRlZiBDT05GSUdfQ01EX0lNTFMJCS8qIExpc3QgYWxsIGZvdW5kIGltYWdlcyAgICAgICAgKi8KKworLyoKKyAqIEVudmlyb25tZW50IHNldHVwCisgKi8KKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgXAorCSJsb2FkYWRkcj0weDgyMDAwMDAwXDAiIFwKKwkiY29uc29sZT10dHlTMiwxMTUyMDBuOFwwIiBcCisJInVzYnR0eT1jZGNfYWNtXDAiIFwKKwkidnJhbT0xNk1cMCIgXAorCSJtbWNkZXY9MFwwIiBcCisJIm1tY3Jvb3Q9L2Rldi9tbWNibGswcDIgcndcMCIgXAorCSJtbWNyb290ZnN0eXBlPWV4dDMgcm9vdHdhaXRcMCIgXAorCSJtbWNhcmdzPXNldGVudiBib290YXJncyBjb25zb2xlPSR7Y29uc29sZX0gIiBcCisJCSJ2cmFtPSR7dnJhbX0gIiBcCisJCSJyb290PSR7bW1jcm9vdH0gIiBcCisJCSJyb290ZnN0eXBlPSR7bW1jcm9vdGZzdHlwZX1cMCIgXAorCSJsb2FkYm9vdHNjcmlwdD1mYXRsb2FkIG1tYyAke21tY2Rldn0gJHtsb2FkYWRkcn0gYm9vdC5zY3JcMCIgXAorCSJib290c2NyaXB0PWVjaG8gUnVubmluZyBib290c2NyaXB0IGZyb20gbW1jJHttbWNkZXZ9IC4uLjsgIiBcCisJCSJzb3VyY2UgJHtsb2FkYWRkcn1cMCIgXAorCSJsb2FkdWltYWdlPWZhdGxvYWQgbW1jICR7bW1jZGV2fSAke2xvYWRhZGRyfSB1SW1hZ2VcMCIgXAorCSJtbWNib290PWVjaG8gQm9vdGluZyBmcm9tIG1tYyR7bW1jZGV2fSAuLi47ICIgXAorCQkicnVuIG1tY2FyZ3M7ICIgXAorCQkiYm9vdG0gJHtsb2FkYWRkcn1cMCIgXAorCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORCBcCisJImlmIG1tYyByZXNjYW4gJHttbWNkZXZ9OyB0aGVuICIgXAorCQkiaWYgcnVuIGxvYWRib290c2NyaXB0OyB0aGVuICIgXAorCQkJInJ1biBib290c2NyaXB0OyAiIFwKKwkJImVsc2UgIiBcCisJCQkiaWYgcnVuIGxvYWR1aW1hZ2U7IHRoZW4gIiBcCisJCQkJInJ1biBtbWNib290OyAiIFwKKwkJCSJmaTsgIiBcCisJCSJmaTsgIiBcCisJImZpIgorCisjZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCQkxCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICovCisjZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIJLyogdXNlICJodXNoIiBjb21tYW5kIHBhcnNlciAqLworI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCQkiT01BUDU0MzAgRVZNICMgIgorI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkJMjU2CisvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRQkJKENPTkZJR19TWVNfQ0JTSVpFICsgXAorCQkJCQlzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkJMTYKKy8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJKENPTkZJR19TWVNfQ0JTSVpFKQorCisvKgorICogbWVtdGVzdCBzZXR1cAorICovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDgwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCShDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQgKyAoMzIgPDwgMjApKQorCisvKiBEZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJMHg4MDAwMDAwMAorCisvKiBVc2UgR2VuZXJhbCBwdXJwb3NlIHRpbWVyIDEgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19USU1FUkJBU0UJCUdQVDJfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX1BUVgkJCTIJLyogRGl2aXNvcjogMl4oUFRWKzEpID0+IDggKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCTEwMDAKKworLyoKKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgxMjggPDwgMTApCS8qIFJlZ3VsYXIgc3RhY2sgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0lSUQkoNCA8PCAxMCkJLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCSg0IDw8IDEwKQkvKiBGSVEgc3RhY2sgKi8KKyNlbmRpZgorCisvKgorICogU0RSQU0gTWVtb3J5IE1hcAorICogRXZlbiB0aG91Z2ggd2UgdXNlIHR3byBDUyBhbGwgdGhlIG1lbW9yeQorICogaXMgbWFwcGVkIHRvIG9uZSBjb250aWd1b3VzIGJsb2NrCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJMHg4MDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFIJMHg0MDMwRDgwMAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJMHg4MDAKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIJCShDT05GSUdfU1lTX0lOSVRfUkFNX0FERFIgKyBcCisJCQkJCSBDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUgLSBcCisJCQkJCSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUworCisvKiBEZWZpbmVzIGZvciBTRFJBTSBpbml0ICovCisjaWZuZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCisjZGVmaW5lIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTgorI2RlZmluZSBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MKKyNlbmRpZgorCisvKiBEZWZpbmVzIGZvciBTUEwgKi8KKyNkZWZpbmUgQ09ORklHX1NQTAorI2RlZmluZSBDT05GSUdfU1BMX1RFWFRfQkFTRQkJMHg0MDMwNDM1MAorI2RlZmluZSBDT05GSUdfU1BMX01BWF9TSVpFCQkweDFFMDAwCS8qIDEyMEsgKi8KKyNkZWZpbmUgQ09ORklHX1NQTF9TVEFDSwkJTE9XX0xFVkVMX1NSQU1fU1RBQ0sKKworI2RlZmluZSBDT05GSUdfU1BMX0JTU19TVEFSVF9BRERSCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9CU1NfTUFYX1NJWkUJCTB4ODAwMDAJCS8qIDUxMiBLQiAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTU1DU0RfUkFXX01PREVfVV9CT09UX1NFQ1RPUgkweDMwMCAvKiBhZGRyZXNzIDB4NjAwMDAgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19VX0JPT1RfTUFYX1NJWkVfU0VDVE9SUwkweDIwMCAvKiAyNTYgS0IgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NTUNfU0RfRkFUX0JPT1RfUEFSVElUSU9OCTEKKyNkZWZpbmUgQ09ORklHX1NQTF9GQVRfTE9BRF9QQVlMT0FEX05BTUUJInUtYm9vdC5pbWciCisKKyNkZWZpbmUgQ09ORklHX1NQTF9MSUJDT01NT05fU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0xJQkRJU0tfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0kyQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTU1DX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9GQVRfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0xJQkdFTkVSSUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX1NFUklBTF9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTERTQ1JJUFQgImFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi91LWJvb3Qtc3BsLmxkcyIKKworLyoKKyAqIDFNQiBpbnRvIHRoZSBTRFJBTSB0byBhbGxvdyBmb3IgU1BMJ3MgYnNzIGF0IHRoZSBiZWdpbm5pbmcgb2YgU0RSQU0KKyAqIDY0IGJ5dGVzIGJlZm9yZSB0aGlzIGFkZHJlc3Mgc2hvdWxkIGJlIHNldCBhc2lkZSBmb3IgdS1ib290LmltZydzCisgKiBoZWFkZXIuIFRoYXQgaXMgMHg4MDBGRkZDMC0tMHg4MDEwMDAwMCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGFueQorICogb3RoZXIgbmVlZHMuCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJCTB4ODAxMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19TUExfTUFMTE9DX1NUQVJUICAgICAweDgwMjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfU1BMX01BTExPQ19TSVpFICAgICAgMHgxMDAwMDAgICAgICAgIC8qIDEgTUIgKi8KKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wMV9wMl9yZGJfcGMuaCBiL2luY2x1ZGUvY29uZmlncy9wMV9wMl9yZGJfcGMuaAppbmRleCBiY2ZiMDM0Li41YTY5OTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcDFfcDJfcmRiX3BjLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3AxX3AyX3JkYl9wYy5oCkBAIC0yMjEsNyArMjIxLDcgQEAKIAogLyogSU4gY2FzZSBvZiBOQU5EIGJvb3Rsb2FkZXIgcmVsb2NhdGUgQ0NTUkJBUiBpbiBSQU1ib290IGNvZGUgbm90IGluIHRoZSA0awogICAgICAgIFNQTCBjb2RlKi8KLSNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgJiYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisjaWYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvcG05MjYxLmggYi9pbmNsdWRlL2NvbmZpZ3MvcG05MjYxLmgKaW5kZXggODllMTdiOC4uNTU0NTVlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3BtOTI2MS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9wbTkyNjEuaApAQCAtNTIsNiArNTIsOSBAQAogI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmCSovCiAjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCTAKIAorI2RlZmluZSBNQUNIX1RZUEVfUE05MjYxCTExODcKKyNkZWZpbmUgQ09ORklHX01BQ0hfVFlQRQlNQUNIX1RZUEVfUE05MjYxCisKIC8qIGNsb2NrcyAqLwogLyogQ0tHUl9NT1IgLSBlbmFibGUgbWFpbiBvc2MuICovCiAjZGVmaW5lIENPTkZJR19TWVNfTU9SX1ZBTAkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wbTkyNjMuaCBiL2luY2x1ZGUvY29uZmlncy9wbTkyNjMuaAppbmRleCAxZjc1NDNjLi40MzEwNGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcG05MjYzLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3BtOTI2My5oCkBAIC01Miw2ICs1Miw5IEBACiAjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYJKi8KICNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJMAogCisjZGVmaW5lIE1BQ0hfVFlQRV9QTTkyNjMJMTQ3NQorI2RlZmluZSBDT05GSUdfTUFDSF9UWVBFCU1BQ0hfVFlQRV9QTTkyNjMKKwogLyogY2xvY2tzICovCiAjZGVmaW5lIENPTkZJR19TWVNfTU9SX1ZBTAkJCQkJCVwKIAkJKEFUOTFfUE1DX01PUl9NT1NDRU4gfAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3BtOWc0NS5oIGIvaW5jbHVkZS9jb25maWdzL3BtOWc0NS5oCmluZGV4IGFjYzEyMDQuLmQzYmVhZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9wbTlnNDUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcG05ZzQ1LmgKQEAgLTQxLDYgKzQxLDkgQEAKICNkZWZpbmUgQ09ORklHX1BNOUc0NQkJMQkvKiBJdCdzIGFuIFJvbmV0aXggUE05RzQ1ICovCiAjZGVmaW5lIENPTkZJR19TWVNfQVQ5MV9DUFVfTkFNRQkiQVQ5MVNBTTlHNDUiCiAKKyNkZWZpbmUgTUFDSF9UWVBFX1BNOUc0NQkyNjcyCisjZGVmaW5lIENPTkZJR19NQUNIX1RZUEUJTUFDSF9UWVBFX1BNOUc0NQorCiAvKiBBUk0gYXN5bmNocm9ub3VzIGNsb2NrICovCiAjZGVmaW5lIENPTkZJR19TWVNfQVQ5MV9NQUlOX0NMT0NLCTEyMDAwMDAwIC8qIGZyb20gMTIgTUh6IGNyeXN0YWwgKi8KICNkZWZpbmUgQ09ORklHX1NZU19BVDkxX1NMT1dfQ0xPQ0sJMzI3NjgJCS8qIHNsb3cgY2xvY2sgeHRhbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3ZwYWMyNzAuaCBiL2luY2x1ZGUvY29uZmlncy92cGFjMjcwLmgKaW5kZXggOWRiNGQ5OS4uZGQ2OGM2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3ZwYWMyNzAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdnBhYzI3MC5oCkBAIC0xMDcsNyArMTA3LDggQEAKICAqLwogI2lmZGVmCUNPTkZJR19DTURfTU1DCiAjZGVmaW5lCUNPTkZJR19NTUMKLSNkZWZpbmUJQ09ORklHX1BYQV9NTUMKKyNkZWZpbmUJQ09ORklHX0dFTkVSSUNfTU1DCisjZGVmaW5lCUNPTkZJR19QWEFfTU1DX0dFTkVSSUMKICNkZWZpbmUJQ09ORklHX1NZU19NTUNfQkFTRQkJMHhGMDAwMDAwMAogI2RlZmluZQlDT05GSUdfQ01EX0ZBVAogI2RlZmluZQlDT05GSUdfQ01EX0VYVDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGF0YWZsYXNoLmggYi9pbmNsdWRlL2RhdGFmbGFzaC5oCmluZGV4IDk2YWMwOTcuLjA1NmUxOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZGF0YWZsYXNoLmgKKysrIGIvaW5jbHVkZS9kYXRhZmxhc2guaApAQCAtMjA4LDYgKzIwOCw4IEBACiBleHRlcm4gaW50IGFkZHJfZGF0YWZsYXNoICh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIGludCByZWFkX2RhdGFmbGFzaCAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGNoYXIgKnJlc3VsdCk7CiBleHRlcm4gaW50IHdyaXRlX2RhdGFmbGFzaCAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGRlc3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IEFUOTFGX0RhdGFmbGFzaEluaXQodm9pZCk7CisKIGV4dGVybiB2b2lkIGRhdGFmbGFzaF9wcmludF9pbmZvICh2b2lkKTsKIGV4dGVybiB2b2lkIGRhdGFmbGFzaF9wZXJyb3IgKGludCBlcnIpOwogZXh0ZXJuIHZvaWQgQVQ5MUZfRGF0YWZsYXNoU2V0RW52ICh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZW52aXJvbm1lbnQuaCBiL2luY2x1ZGUvZW52aXJvbm1lbnQuaAppbmRleCA2Mzk0YTk2Li4zYzE0NWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Vudmlyb25tZW50LmgKKysrIGIvaW5jbHVkZS9lbnZpcm9ubWVudC5oCkBAIC0zOCwyMSArMzgsMjIgQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX0ZMQVNIKQotIyBpZm5kZWYgIENPTkZJR19FTlZfQUREUgotIyAgZGVmaW5lIENPTkZJR19FTlZfQUREUgkoQ09ORklHX1NZU19GTEFTSF9CQVNFICsgQ09ORklHX0VOVl9PRkZTRVQpCisjIGlmbmRlZglDT05GSUdfRU5WX0FERFIKKyMgIGRlZmluZQlDT05GSUdfRU5WX0FERFIJKENPTkZJR19TWVNfRkxBU0hfQkFTRSArIENPTkZJR19FTlZfT0ZGU0VUKQogIyBlbmRpZgotIyBpZm5kZWYgIENPTkZJR19FTlZfT0ZGU0VUCi0jICBkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQgKENPTkZJR19FTlZfQUREUiAtIENPTkZJR19TWVNfRkxBU0hfQkFTRSkKKyMgaWZuZGVmCUNPTkZJR19FTlZfT0ZGU0VUCisjICBkZWZpbmUJQ09ORklHX0VOVl9PRkZTRVQgKENPTkZJR19FTlZfQUREUiAtIENPTkZJR19TWVNfRkxBU0hfQkFTRSkKICMgZW5kaWYKICMgaWYgIWRlZmluZWQoQ09ORklHX0VOVl9BRERSX1JFRFVORCkgJiYgZGVmaW5lZChDT05GSUdfRU5WX09GRlNFVF9SRURVTkQpCi0jICBkZWZpbmUgQ09ORklHX0VOVl9BRERSX1JFRFVORAkoQ09ORklHX1NZU19GTEFTSF9CQVNFICsgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EKQorIyAgZGVmaW5lCUNPTkZJR19FTlZfQUREUl9SRURVTkQJXAorCQkoQ09ORklHX1NZU19GTEFTSF9CQVNFICsgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5EKQogIyBlbmRpZgogIyBpZiBkZWZpbmVkKENPTkZJR19FTlZfU0VDVF9TSVpFKSB8fCBkZWZpbmVkKENPTkZJR19FTlZfU0laRSkKLSMgIGlmbmRlZiAgQ09ORklHX0VOVl9TRUNUX1NJWkUKLSMgICBkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUJQ09ORklHX0VOVl9TSVpFCisjICBpZm5kZWYJQ09ORklHX0VOVl9TRUNUX1NJWkUKKyMgICBkZWZpbmUJQ09ORklHX0VOVl9TRUNUX1NJWkUJQ09ORklHX0VOVl9TSVpFCiAjICBlbmRpZgotIyAgaWZuZGVmICBDT05GSUdfRU5WX1NJWkUKLSMgICBkZWZpbmUgQ09ORklHX0VOVl9TSVpFCUNPTkZJR19FTlZfU0VDVF9TSVpFCisjICBpZm5kZWYJQ09ORklHX0VOVl9TSVpFCisjICAgZGVmaW5lCUNPTkZJR19FTlZfU0laRQlDT05GSUdfRU5WX1NFQ1RfU0laRQogIyAgZW5kaWYKICMgZWxzZQogIyAgZXJyb3IgIkJvdGggQ09ORklHX0VOVl9TRUNUX1NJWkUgYW5kIENPTkZJR19FTlZfU0laRSB1bmRlZmluZWQiCkBAIC02MCw4ICs2MSw5IEBACiAjIGlmIGRlZmluZWQoQ09ORklHX0VOVl9BRERSX1JFRFVORCkgJiYgIWRlZmluZWQoQ09ORklHX0VOVl9TSVpFX1JFRFVORCkKICMgIGRlZmluZSBDT05GSUdfRU5WX1NJWkVfUkVEVU5ECUNPTkZJR19FTlZfU0laRQogIyBlbmRpZgotIyBpZiAoQ09ORklHX0VOVl9BRERSID49IENPTkZJR19TWVNfTU9OSVRPUl9CQVNFKSAmJiBcCi0gICAgIChDT05GSUdfRU5WX0FERFIrQ09ORklHX0VOVl9TSVpFKSA8PSAoQ09ORklHX1NZU19NT05JVE9SX0JBU0UgKyBDT05GSUdfU1lTX01PTklUT1JfTEVOKQorIyBpZgkoQ09ORklHX0VOVl9BRERSID49IENPTkZJR19TWVNfTU9OSVRPUl9CQVNFKSAmJgkJXAorCShDT05GSUdfRU5WX0FERFIgKyBDT05GSUdfRU5WX1NJWkUpIDw9CQkJXAorCShDT05GSUdfU1lTX01PTklUT1JfQkFTRSArIENPTkZJR19TWVNfTU9OSVRPUl9MRU4pCiAjICBkZWZpbmUgRU5WX0lTX0VNQkVEREVECTEKICMgZW5kaWYKICMgaWYgZGVmaW5lZChDT05GSUdfRU5WX0FERFJfUkVEVU5EKSB8fCBkZWZpbmVkKENPTkZJR19FTlZfT0ZGU0VUX1JFRFVORCkKQEAgLTEwNSwxMCArMTA3LDEwIEBACiAKIC8qIEVtYmVkZGVkIGVudiBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc29tZSBmbGFzaCB0eXBlcyAqLwogI2lmZGVmIENPTkZJR19FTlZfSVNfRU1CRURERUQKLSMgaWYgIWRlZmluZWQoQ09ORklHX0VOVl9JU19JTl9GTEFTSCkgJiYgXAotICAgICAhZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX05BTkQpICYmIFwKLSAgICAgIWRlZmluZWQoQ09ORklHX0VOVl9JU19JTl9PTkVOQU5EKSAmJiBcCi0gICAgICFkZWZpbmVkKENPTkZJR19FTlZfSVNfSU5fU1BJX0ZMQVNIKQorIyBpZgkhZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX0ZMQVNIKQkmJiBcCisJIWRlZmluZWQoQ09ORklHX0VOVl9JU19JTl9OQU5EKQkJJiYgXAorCSFkZWZpbmVkKENPTkZJR19FTlZfSVNfSU5fT05FTkFORCkJJiYgXAorCSFkZWZpbmVkKENPTkZJR19FTlZfSVNfSU5fU1BJX0ZMQVNIKQogIyAgZXJyb3IgIkNPTkZJR19FTlZfSVNfRU1CRURERUQgbm90IHN1cHBvcnRlZCBmb3IgeW91ciBmbGFzaCB0eXBlIgogIyBlbmRpZgogI2VuZGlmCkBAIC0xNDEsMTAgKzE0MywxMyBAQAogIyBkZWZpbmUgRU5WX0hFQURFUl9TSVpFCShzaXplb2YodWludDMyX3QpKQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfU0FWRUVOVikgJiYgIWRlZmluZWQoQ09ORklHX0VOVl9JU19OT1dIRVJFKQorZXh0ZXJuIGNoYXIgKmVudl9uYW1lX3NwZWM7CisjZW5kaWYKIAogI2RlZmluZSBFTlZfU0laRSAoQ09ORklHX0VOVl9TSVpFIC0gRU5WX0hFQURFUl9TSVpFKQogCi10eXBlZGVmCXN0cnVjdCBlbnZpcm9ubWVudF9zIHsKK3R5cGVkZWYgc3RydWN0IGVudmlyb25tZW50X3MgewogCXVpbnQzMl90CWNyYzsJCS8qIENSQzMyIG92ZXIgZGF0YSBieXRlcwkqLwogI2lmZGVmIENPTkZJR19TWVNfUkVEVU5EQU5EX0VOVklST05NRU5UCiAJdW5zaWduZWQgY2hhcglmbGFnczsJCS8qIGFjdGl2ZS9vYnNvbGV0ZSBmbGFncwkqLwpAQCAtMTUyLDYgKzE1NywyMCBAQAogCXVuc2lnbmVkIGNoYXIJZGF0YVtFTlZfU0laRV07IC8qIEVudmlyb25tZW50IGRhdGEJCSovCiB9IGVudl90OwogCisjaWZkZWYgRU5WX0lTX0VNQkVEREVECitleHRlcm4gZW52X3QgZW52aXJvbm1lbnQ7CisjZW5kaWYgLyogRU5WX0lTX0VNQkVEREVEICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGRlZmF1bHRfZW52aXJvbm1lbnRbXTsKK2V4dGVybiBlbnZfdCAqZW52X3B0cjsKKworZXh0ZXJuIHZvaWQgZW52X3JlbG9jYXRlX3NwZWModm9pZCk7CitleHRlcm4gdW5zaWduZWQgY2hhciBlbnZfZ2V0X2NoYXJfc3BlYyhpbnQpOworCisjaWYgZGVmaW5lZChDT05GSUdfTkVFRFNfTUFOVUFMX1JFTE9DKQorZXh0ZXJuIHZvaWQgZW52X3JlbG9jKHZvaWQpOworI2VuZGlmCisKICNpZm5kZWYgRE9fREVQU19PTkxZCiAKICNpbmNsdWRlIDxzZWFyY2guaD4KQEAgLTE1OSwxNCArMTc4LDE0IEBACiBleHRlcm4gc3RydWN0IGhzZWFyY2hfZGF0YSBlbnZfaHRhYjsKIAogLyogRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2hhcmFjdGVyIGZyb20gdGhlIGVudmlyb25tZW50ICovCi11bnNpZ25lZCBjaGFyIGVudl9nZXRfY2hhciAoaW50KTsKK3Vuc2lnbmVkIGNoYXIgZW52X2dldF9jaGFyKGludCk7CiAKIC8qIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudCAqLwogY29uc3QgdW5zaWduZWQgY2hhciAqZW52X2dldF9hZGRyKGludCk7Ci11bnNpZ25lZCBjaGFyIGVudl9nZXRfY2hhcl9tZW1vcnkgKGludCBpbmRleCk7Cit1bnNpZ25lZCBjaGFyIGVudl9nZXRfY2hhcl9tZW1vcnkoaW50IGluZGV4KTsKIAogLyogRnVuY3Rpb24gdGhhdCB1cGRhdGVzIENSQyBvZiB0aGUgZW5pcm9ubWVudCAqLwotdm9pZCBlbnZfY3JjX3VwZGF0ZSAodm9pZCk7Cit2b2lkIGVudl9jcmNfdXBkYXRlKHZvaWQpOwogCiAvKiBbcmVdc2V0IHRvIHRoZSBkZWZhdWx0IGVudmlyb25tZW50ICovCiB2b2lkIHNldF9kZWZhdWx0X2Vudihjb25zdCBjaGFyICpzKTsKQEAgLTE3NCw2ICsxOTMsNiBAQAogLyogSW1wb3J0IGZyb20gYmluYXJ5IHJlcHJlc2VudGF0aW9uIGludG8gaGFzaCB0YWJsZSAqLwogaW50IGVudl9pbXBvcnQoY29uc3QgY2hhciAqYnVmLCBpbnQgY2hlY2spOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBET19ERVBTX09OTFkgKi8KIAotI2VuZGlmCS8qIF9FTlZJUk9OTUVOVF9IXyAqLworI2VuZGlmIC8qIF9FTlZJUk9OTUVOVF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mZHRfc3VwcG9ydC5oIGIvaW5jbHVkZS9mZHRfc3VwcG9ydC5oCmluZGV4IGM3YjQ2MDUuLmNlZjNjNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZmR0X3N1cHBvcnQuaAorKysgYi9pbmNsdWRlL2ZkdF9zdXBwb3J0LmgKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgPGZkdC5oPgogCi11MzIgZmR0X2dldHByb3BfdTMyX2RlZmF1bHQodm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcm9wLAotCQkJCWNvbnN0IHUzMiBkZmx0KTsKK3UzMiBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdChjb25zdCB2b2lkICpmZHQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJY29uc3QgY2hhciAqcHJvcCwgY29uc3QgdTMyIGRmbHQpOwogaW50IGZkdF9jaG9zZW4odm9pZCAqZmR0LCBpbnQgZm9yY2UpOwogaW50IGZkdF9pbml0cmQodm9pZCAqZmR0LCB1bG9uZyBpbml0cmRfc3RhcnQsIHVsb25nIGluaXRyZF9lbmQsIGludCBmb3JjZSk7CiB2b2lkIGRvX2ZpeHVwX2J5X3BhdGgodm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcm9wLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbWFnZS5oIGIvaW5jbHVkZS9pbWFnZS5oCmluZGV4IGM1NmExOGQuLjZhNDFjMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW1hZ2UuaAorKysgYi9pbmNsdWRlL2ltYWdlLmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2RlZmluZSBJSF9BUkNIX0FWUjMyCQkxNwkvKiBBVlIzMgkqLwogI2RlZmluZSBJSF9BUkNIX1NUMjAwCSAgICAgICAgMTgJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUMjAwICAqLwogI2RlZmluZSBJSF9BUkNIX1NBTkRCT1gJCTE5CS8qIFNhbmRib3ggYXJjaGl0ZWN0dXJlICh0ZXN0IG9ubHkpICovCi0jZGVmaW5lIElIX0FSQ0hfTkRTMzIJICAgICAgICAxOQkvKiBBTkRFUyBUZWNobm9sb2d5IC0gTkRTMzIgICovCisjZGVmaW5lIElIX0FSQ0hfTkRTMzIJICAgICAgICAyMAkvKiBBTkRFUyBUZWNobm9sb2d5IC0gTkRTMzIgICovCiAKIC8qCiAgKiBJbWFnZSBUeXBlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sY2QuaCBiL2luY2x1ZGUvbGNkLmgKaW5kZXggODljYzkwYy4uODNiNTBmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9sY2QuaAorKysgYi9pbmNsdWRlL2xjZC5oCkBAIC0yMTAsNiArMjEwLDggQEAKIHZvaWQJbGNkX3B1dGMJKGNvbnN0IGNoYXIgYyk7CiB2b2lkCWxjZF9wdXRzCShjb25zdCBjaGFyICpzKTsKIHZvaWQJbGNkX3ByaW50ZgkoY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZAlsY2RfY2xlYXIodm9pZCk7CitpbnQJbGNkX2Rpc3BsYXlfYml0bWFwKHVsb25nIGJtcF9pbWFnZSwgaW50IHgsIGludCB5KTsKIAogLyogQWxsb3cgYm9hcmRzIHRvIGN1c3RvbWl6ZSB0aGUgaW5mb3JtYXRpb24gZGlzcGxheWVkICovCiB2b2lkIGxjZF9zaG93X2JvYXJkX2luZm8odm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29uZW5hbmRfdWJvb3QuaCBiL2luY2x1ZGUvb25lbmFuZF91Ym9vdC5oCmluZGV4IDkyMjc5ZDUuLmYzMjFkOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb25lbmFuZF91Ym9vdC5oCisrKyBiL2luY2x1ZGUvb25lbmFuZF91Ym9vdC5oCkBAIC01Miw0ICs1Miw3IEBACiBleHRlcm4gdm9pZCBzM2M2NHh4X29uZW5hbmRfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CiBleHRlcm4gdm9pZCBzM2M2NHh4X3NldF93aWR0aF9yZWdzKHN0cnVjdCBvbmVuYW5kX2NoaXAgKik7CiAKKy8qIFNQTCAqLwordm9pZCBvbmVuYW5kX3NwbF9sb2FkX2ltYWdlKHVpbnQzMl90IG9mZnMsIHVpbnQzMl90IHNpemUsIHZvaWQgKmRzdCk7CisKICNlbmRpZiAvKiBfX1VCT09UX09ORU5BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY2E5Njk4LmggYi9pbmNsdWRlL3BjYTk2OTguaAppbmRleCAyNTA2MDg4Li42N2IzNjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjYTk2OTguaAorKysgYi9pbmNsdWRlL3BjYTk2OTguaApAQCAtMSw5ICsxLDM0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDExCisgKiBEaXJrIEVpYmFjaCwgIEd1bnRlcm1hbm4gJiBEcnVuY2sgR21iSCwgZWliYWNoQGdkc3lzLmRlCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKwogI2lmbmRlZiBfX1BDQTk2OThfSF8KICNkZWZpbmUgX19QQ0E5Njk4X0hfCiAKLWludCBwY2E5Njk4X2RpcmVjdGlvbl9pbnB1dCh1OCBjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotaW50IHBjYTk2OThfZGlyZWN0aW9uX291dHB1dCh1OCBjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotaW50IHBjYTk2OThfZ2V0X2lucHV0KHU4IGNoaXAsIHVuc2lnbmVkIG9mZnNldCk7Ci1pbnQgcGNhOTY5OF9zZXRfb3V0cHV0KHU4IGNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKTsKK2ludCBwY2E5Njk4X3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwordm9pZCBwY2E5Njk4X2ZyZWUodW5zaWduZWQgZ3Bpbyk7CitpbnQgcGNhOTY5OF9kaXJlY3Rpb25faW5wdXQodTggYWRkciwgdW5zaWduZWQgZ3Bpbyk7CitpbnQgcGNhOTY5OF9kaXJlY3Rpb25fb3V0cHV0KHU4IGFkZHIsIHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CitpbnQgcGNhOTY5OF9nZXRfdmFsdWUodTggYWRkciwgdW5zaWduZWQgZ3Bpbyk7CitpbnQgcGNhOTY5OF9zZXRfdmFsdWUodTggYWRkciwgdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKIAogI2VuZGlmIC8qIF9fUENBOTY5OF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zZWFyY2guaCBiL2luY2x1ZGUvc2VhcmNoLmgKaW5kZXggYjRlZGQ0My4uZWY1M2VkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zZWFyY2guaAorKysgYi9pbmNsdWRlL3NlYXJjaC5oCkBAIC05MSw3ICs5MSw4IEBACiBleHRlcm4gaW50IGhkZWxldGVfcihjb25zdCBjaGFyICpfX2tleSwgc3RydWN0IGhzZWFyY2hfZGF0YSAqX19odGFiKTsKIAogZXh0ZXJuIHNzaXplX3QgaGV4cG9ydF9yKHN0cnVjdCBoc2VhcmNoX2RhdGEgKl9faHRhYiwKLQkJICAgICBjb25zdCBjaGFyIF9fc2VwLCBjaGFyICoqX19yZXNwLCBzaXplX3QgX19zaXplKTsKKwkJICAgICBjb25zdCBjaGFyIF9fc2VwLCBjaGFyICoqX19yZXNwLCBzaXplX3QgX19zaXplLAorCQkgICAgIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKTsKIAogZXh0ZXJuIGludCBoaW1wb3J0X3Ioc3RydWN0IGhzZWFyY2hfZGF0YSAqX19odGFiLAogCQkgICAgIGNvbnN0IGNoYXIgKl9fZW52LCBzaXplX3QgX19zaXplLCBjb25zdCBjaGFyIF9fc2VwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zeW5vcHN5cy9kd2NkZHIyMW1jdGwuaCBiL2luY2x1ZGUvc3lub3BzeXMvZHdjZGRyMjFtY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzYjEyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc3lub3BzeXMvZHdjZGRyMjFtY3RsLmgKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTEgQW5kZXMgVGVjaG5vbG9neSBDb3JwCisgKiBNYWNwYXVsIExpbiA8bWFjcGF1bEBhbmRlc3RlY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBEV0NERFIyMU1DVEwgLSBTeW5vcHN5cyBEV0MgRERSMi9ERFIxIE1lbW9yeSBDb250cm9sbGVyCisgKi8KKyNpZm5kZWYgX19EV0NERFIyMU1DVExfSAorI2RlZmluZSBfX0RXQ0REUjIxTUNUTF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgZHdjZGRyMjFtY3RsIHsKKwl1bnNpZ25lZCBpbnQJY2NyOwkJLyogQ29udHJvbGxlciBDb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgaW50CWRjcjsJCS8qIERSQU0gQ29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGludAlpb2NyOwkJLyogSS9PIENvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJY3NyOwkJLyogQ29udHJvbGxlciBTdGF0dXMgKi8KKwl1bnNpZ25lZCBpbnQJZHJyOwkJLyogRFJBTSByZWZyZXNoICovCisJdW5zaWduZWQgaW50CXRwcjA7CQkvKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyAwICovCisJdW5zaWduZWQgaW50CXRwcjE7CQkvKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyAxICovCisJdW5zaWduZWQgaW50CXRwcjI7CQkvKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyAyICovCisJdW5zaWduZWQgaW50CWdkbGxjcjsJCS8qIEdsb2JhbCBETEwgQ29udHJvbCAqLworCXVuc2lnbmVkIGludAlkbGxjclsxMF07CS8qIERMTCBDb250cm9sICovCisJdW5zaWduZWQgaW50CXJzbHJbNF07CS8qIFJhbmsgU3lzdGVtIExhbnRlbmN5ICovCisJdW5zaWduZWQgaW50CXJkZ3JbNF07CS8qIFJhbmsgRFFTIEdhdGluZyAqLworCXVuc2lnbmVkIGludAlkcXRyWzldOwkvKiBEUSBUaW1pbmcgKi8KKwl1bnNpZ25lZCBpbnQJZHFzdHI7CQkvKiBEUVMgVGltaW5nICovCisJdW5zaWduZWQgaW50CWRxc2J0cjsJCS8qIERRU19iIFRpbWluZyAqLworCXVuc2lnbmVkIGludAlvZHRjcjsJCS8qIE9EVCBDb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgaW50CWR0clsyXTsJCS8qIERhdGEgVHJhaW5pbmcgKi8KKwl1bnNpZ25lZCBpbnQJZHRhcjsJCS8qIERhdGEgVHJhaW5pbmcgQWRkcmVzcyAqLworCXVuc2lnbmVkIGludAlyc3ZlZFs4Ml07CS8qIFJlc2VydmVkICovCisJdW5zaWduZWQgaW50CW1yOwkJLyogTW9kZSBSZWdpc3RlciAqLworCXVuc2lnbmVkIGludAllbXI7CQkvKiBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50CWVtcjI7CQkvKiBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyIDIgKi8KKwl1bnNpZ25lZCBpbnQJZW1yMzsJCS8qIEV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIgMyAqLworCXVuc2lnbmVkIGludAlocGNyWzMyXTsJLyogSG9zdCBQb3J0IENvbmZpZ3VyYXJpb24gKi8KKwl1bnNpZ25lZCBpbnQJcHFjcls4XTsJLyogUHJpb3JpdHkgUXVldWUgQ29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGludAltbWdjcjsJCS8qIE1lbW9yeSBNYW5hZ2VyIEdlbmVyYWwgQ29uZmlnICovCit9OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogQ29udHJvbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9FQ0NFTih4KQkoKHgpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DQ1JfTk9NUldSKHgpCSgoeCkgPDwgMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9IT1NURU4oeCkJKCh4KSA8PCAyKQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX1hCSVNDKHgpCSgoeCkgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9OT0FQRCh4KQkoKHgpIDw8IDQpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DQ1JfUlJCKHgpCQkoKHgpIDw8IDEzKQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0RRU0NGRyh4KQkoKHgpIDw8IDE0KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0RGVExNKHgpCSgoKHgpICYgMHgzKSA8PCAxNSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9ERlRDTVAoeCkJKCh4KSA8PCAxNykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9GTFVTSCh4KQkoKHgpIDw8IDI3KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0lUTVJTVCh4KQkoKHgpIDw8IDI4KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0lCKHgpCQkoKHgpIDw8IDI5KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0RUVCh4KQkJKCh4KSA8PCAzMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9JVCh4KQkJKCh4KSA8PCAzMSkKKworLyoKKyAqIERSQU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfRERSTUQoeCkJKCh4KSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRENSX0RJTyh4KQkJKCgoeCkgJiAweDMpIDw8IDEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfRFNJWkUoeCkJKCgoeCkgJiAweDcpIDw8IDMpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfU0lPKHgpCQkoKCh4KSAmIDB4NykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RDUl9QSU8oeCkJCSgoeCkgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RDUl9SQU5LUyh4KQkoKCh4KSAmIDB4MykgPDwgMTApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfUk5LQUxMKHgpCSgoeCkgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfQU1BUCh4KQkoKCh4KSAmIDB4MykgPDwgMTMpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfUkFOSyh4KQkoKCh4KSAmIDB4MykgPDwgMjUpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfQ01EKHgpCQkoKCh4KSAmIDB4ZikgPDwgMjcpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfRVhFKHgpCQkoKHgpIDw8IDMxKQorCisvKgorICogSS9PIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfSU9DUl9SVFQoeCkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX0RTKHgpCQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0lPQ1JfVEVTVEVOKHgpCSgoeCkgPDwgMHg4KQorI2RlZmluZSBEV0NERFIyMU1DVExfSU9DUl9SVFRPSCh4KQkoKCh4KSAmIDB4NykgPDwgMjYpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX1JUVE9FKHgpCSgoeCkgPDwgMjkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX0RRUlRUKHgpCSgoeCkgPDwgMzApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX0RRU1JUVCh4KQkoKHgpIDw8IDMxKQorCisvKgorICogQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfQ1NSX0RSSUZUKHgpCSgoKHgpICYgMHgzZmYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DU1JfREZURVJSKHgpCSgoeCkgPDwgMTgpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DU1JfRUNDRVJSKHgpCSgoeCkgPDwgMTkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DU1JfRFRFUlIoeCkJKCh4KSA8PCAyMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NTUl9EVElFUlIoeCkJKCh4KSA8PCAyMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NTUl9FQ0NTRUMoeCkJKCh4KSA8PCAyMikKKworLyoKKyAqIERSQU0gUmVmcmVzaCBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUlJfVFJGQyh4KQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUlJfVFJGUFJEKHgpCSgoKHgpICYgMHhmZmZmKSA8PCA4KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFJSX1JGQlVSU1QoeCkJKCgoeCkgJiAweGYpIDw8IDI0KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFJSX1JEKHgpCQkoKHgpIDw8IDMxKQorCisvKgorICogU0RSQU0gVGltaW5nIFBhcmFtZXRlcnMgUmVnaXN0ZXIgMAorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RNUkQoeCkJKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSVFAoeCkJKCgoeCkgJiAweDcpIDw8IDIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RXVFIoeCkJKCgoeCkgJiAweDcpIDw8IDUpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSUCh4KQkoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjBfVFJDRCh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSQVMoeCkJKCgoeCkgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjBfVFJSRCh4KQkoKCh4KSAmIDB4ZikgPDwgMjEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSQyh4KQkoKCh4KSAmIDB4M2YpIDw8IDI1KQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMF9UQ0NEKHgpCSgoeCkgPDwgMzEpCisKKy8qCisgKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyBSZWdpc3RlciAxCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjFfVEFPTkQoeCkJKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIxX1RSVFcoeCkJKCh4KSA8PCAyKQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9URkFXKHgpCSgoKHgpICYgMHgzZikgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjFfVFJOS1JUUih4KQkoKCh4KSAmIDB4MykgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIxX1RSTktXVFcoeCkJKCgoeCkgJiAweDMpIDw8IDE0KQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9YQ0woeCkJKCgoeCkgJiAweGYpIDw8IDIzKQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9YV1IoeCkJKCgoeCkgJiAweGYpIDw8IDI3KQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9YVFAoeCkJKCh4KSA8PCAzMSkKKworLyoKKyAqIFNEUkFNIFRpbWluZyBQYXJhbWV0ZXJzIFJlZ2lzdGVyIDIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMl9UWFMoeCkJKCgoeCkgJiAweDNmZikgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjJfVFhQKHgpCSgoKHgpICYgMHgxZikgPDwgMTApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIyX1RDS0UoeCkJKCgoeCkgJiAweGYpIDw8IDE1KQorCisvKgorICogR2xvYmFsIERMTCBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0dETExDUl9EUkVTKHgpCSgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX0lQVU1QKHgpCSgoKHgpICYgMHg3KSA8PCAyKQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX1RFU1RFTih4KQkoKHgpIDw8IDUpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9HRExMQ1JfRFRDKHgpCSgoKHgpICYgMHg3KSA8PCA2KQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX0FUQyh4KQkoKCh4KSAmIDB4MykgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0dETExDUl9URVNUU1coeCkJKCh4KSA8PCAxMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0dETExDUl9NQklBUyh4KQkoKCh4KSAmIDB4ZmYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX1NCSUFTKHgpCSgoKHgpICYgMHhmZikgPDwgMjApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9HRExMQ1JfTE9DS0RFVCh4KQkoKHgpIDw8IDI5KQorCisvKgorICogRExMIENvbnRyb2wgUmVnaXN0ZXIgMC05CisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX1NGQkRMWSh4KQkoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX1NGV0RMWSh4KQkoKCh4KSAmIDB4NykgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX01GQkRMWSh4KQkoKCh4KSAmIDB4NykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX01GV0RMWSh4KQkoKCh4KSAmIDB4NykgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX1NTVEFSVCh4KQkoKCh4KSAmIDB4MykgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9ETExDUl9QSEFTRSh4KQkoKCh4KSAmIDB4ZikgPDwgMTQpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9ETExDUl9BVEVTVEVOKHgpCSgoeCkgPDwgMTgpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9ETExDUl9EUlNWRCh4KQkoKHgpIDw8IDE5KQorI2RlZmluZSBEV0NERFIyMU1DVExfRExMQ1JfREQoeCkJKCh4KSA8PCAzMSkKKworLyoKKyAqIFJhbmsgU3lzdGVtIExhbnRlbmN5IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JTTFJfU0wwKHgpCSgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDEoeCkJKCgoeCkgJiAweDcpIDw8IDMpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9SU0xSX1NMMih4KQkoKCh4KSAmIDB4NykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JTTFJfU0wzKHgpCSgoKHgpICYgMHg3KSA8PCA5KQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDQoeCkJKCgoeCkgJiAweDcpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDUoeCkJKCgoeCkgJiAweDcpIDw8IDE1KQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDYoeCkJKCgoeCkgJiAweDcpIDw8IDE4KQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDcoeCkJKCgoeCkgJiAweDcpIDw8IDIxKQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDgoeCkJKCgoeCkgJiAweDcpIDw8IDI0KQorCisvKgorICogUmFuayBEUVMgR2F0aW5nIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMCh4KQkoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMSh4KQkoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMih4KQkoKCh4KSAmIDB4MykgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMyh4KQkoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMNCh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMNSh4KQkoKCh4KSAmIDB4MykgPDwgMTApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9SREdSX0RRU1NFTDYoeCkJKCgoeCkgJiAweDMpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfUkRHUl9EUVNTRUw3KHgpCSgoKHgpICYgMHgzKSA8PCAxNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMOCh4KQkoKCh4KSAmIDB4MykgPDwgMTYpCisKKy8qCisgKiBEUSBUaW1pbmcgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTAoeCkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVRSX0RRRExZMSh4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRVFJfRFFETFkyKHgpCSgoKHgpICYgMHhmKSA8PCA4KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTMoeCkJKCgoeCkgJiAweGYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTQoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTUoeCkJKCgoeCkgJiAweGYpIDw8IDIwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTYoeCkJKCgoeCkgJiAweGYpIDw8IDI0KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTcoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorCisvKgorICogRFFTIFRpbWluZyBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFkwKHgpCSgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTVFJfRFFTRExZMSh4KQkoKCh4KSAmIDB4NykgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU1RSX0RRU0RMWTIoeCkJKCgoeCkgJiAweDcpIDw8IDYpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFkzKHgpCSgoKHgpICYgMHg3KSA8PCA5KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTVFJfRFFTRExZNCh4KQkoKCh4KSAmIDB4NykgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFk1KHgpCSgoKHgpICYgMHg3KSA8PCAxNSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU1RSX0RRU0RMWTYoeCkJKCgoeCkgJiAweDcpIDw8IDE4KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTVFJfRFFTRExZNyh4KQkoKCh4KSAmIDB4NykgPDwgMjEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFk4KHgpCSgoKHgpICYgMHg3KSA8PCAyNCkKKworLyoKKyAqIERRU19iIChEUVNCVFIpIFRpbWluZyBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNCVFJfRFFTRExZMCh4KQkoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFkxKHgpCSgoKHgpICYgMHg3KSA8PCAzKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTQlRSX0RRU0RMWTIoeCkJKCgoeCkgJiAweDcpIDw8IDYpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNCVFJfRFFTRExZMyh4KQkoKCh4KSAmIDB4NykgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk0KHgpCSgoKHgpICYgMHg3KSA8PCAxMikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk1KHgpCSgoKHgpICYgMHg3KSA8PCAxNSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk2KHgpCSgoKHgpICYgMHg3KSA8PCAxOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk3KHgpCSgoKHgpICYgMHg3KSA8PCAyMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk4KHgpCSgoKHgpICYgMHg3KSA8PCAyNCkKKworLyoKKyAqIE9EVCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMCh4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMSh4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMih4KQkoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMyh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9PRFRDUl9XRE9EVDAoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBEV0NERFIyMU1DVExfT0RUQ1JfV0RPRFQxKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1dET0RUMih4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9PRFRDUl9XRE9EVDMoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorCisvKgorICogRGF0YSBUcmFpbmluZyBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EVFIwX0RUQllURTAoeCkJKCgoeCkgJiAweGZmKSA8PCAwKQkvKiBkZWY6IDB4MTEgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUUjBfRFRCWVRFMSh4KQkoKCh4KSAmIDB4ZmYpIDw8IDgpCS8qIGRlZjogMHhlZSAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMF9EVEJZVEUyKHgpCSgoKHgpICYgMHhmZikgPDwgMTYpCS8qIGRlZjogMHgyMiAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMF9EVEJZVEUzKHgpCSgoKHgpICYgMHhmZikgPDwgMjQpCS8qIGRlZjogMHhkZCAqLworCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EVFIxX0RUQllURTQoeCkJKCgoeCkgJiAweGZmKSA8PCAwKQkvKiBkZWY6IDB4NDQgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUUjFfRFRCWVRFNSh4KQkoKCh4KSAmIDB4ZmYpIDw8IDgpCS8qIGRlZjogMHhiYiAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMV9EVEJZVEU2KHgpCSgoKHgpICYgMHhmZikgPDwgMTYpCS8qIGRlZjogMHg4OCAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMV9EVEJZVEU3KHgpCSgoKHgpICYgMHhmZikgPDwgMjQpCS8qIGRlZjogMHg3NyAqLworCisvKgorICogRGF0YSBUcmFpbmluZyBBZGRyZXNzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUQVJfRFRDT0woeCkJKCgoeCkgJiAweGZmZikgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUQVJfRFRST1coeCkJKCgoeCkgJiAweGZmZmYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFRBUl9EVEJBTksoeCkJKCgoeCkgJiAweDcpIDw8IDI4KQorCisvKgorICogTW9kZSBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9CTCh4KQkJKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9CVCh4KQkJKCh4KSA8PCAzKQorI2RlZmluZSBEV0NERFIyMU1DVExfTVJfQ0woeCkJCSgoKHgpICYgMHg3KSA8PCA0KQorI2RlZmluZSBEV0NERFIyMU1DVExfTVJfVE0oeCkJCSgoeCkgPDwgNykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX01SX0RSKHgpCQkoKHgpIDw8IDgpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9XUih4KQkJKCgoeCkgJiAweDcpIDw8IDkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9QRCh4KQkJKCh4KSA8PCAxMikKKworLyoKKyAqIEV4dGVuZGVkIE1vZGUgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX0RFKHgpCQkoKHgpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfT0RTKHgpCQkoKHgpIDw8IDEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfUlRUMih4KQkoKHgpIDw8IDIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfQUwoeCkJCSgoKHgpICYgMHg3KSA8PCAzKQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX1JUVDYoeCkJKCh4KSA8PCA2KQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX09DRCh4KQkJKCgoeCkgJiAweDcpIDw8IDcpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfRFFTKHgpCQkoKHgpIDw8IDEwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX1JEUVMoeCkJKCh4KSA8PCAxMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUl9PRSh4KQkJKCh4KSA8PCAxMikKKworI2RlZmluZSBFTVJfUlRUMih4KQkJCURXQ0REUjIxTUNUTF9FTVJfUlRUMih4KQorI2RlZmluZSBFTVJfUlRUNih4KQkJCURXQ0REUjIxTUNUTF9FTVJfUlRUNih4KQorCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfUlRUX0RJU0FCTEVECShFTVJfUlRUNigwKSB8IEVNUl9SVFQyKDApKQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX1JUVF83NQkJKEVNUl9SVFQ2KDApIHwgRU1SX1JUVDIoMSkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfUlRUXzE1MAkoRU1SX1JUVDYoMSkgfCBFTVJfUlRUMigwKSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUl9SVFRfNTAJCShFTVJfUlRUNigxKSB8IEVNUl9SVFQyKDEpKQorCisvKgorICogRXh0ZW5kZWQgTW9kZSByZWdpc3RlciAyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUjJfUEFTUih4KQkoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUjJfRENDKHgpCSgoeCkgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUjJfU1JGKHgpCSgoeCkgPDwgNykKKworLyoKKyAqIEV4dGVuZGVkIE1vZGUgcmVnaXN0ZXIgMzogWzE1OjBdIHJlc2VydmVkIGZvciBKRURFQy4KKyAqLworCisvKgorICogSG9zdCBwb3J0IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMC0zMQorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9IUENSX0hQQkwoeCkJKCgoeCkgJiAweGYpIDw8IDApCisKKy8qCisgKiBQcmlvcml0eSBRdWV1ZSBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAtNworICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9IUENSX1RPVVQoeCkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9IUENSX1RPVVRYKHgpCSgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9MUFFTKHgpCSgoKHgpICYgMHgzKSA8PCAxMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0hQQ1JfUFFCTCh4KQkoKCh4KSAmIDB4ZmYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9TV0FJVCh4KQkoKCh4KSAmIDB4MWYpIDw8IDIwKQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9JTlRSUFQoeCkJKCgoeCkgJiAweDcpIDw8IDI1KQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9BUFFTKHgpCSgoeCkgPDwgMjgpCisKKy8qCisgKiBNZW1vcnkgTWFuYWdlciBHZW5lcmFsIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfTU1HQ1JfVUhQUCh4KQkoKCh4KSAmIDB4MykgPDwgMCkKKworI2VuZGlmCS8qIF9fRFdDRERSMjFNQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW9fZm9udC5oIGIvaW5jbHVkZS92aWRlb19mb250LmgKaW5kZXggNzA2ZTE4NS4uNDc5NTdjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlb19mb250LmgKKysrIGIvaW5jbHVkZS92aWRlb19mb250LmgKQEAgLTI5LDQ2MTYgKzI5LDQgQEAKICNkZWZpbmUgVklERU9fRk9OVF9IRUlHSFQJMTYKICNkZWZpbmUgVklERU9fRk9OVF9TSVpFCQkoVklERU9fRk9OVF9DSEFSUyAqIFZJREVPX0ZPTlRfSEVJR0hUKQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciB2aWRlb19mb250ZGF0YVtWSURFT19GT05UX1NJWkVdID0gewotCi0JLyogMCAweDAwICdeQCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMSAweDAxICdeQScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDgxLCAvKiAxMDAwMDAwMSAqLwotCTB4YTUsIC8qIDEwMTAwMTAxICovCi0JMHg4MSwgLyogMTAwMDAwMDEgKi8KLQkweDgxLCAvKiAxMDAwMDAwMSAqLwotCTB4YmQsIC8qIDEwMTExMTAxICovCi0JMHg5OSwgLyogMTAwMTEwMDEgKi8KLQkweDgxLCAvKiAxMDAwMDAwMSAqLwotCTB4ODEsIC8qIDEwMDAwMDAxICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMiAweDAyICdeQicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZGIsIC8qIDExMDExMDExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4YzMsIC8qIDExMDAwMDExICovCi0JMHhlNywgLyogMTExMDAxMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMyAweDAzICdeQycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNCAweDA0ICdeRCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNSAweDA1ICdeRScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweGU3LCAvKiAxMTEwMDExMSAqLwotCTB4ZTcsIC8qIDExMTAwMTExICovCi0JMHhlNywgLyogMTExMDAxMTEgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNiAweDA2ICdeRicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNyAweDA3ICdeRycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogOCAweDA4ICdeSCcgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGU3LCAvKiAxMTEwMDExMSAqLwotCTB4YzMsIC8qIDExMDAwMDExICovCi0JMHhjMywgLyogMTEwMDAwMTEgKi8KLQkweGU3LCAvKiAxMTEwMDExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCi0JLyogOSAweDA5ICdeSScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NDIsIC8qIDAxMDAwMDEwICovCi0JMHg0MiwgLyogMDEwMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTAgMHgwYSAnXkonICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4YzMsIC8qIDExMDAwMDExICovCi0JMHg5OSwgLyogMTAwMTEwMDEgKi8KLQkweGJkLCAvKiAxMDExMTEwMSAqLwotCTB4YmQsIC8qIDEwMTExMTAxICovCi0JMHg5OSwgLyogMTAwMTEwMDEgKi8KLQkweGMzLCAvKiAxMTAwMDAxMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQotCS8qIDExIDB4MGIgJ15LJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFlLCAvKiAwMDAxMTExMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgxYSwgLyogMDAwMTEwMTAgKi8KLQkweDMyLCAvKiAwMDExMDAxMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMiAweDBjICdeTCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTMgMHgwZCAnXk0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2YsIC8qIDAwMTExMTExICovCi0JMHgzMywgLyogMDAxMTAwMTEgKi8KLQkweDNmLCAvKiAwMDExMTExMSAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0IDB4MGUgJ15OJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdmLCAvKiAwMTExMTExMSAqLwotCTB4NjMsIC8qIDAxMTAwMDExICovCi0JMHg3ZiwgLyogMDExMTExMTEgKi8KLQkweDYzLCAvKiAwMTEwMDAxMSAqLwotCTB4NjMsIC8qIDAxMTAwMDExICovCi0JMHg2MywgLyogMDExMDAwMTEgKi8KLQkweDYzLCAvKiAwMTEwMDAxMSAqLwotCTB4NjcsIC8qIDAxMTAwMTExICovCi0JMHhlNywgLyogMTExMDAxMTEgKi8KLQkweGU2LCAvKiAxMTEwMDExMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNSAweDBmICdeTycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4ZTcsIC8qIDExMTAwMTExICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTYgMHgxMCAnXlAnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDgwLCAvKiAxMDAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4ODAsIC8qIDEwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE3IDB4MTEgJ15RJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMiwgLyogMDAwMDAwMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgxZSwgLyogMDAwMTExMTAgKi8KLQkweDNlLCAvKiAwMDExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgzZSwgLyogMDAxMTExMTAgKi8KLQkweDFlLCAvKiAwMDAxMTExMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDAyLCAvKiAwMDAwMDAxMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOCAweDEyICdeUicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTkgMHgxMyAnXlMnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIwIDB4MTQgJ15UJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdmLCAvKiAwMTExMTExMSAqLwotCTB4ZGIsIC8qIDExMDExMDExICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4N2IsIC8qIDAxMTExMDExICovCi0JMHgxYiwgLyogMDAwMTEwMTEgKi8KLQkweDFiLCAvKiAwMDAxMTAxMSAqLwotCTB4MWIsIC8qIDAwMDExMDExICovCi0JMHgxYiwgLyogMDAwMTEwMTEgKi8KLQkweDFiLCAvKiAwMDAxMTAxMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMSAweDE1ICdeVScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjIgMHgxNiAnXlYnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzIDB4MTcgJ15XJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNCAweDE4ICdeWCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjUgMHgxOSAnXlknICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI2IDB4MWEgJ15aJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNyAweDFiICdeWycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjggMHgxYyAnXlwnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI5IDB4MWQgJ15dJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDI4LCAvKiAwMDEwMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MjgsIC8qIDAwMTAxMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAzMCAweDFlICdeXicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMzEgMHgxZiAnXl8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDEwLCAvKiAwMDAxMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDMyIDB4MjAgJyAnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDMzIDB4MjEgJyEnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM0IDB4MjIgJyInICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDI0LCAvKiAwMDEwMDEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM1IDB4MjMgJyMnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM2IDB4MjQgJyQnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHg4NiwgLyogMTAwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM3IDB4MjUgJyUnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ODYsIC8qIDEwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM4IDB4MjYgJyYnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM5IDB4MjcgJycnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQwIDB4MjggJygnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQxIDB4MjkgJyknICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQyIDB4MmEgJyonICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQzIDB4MmIgJysnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ0IDB4MmMgJywnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ1IDB4MmQgJy0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ2IDB4MmUgJy4nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ3IDB4MmYgJy8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAyLCAvKiAwMDAwMDAxMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4ODAsIC8qIDEwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ4IDB4MzAgJzAnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ5IDB4MzEgJzEnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUwIDB4MzIgJzInICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUxIDB4MzMgJzMnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUyIDB4MzQgJzQnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxYywgLyogMDAwMTExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MWUsIC8qIDAwMDExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUzIDB4MzUgJzUnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhmYywgLyogMTExMTExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU0IDB4MzYgJzYnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhmYywgLyogMTExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU1IDB4MzcgJzcnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU2IDB4MzggJzgnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU3IDB4MzkgJzknICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU4IDB4M2EgJzonICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU5IDB4M2IgJzsnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYwIDB4M2MgJzwnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYxIDB4M2QgJz0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYyIDB4M2UgJz4nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYzIDB4M2YgJz8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY0IDB4NDAgJ0AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkZSwgLyogMTEwMTExMTAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4ZGUsIC8qIDExMDExMTEwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY1IDB4NDEgJ0EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY2IDB4NDIgJ0InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY3IDB4NDMgJ0MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMiwgLyogMTEwMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY4IDB4NDQgJ0QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY5IDB4NDUgJ0UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDYyLCAvKiAwMTEwMDAxMCAqLwotCTB4NjgsIC8qIDAxMTAxMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDY4LCAvKiAwMTEwMTAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDcwIDB4NDYgJ0YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDYyLCAvKiAwMTEwMDAxMCAqLwotCTB4NjgsIC8qIDAxMTAxMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDY4LCAvKiAwMTEwMTAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDcxIDB4NDcgJ0cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2EsIC8qIDAwMTExMDEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDcyIDB4NDggJ0gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDczIDB4NDkgJ0knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc0IDB4NGEgJ0onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWUsIC8qIDAwMDExMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc1IDB4NGIgJ0snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZTYsIC8qIDExMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZTYsIC8qIDExMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc2IDB4NGMgJ0wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc3IDB4NGQgJ00nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhlZSwgLyogMTExMDExMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc4IDB4NGUgJ04nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhlNiwgLyogMTExMDAxMTAgKi8KLQkweGY2LCAvKiAxMTExMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhkZSwgLyogMTEwMTExMTAgKi8KLQkweGNlLCAvKiAxMTAwMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc5IDB4NGYgJ08nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgwIDB4NTAgJ1AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgxIDB4NTEgJ1EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgyIDB4NTIgJ1InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZTYsIC8qIDExMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgzIDB4NTMgJ1MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg0IDB4NTQgJ1QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDVhLCAvKiAwMTAxMTAxMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg1IDB4NTUgJ1UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg2IDB4NTYgJ1YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg3IDB4NTcgJ1cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4ZDYsIC8qIDExMDEwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGVlLCAvKiAxMTEwMTExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg4IDB4NTggJ1gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg5IDB4NTkgJ1knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkwIDB4NWEgJ1onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDg2LCAvKiAxMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhjMiwgLyogMTEwMDAwMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkxIDB4NWIgJ1snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkyIDB4NWMgJ1wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg4MCwgLyogMTAwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MWMsIC8qIDAwMDExMTAwICovCi0JMHgwZSwgLyogMDAwMDExMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDIsIC8qIDAwMDAwMDEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkzIDB4NWQgJ10nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk0IDB4NWUgJ14nICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk1IDB4NWYgJ18nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk2IDB4NjAgJ2AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk3IDB4NjEgJ2EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk4IDB4NjIgJ2InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk5IDB4NjMgJ2MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwMCAweDY0ICdkJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFjLCAvKiAwMDAxMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMDEgMHg2NSAnZScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTAyIDB4NjYgJ2YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWMsIC8qIDAwMDExMTAwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDMyLCAvKiAwMDExMDAxMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwMyAweDY3ICdnJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMDQgMHg2OCAnaCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHhlNiwgLyogMTExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTA1IDB4NjkgJ2knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwNiAweDZhICdqJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMDcgMHg2YiAnaycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHhlNiwgLyogMTExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTA4IDB4NmMgJ2wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwOSAweDZkICdtJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGVjLCAvKiAxMTEwMTEwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4ZDYsIC8qIDExMDEwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTAgMHg2ZSAnbicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTExIDB4NmYgJ28nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDExMiAweDcwICdwJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTMgMHg3MSAncScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxZSwgLyogMDAwMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTE0IDB4NzIgJ3InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDExNSAweDczICdzJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTYgMHg3NCAndCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHhmYywgLyogMTExMTExMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgxYywgLyogMDAwMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTE3IDB4NzUgJ3UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDExOCAweDc2ICd2JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTkgMHg3NyAndycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZDYsIC8qIDExMDEwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTIwIDB4NzggJ3gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEyMSAweDc5ICd5JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMjIgMHg3YSAneicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTIzIDB4N2IgJ3snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEyNCAweDdjICd8JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMjUgMHg3ZCAnfScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTI2IDB4N2UgJ34nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEyNyAweDdmICd/JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMjggMHg4MCAngCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4YzIsIC8qIDExMDAwMDEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4NzAsIC8qIDAxMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTI5IDB4ODEgJ4EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzMCAweDgyICeCJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMzEgMHg4MyAngycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTMyIDB4ODQgJ4QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzMyAweDg1ICeFJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMzQgMHg4NiAnhicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTM1IDB4ODcgJ4cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDcwLCAvKiAwMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzNiAweDg4ICeIJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMzcgMHg4OSAniScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTM4IDB4OGEgJ4onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzOSAweDhiICeLJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDAgMHg4YyAnjCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTQxIDB4OGQgJ40nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0MiAweDhlICeOJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDMgMHg4ZiAnjycgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDEwLCAvKiAwMDAxMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTQ0IDB4OTAgJ5AnICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjIsIC8qIDAxMTAwMDEwICovCi0JMHg2OCwgLyogMDExMDEwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4NjgsIC8qIDAxMTAxMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0NSAweDkxICeRJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGVjLCAvKiAxMTEwMTEwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweDZlLCAvKiAwMTEwMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDYgMHg5MiAnkicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzZSwgLyogMDAxMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjZSwgLyogMTEwMDExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTQ3IDB4OTMgJ5MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDEwLCAvKiAwMDAxMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0OCAweDk0ICeUJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDkgMHg5NSAnlScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTUwIDB4OTYgJ5YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE1MSAweDk3ICeXJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNTIgMHg5OCAnmCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTUzIDB4OTkgJ5knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE1NCAweDlhICeaJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNTUgMHg5YiAnmycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTU2IDB4OWMgJ5wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2NCwgLyogMDExMDAxMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGU2LCAvKiAxMTEwMDExMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE1NyAweDlkICedJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNTggMHg5ZSAnnicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHhjNCwgLyogMTEwMDAxMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4ZGUsIC8qIDExMDExMTEwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTU5IDB4OWYgJ58nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MWIsIC8qIDAwMDExMDExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4NzAsIC8qIDAxMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2MCAweGEwICegJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNjEgMHhhMSAnoScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTYyIDB4YTIgJ6InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2MyAweGEzICejJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNjQgMHhhNCAnpCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTY1IDB4YTUgJ6UnICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGU2LCAvKiAxMTEwMDExMCAqLwotCTB4ZjYsIC8qIDExMTEwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4Y2UsIC8qIDExMDAxMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2NiAweGE2ICemJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDNlLCAvKiAwMDExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNjcgMHhhNyAnpycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTY4IDB4YTggJ6gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2OSAweGE5ICepJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNzAgMHhhYSAnqicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTcxIDB4YWIgJ6snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweDg2LCAvKiAxMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNlLCAvKiAwMDExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE3MiAweGFjICesJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGUwLCAvKiAxMTEwMDAwMCAqLwotCTB4NjIsIC8qIDAxMTAwMDEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4Y2UsIC8qIDExMDAxMTEwICovCi0JMHg5YSwgLyogMTAwMTEwMTAgKi8KLQkweDNmLCAvKiAwMDExMTExMSAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNzMgMHhhZCAnrScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTc0IDB4YWUgJ64nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE3NSAweGFmICevJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNzYgMHhiMCAnsCcgKi8KLQkweDExLCAvKiAwMDAxMDAwMSAqLwotCTB4NDQsIC8qIDAxMDAwMTAwICovCi0JMHgxMSwgLyogMDAwMTAwMDEgKi8KLQkweDQ0LCAvKiAwMTAwMDEwMCAqLwotCTB4MTEsIC8qIDAwMDEwMDAxICovCi0JMHg0NCwgLyogMDEwMDAxMDAgKi8KLQkweDExLCAvKiAwMDAxMDAwMSAqLwotCTB4NDQsIC8qIDAxMDAwMTAwICovCi0JMHgxMSwgLyogMDAwMTAwMDEgKi8KLQkweDQ0LCAvKiAwMTAwMDEwMCAqLwotCTB4MTEsIC8qIDAwMDEwMDAxICovCi0JMHg0NCwgLyogMDEwMDAxMDAgKi8KLQkweDExLCAvKiAwMDAxMDAwMSAqLwotCTB4NDQsIC8qIDAxMDAwMTAwICovCi0JMHgxMSwgLyogMDAwMTAwMDEgKi8KLQkweDQ0LCAvKiAwMTAwMDEwMCAqLwotCi0JLyogMTc3IDB4YjEgJ7EnICovCi0JMHg1NSwgLyogMDEwMTAxMDEgKi8KLQkweGFhLCAvKiAxMDEwMTAxMCAqLwotCTB4NTUsIC8qIDAxMDEwMTAxICovCi0JMHhhYSwgLyogMTAxMDEwMTAgKi8KLQkweDU1LCAvKiAwMTAxMDEwMSAqLwotCTB4YWEsIC8qIDEwMTAxMDEwICovCi0JMHg1NSwgLyogMDEwMTAxMDEgKi8KLQkweGFhLCAvKiAxMDEwMTAxMCAqLwotCTB4NTUsIC8qIDAxMDEwMTAxICovCi0JMHhhYSwgLyogMTAxMDEwMTAgKi8KLQkweDU1LCAvKiAwMTAxMDEwMSAqLwotCTB4YWEsIC8qIDEwMTAxMDEwICovCi0JMHg1NSwgLyogMDEwMTAxMDEgKi8KLQkweGFhLCAvKiAxMDEwMTAxMCAqLwotCTB4NTUsIC8qIDAxMDEwMTAxICovCi0JMHhhYSwgLyogMTAxMDEwMTAgKi8KLQotCS8qIDE3OCAweGIyICeyJyAqLwotCTB4ZGQsIC8qIDExMDExMTAxICovCi0JMHg3NywgLyogMDExMTAxMTEgKi8KLQkweGRkLCAvKiAxMTAxMTEwMSAqLwotCTB4NzcsIC8qIDAxMTEwMTExICovCi0JMHhkZCwgLyogMTEwMTExMDEgKi8KLQkweDc3LCAvKiAwMTExMDExMSAqLwotCTB4ZGQsIC8qIDExMDExMTAxICovCi0JMHg3NywgLyogMDExMTAxMTEgKi8KLQkweGRkLCAvKiAxMTAxMTEwMSAqLwotCTB4NzcsIC8qIDAxMTEwMTExICovCi0JMHhkZCwgLyogMTEwMTExMDEgKi8KLQkweDc3LCAvKiAwMTExMDExMSAqLwotCTB4ZGQsIC8qIDExMDExMTAxICovCi0JMHg3NywgLyogMDExMTAxMTEgKi8KLQkweGRkLCAvKiAxMTAxMTEwMSAqLwotCTB4NzcsIC8qIDAxMTEwMTExICovCi0KLQkvKiAxNzkgMHhiMyAnsycgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTgwIDB4YjQgJ7QnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDE4MSAweGI1ICe1JyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0KLQkvKiAxODIgMHhiNiAnticgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4ZjYsIC8qIDExMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMTgzIDB4YjcgJ7cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDE4NCAweGI4ICe4JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0KLQkvKiAxODUgMHhiOSAnuScgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmNiwgLyogMTExMTAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4ZjYsIC8qIDExMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMTg2IDB4YmEgJ7onICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDE4NyAweGJiICe7JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHhmNiwgLyogMTExMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0KLQkvKiAxODggMHhiYyAnvCcgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmNiwgLyogMTExMTAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTg5IDB4YmQgJ70nICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE5MCAweGJlICe+JyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOTEgMHhiZiAnvycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTkyIDB4YzAgJ8AnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE5MyAweGMxICfBJyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOTQgMHhjMiAnwicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTk1IDB4YzMgJ8MnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDE5NiAweGM0ICfEJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOTcgMHhjNSAnxScgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTk4IDB4YzYgJ8YnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDE5OSAweGM3ICfHJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNywgLyogMDAxMTAxMTEgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0KLQkvKiAyMDAgMHhjOCAnyCcgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNywgLyogMDAxMTAxMTEgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4M2YsIC8qIDAwMTExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjAxIDB4YzkgJ8knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2YsIC8qIDAwMTExMTExICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDM3LCAvKiAwMDExMDExMSAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDIwMiAweGNhICfKJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweGY3LCAvKiAxMTExMDExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMDMgMHhjYiAnyycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjcsIC8qIDExMTEwMTExICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMjA0IDB4Y2MgJ8wnICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzcsIC8qIDAwMTEwMTExICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDM3LCAvKiAwMDExMDExMSAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDIwNSAweGNkICfNJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMDYgMHhjZSAnzicgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmNywgLyogMTExMTAxMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjcsIC8qIDExMTEwMTExICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMjA3IDB4Y2YgJ88nICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIwOCAweGQwICfQJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMDkgMHhkMSAn0ScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMjEwIDB4ZDIgJ9InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDIxMSAweGQzICfTJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzZiwgLyogMDAxMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMTIgMHhkNCAn1CcgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxZiwgLyogMDAwMTExMTEgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjEzIDB4ZDUgJ9UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDIxNCAweGQ2ICfWJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzZiwgLyogMDAxMTExMTEgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0KLQkvKiAyMTUgMHhkNyAn1ycgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMjE2IDB4ZDggJ9gnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDIxNyAweGQ5ICfZJyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMTggMHhkYSAn2icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMjE5IDB4ZGIgJ9snICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQotCS8qIDIyMCAweGRjICfcJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0KLQkvKiAyMjEgMHhkZCAn3ScgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCi0JLyogMjIyIDB4ZGUgJ94nICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQotCS8qIDIyMyAweGRmICffJyAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMjQgMHhlMCAn4CcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjI1IDB4ZTEgJ+EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIyNiAweGUyICfiJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMjcgMHhlMyAn4ycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjI4IDB4ZTQgJ+QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIyOSAweGU1ICflJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweDcwLCAvKiAwMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzAgMHhlNiAn5icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjMxIDB4ZTcgJ+cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzMiAweGU4ICfoJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzMgMHhlOSAn6ScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjM0IDB4ZWEgJ+onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZWUsIC8qIDExMTAxMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzNSAweGViICfrJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFlLCAvKiAwMDAxMTExMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4M2UsIC8qIDAwMTExMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzYgMHhlYyAn7CcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4ZGIsIC8qIDExMDExMDExICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjM3IDB4ZWQgJ+0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMywgLyogMDAwMDAwMTEgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4ZjMsIC8qIDExMTEwMDExICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzOCAweGVlICfuJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFjLCAvKiAwMDAxMTEwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDFjLCAvKiAwMDAxMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzkgMHhlZiAn7ycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQwIDB4ZjAgJ/AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI0MSAweGYxICfxJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNDIgMHhmMiAn8icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQzIDB4ZjMgJ/MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI0NCAweGY0ICf0JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MWIsIC8qIDAwMDExMDExICovCi0JMHgxYiwgLyogMDAwMTEwMTEgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0KLQkvKiAyNDUgMHhmNSAn9ScgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweDcwLCAvKiAwMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQ2IDB4ZjYgJ/YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI0NyAweGY3ICf3JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNDggMHhmOCAn+CcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQ5IDB4ZjkgJ/knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI1MCAweGZhICf6JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNTEgMHhmYiAn+ycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4ZWMsIC8qIDExMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxYywgLyogMDAwMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjUyIDB4ZmMgJ/wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI1MyAweGZkICf9JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMyLCAvKiAwMDExMDAxMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNTQgMHhmZSAn/icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjU1IDB4ZmYgJ/8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotfTsKLQotI2VuZGlmCisjZW5kaWYgLyogX1ZJREVPX0ZPTlRfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvX2ZvbnRfZGF0YS5oIGIvaW5jbHVkZS92aWRlb19mb250X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2E4YjliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlb19mb250X2RhdGEuaApAQCAtMCwwICsxLDQ2MzkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIFBhb2xvIFNjYWZmYXJkaSwgQUlSVkVOVCBTQU0gcy5wLmEgLSBSSU1JTkkoSVRBTFkpLCBhcnNlbmlvQHRpbi5pdAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX1ZJREVPX0ZPTlRfREFUQV8KKyNkZWZpbmUgX1ZJREVPX0ZPTlRfREFUQV8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdmlkZW9fZm9udGRhdGFbVklERU9fRk9OVF9TSVpFXSA9IHsKKworCS8qIDAgMHgwMCAnXkAnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEgMHgwMSAnXkEnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg4MSwgLyogMTAwMDAwMDEgKi8KKwkweGE1LCAvKiAxMDEwMDEwMSAqLworCTB4ODEsIC8qIDEwMDAwMDAxICovCisJMHg4MSwgLyogMTAwMDAwMDEgKi8KKwkweGJkLCAvKiAxMDExMTEwMSAqLworCTB4OTksIC8qIDEwMDExMDAxICovCisJMHg4MSwgLyogMTAwMDAwMDEgKi8KKwkweDgxLCAvKiAxMDAwMDAwMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIgMHgwMiAnXkInICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGRiLCAvKiAxMTAxMTAxMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGMzLCAvKiAxMTAwMDAxMSAqLworCTB4ZTcsIC8qIDExMTAwMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDMgMHgwMyAnXkMnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDQgMHgwNCAnXkQnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDUgMHgwNSAnXkUnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHhlNywgLyogMTExMDAxMTEgKi8KKwkweGU3LCAvKiAxMTEwMDExMSAqLworCTB4ZTcsIC8qIDExMTAwMTExICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDYgMHgwNiAnXkYnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDcgMHgwNyAnXkcnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDggMHgwOCAnXkgnICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhlNywgLyogMTExMDAxMTEgKi8KKwkweGMzLCAvKiAxMTAwMDAxMSAqLworCTB4YzMsIC8qIDExMDAwMDExICovCisJMHhlNywgLyogMTExMDAxMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKworCS8qIDkgMHgwOSAnXkknICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDQyLCAvKiAwMTAwMDAxMCAqLworCTB4NDIsIC8qIDAxMDAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwIDB4MGEgJ15KJyAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGMzLCAvKiAxMTAwMDAxMSAqLworCTB4OTksIC8qIDEwMDExMDAxICovCisJMHhiZCwgLyogMTAxMTExMDEgKi8KKwkweGJkLCAvKiAxMDExMTEwMSAqLworCTB4OTksIC8qIDEwMDExMDAxICovCisJMHhjMywgLyogMTEwMDAwMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisKKwkvKiAxMSAweDBiICdeSycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxZSwgLyogMDAwMTExMTAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MWEsIC8qIDAwMDExMDEwICovCisJMHgzMiwgLyogMDAxMTAwMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTIgMHgwYyAnXkwnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzIDB4MGQgJ15NJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNmLCAvKiAwMDExMTExMSAqLworCTB4MzMsIC8qIDAwMTEwMDExICovCisJMHgzZiwgLyogMDAxMTExMTEgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNCAweDBlICdeTicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZiwgLyogMDExMTExMTEgKi8KKwkweDYzLCAvKiAwMTEwMDAxMSAqLworCTB4N2YsIC8qIDAxMTExMTExICovCisJMHg2MywgLyogMDExMDAwMTEgKi8KKwkweDYzLCAvKiAwMTEwMDAxMSAqLworCTB4NjMsIC8qIDAxMTAwMDExICovCisJMHg2MywgLyogMDExMDAwMTEgKi8KKwkweDY3LCAvKiAwMTEwMDExMSAqLworCTB4ZTcsIC8qIDExMTAwMTExICovCisJMHhlNiwgLyogMTExMDAxMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTUgMHgwZiAnXk8nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweGU3LCAvKiAxMTEwMDExMSAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2IDB4MTAgJ15QJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg4MCwgLyogMTAwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDgwLCAvKiAxMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNyAweDExICdeUScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDIsIC8qIDAwMDAwMDEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MWUsIC8qIDAwMDExMTEwICovCisJMHgzZSwgLyogMDAxMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4M2UsIC8qIDAwMTExMTEwICovCisJMHgxZSwgLyogMDAwMTExMTAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwMiwgLyogMDAwMDAwMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTggMHgxMiAnXlInICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE5IDB4MTMgJ15TJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMCAweDE0ICdeVCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZiwgLyogMDExMTExMTEgKi8KKwkweGRiLCAvKiAxMTAxMTAxMSAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweDdiLCAvKiAwMTExMTAxMSAqLworCTB4MWIsIC8qIDAwMDExMDExICovCisJMHgxYiwgLyogMDAwMTEwMTEgKi8KKwkweDFiLCAvKiAwMDAxMTAxMSAqLworCTB4MWIsIC8qIDAwMDExMDExICovCisJMHgxYiwgLyogMDAwMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjEgMHgxNSAnXlUnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIyIDB4MTYgJ15WJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMyAweDE3ICdeVycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjQgMHgxOCAnXlgnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI1IDB4MTkgJ15ZJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNiAweDFhICdeWicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjcgMHgxYiAnXlsnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI4IDB4MWMgJ15cJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyOSAweDFkICdeXScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgyOCwgLyogMDAxMDEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDI4LCAvKiAwMDEwMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMzAgMHgxZSAnXl4nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDMxIDB4MWYgJ15fJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxMCwgLyogMDAwMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzMiAweDIwICcgJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzMyAweDIxICchJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNCAweDIyICciJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgyNCwgLyogMDAxMDAxMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNSAweDIzICcjJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNiAweDI0ICckJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4ODYsIC8qIDEwMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNyAweDI1ICclJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDg2LCAvKiAxMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzOCAweDI2ICcmJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzOSAweDI3ICcnJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MCAweDI4ICcoJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MSAweDI5ICcpJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MiAweDJhICcqJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MyAweDJiICcrJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NCAweDJjICcsJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NSAweDJkICctJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NiAweDJlICcuJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NyAweDJmICcvJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMiwgLyogMDAwMDAwMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDgwLCAvKiAxMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0OCAweDMwICcwJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0OSAweDMxICcxJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MCAweDMyICcyJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MSAweDMzICczJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MiAweDM0ICc0JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MWMsIC8qIDAwMDExMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDFlLCAvKiAwMDAxMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MyAweDM1ICc1JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NCAweDM2ICc2JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NSAweDM3ICc3JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NiAweDM4ICc4JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NyAweDM5ICc5JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1OCAweDNhICc6JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1OSAweDNiICc7JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MCAweDNjICc8JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MSAweDNkICc9JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MiAweDNlICc+JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MyAweDNmICc/JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NCAweDQwICdAJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZGUsIC8qIDExMDExMTEwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweGRlLCAvKiAxMTAxMTExMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NSAweDQxICdBJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NiAweDQyICdCJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NyAweDQzICdDJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzIsIC8qIDExMDAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2OCAweDQ0ICdEJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2OSAweDQ1ICdFJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2MiwgLyogMDExMDAwMTAgKi8KKwkweDY4LCAvKiAwMTEwMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg2OCwgLyogMDExMDEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MCAweDQ2ICdGJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2MiwgLyogMDExMDAwMTAgKi8KKwkweDY4LCAvKiAwMTEwMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg2OCwgLyogMDExMDEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MSAweDQ3ICdHJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNhLCAvKiAwMDExMTAxMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MiAweDQ4ICdIJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MyAweDQ5ICdJJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NCAweDRhICdKJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFlLCAvKiAwMDAxMTExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NSAweDRiICdLJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGU2LCAvKiAxMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGU2LCAvKiAxMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NiAweDRjICdMJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NyAweDRkICdNJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZWUsIC8qIDExMTAxMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3OCAweDRlICdOJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZTYsIC8qIDExMTAwMTEwICovCisJMHhmNiwgLyogMTExMTAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZGUsIC8qIDExMDExMTEwICovCisJMHhjZSwgLyogMTEwMDExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3OSAweDRmICdPJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MCAweDUwICdQJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MSAweDUxICdRJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MiAweDUyICdSJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGU2LCAvKiAxMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MyAweDUzICdTJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NCAweDU0ICdUJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg1YSwgLyogMDEwMTEwMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NSAweDU1ICdVJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NiAweDU2ICdWJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NyAweDU3ICdXJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGQ2LCAvKiAxMTAxMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhlZSwgLyogMTExMDExMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4OCAweDU4ICdYJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4OSAweDU5ICdZJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MCAweDVhICdaJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg4NiwgLyogMTAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4YzIsIC8qIDExMDAwMDEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MSAweDViICdbJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MiAweDVjICdcJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ODAsIC8qIDEwMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwMCAqLworCTB4MGUsIC8qIDAwMDAxMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDAyLCAvKiAwMDAwMDAxMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MyAweDVkICddJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NCAweDVlICdeJyAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NSAweDVmICdfJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NiAweDYwICdgJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NyAweDYxICdhJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5OCAweDYyICdiJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5OSAweDYzICdjJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDAgMHg2NCAnZCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxYywgLyogMDAwMTExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTAxIDB4NjUgJ2UnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwMiAweDY2ICdmJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzMiwgLyogMDAxMTAwMTAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDMgMHg2NyAnZycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTA0IDB4NjggJ2gnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4ZTYsIC8qIDExMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwNSAweDY5ICdpJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDYgMHg2YSAnaicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTA3IDB4NmIgJ2snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4ZTYsIC8qIDExMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwOCAweDZjICdsJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDkgMHg2ZCAnbScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhlYywgLyogMTExMDExMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGQ2LCAvKiAxMTAxMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTEwIDB4NmUgJ24nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDExMSAweDZmICdvJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMTIgMHg3MCAncCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTEzIDB4NzEgJ3EnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MWUsIC8qIDAwMDExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDExNCAweDcyICdyJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMTUgMHg3MyAncycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTE2IDB4NzQgJ3QnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MWMsIC8qIDAwMDExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDExNyAweDc1ICd1JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMTggMHg3NiAndicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTE5IDB4NzcgJ3cnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGQ2LCAvKiAxMTAxMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyMCAweDc4ICd4JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMjEgMHg3OSAneScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTIyIDB4N2EgJ3onICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyMyAweDdiICd7JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMjQgMHg3YyAnfCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTI1IDB4N2QgJ30nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyNiAweDdlICd+JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMjcgMHg3ZiAnfycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTI4IDB4ODAgJ4AnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGMyLCAvKiAxMTAwMDAxMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDcwLCAvKiAwMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyOSAweDgxICeBJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzAgMHg4MiAngicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTMxIDB4ODMgJ4MnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzMiAweDg0ICeEJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzMgMHg4NSAnhScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTM0IDB4ODYgJ4YnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzNSAweDg3ICeHJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3MCwgLyogMDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzYgMHg4OCAniCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTM3IDB4ODkgJ4knICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzOCAweDhhICeKJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzkgMHg4YiAniycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQwIDB4OGMgJ4wnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE0MSAweDhkICeNJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNDIgMHg4ZSAnjicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQzIDB4OGYgJ48nICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxMCwgLyogMDAwMTAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE0NCAweDkwICeQJyAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDYyLCAvKiAwMTEwMDAxMCAqLworCTB4NjgsIC8qIDAxMTAxMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDY4LCAvKiAwMTEwMTAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNDUgMHg5MSAnkScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhlYywgLyogMTExMDExMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHg2ZSwgLyogMDExMDExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQ2IDB4OTIgJ5InICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2UsIC8qIDAwMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2UsIC8qIDExMDAxMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE0NyAweDkzICeTJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxMCwgLyogMDAwMTAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNDggMHg5NCAnlCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQ5IDB4OTUgJ5UnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1MCAweDk2ICeWJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNTEgMHg5NyAnlycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTUyIDB4OTggJ5gnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1MyAweDk5ICeZJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNTQgMHg5YSAnmicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTU1IDB4OWIgJ5snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1NiAweDljICecJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NjQsIC8qIDAxMTAwMTAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhlNiwgLyogMTExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNTcgMHg5ZCAnnScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTU4IDB4OWUgJ54nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4YzQsIC8qIDExMDAwMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGRlLCAvKiAxMTAxMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1OSAweDlmICefJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDFiLCAvKiAwMDAxMTAxMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweDcwLCAvKiAwMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjAgMHhhMCAnoCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTYxIDB4YTEgJ6EnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2MiAweGEyICeiJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjMgMHhhMyAnoycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTY0IDB4YTQgJ6QnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2NSAweGE1ICelJyAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhlNiwgLyogMTExMDAxMTAgKi8KKwkweGY2LCAvKiAxMTExMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweGNlLCAvKiAxMTAwMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjYgMHhhNiAnpicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzZSwgLyogMDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTY3IDB4YTcgJ6cnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2OCAweGE4ICeoJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjkgMHhhOSAnqScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTcwIDB4YWEgJ6onICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE3MSAweGFiICerJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHg4NiwgLyogMTAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzZSwgLyogMDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNzIgMHhhYyAnrCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhlMCwgLyogMTExMDAwMDAgKi8KKwkweDYyLCAvKiAwMTEwMDAxMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGNlLCAvKiAxMTAwMTExMCAqLworCTB4OWEsIC8qIDEwMDExMDEwICovCisJMHgzZiwgLyogMDAxMTExMTEgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTczIDB4YWQgJ60nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE3NCAweGFlICeuJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNzUgMHhhZiAnrycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTc2IDB4YjAgJ7AnICovCisJMHgxMSwgLyogMDAwMTAwMDEgKi8KKwkweDQ0LCAvKiAwMTAwMDEwMCAqLworCTB4MTEsIC8qIDAwMDEwMDAxICovCisJMHg0NCwgLyogMDEwMDAxMDAgKi8KKwkweDExLCAvKiAwMDAxMDAwMSAqLworCTB4NDQsIC8qIDAxMDAwMTAwICovCisJMHgxMSwgLyogMDAwMTAwMDEgKi8KKwkweDQ0LCAvKiAwMTAwMDEwMCAqLworCTB4MTEsIC8qIDAwMDEwMDAxICovCisJMHg0NCwgLyogMDEwMDAxMDAgKi8KKwkweDExLCAvKiAwMDAxMDAwMSAqLworCTB4NDQsIC8qIDAxMDAwMTAwICovCisJMHgxMSwgLyogMDAwMTAwMDEgKi8KKwkweDQ0LCAvKiAwMTAwMDEwMCAqLworCTB4MTEsIC8qIDAwMDEwMDAxICovCisJMHg0NCwgLyogMDEwMDAxMDAgKi8KKworCS8qIDE3NyAweGIxICexJyAqLworCTB4NTUsIC8qIDAxMDEwMTAxICovCisJMHhhYSwgLyogMTAxMDEwMTAgKi8KKwkweDU1LCAvKiAwMTAxMDEwMSAqLworCTB4YWEsIC8qIDEwMTAxMDEwICovCisJMHg1NSwgLyogMDEwMTAxMDEgKi8KKwkweGFhLCAvKiAxMDEwMTAxMCAqLworCTB4NTUsIC8qIDAxMDEwMTAxICovCisJMHhhYSwgLyogMTAxMDEwMTAgKi8KKwkweDU1LCAvKiAwMTAxMDEwMSAqLworCTB4YWEsIC8qIDEwMTAxMDEwICovCisJMHg1NSwgLyogMDEwMTAxMDEgKi8KKwkweGFhLCAvKiAxMDEwMTAxMCAqLworCTB4NTUsIC8qIDAxMDEwMTAxICovCisJMHhhYSwgLyogMTAxMDEwMTAgKi8KKwkweDU1LCAvKiAwMTAxMDEwMSAqLworCTB4YWEsIC8qIDEwMTAxMDEwICovCisKKwkvKiAxNzggMHhiMiAnsicgKi8KKwkweGRkLCAvKiAxMTAxMTEwMSAqLworCTB4NzcsIC8qIDAxMTEwMTExICovCisJMHhkZCwgLyogMTEwMTExMDEgKi8KKwkweDc3LCAvKiAwMTExMDExMSAqLworCTB4ZGQsIC8qIDExMDExMTAxICovCisJMHg3NywgLyogMDExMTAxMTEgKi8KKwkweGRkLCAvKiAxMTAxMTEwMSAqLworCTB4NzcsIC8qIDAxMTEwMTExICovCisJMHhkZCwgLyogMTEwMTExMDEgKi8KKwkweDc3LCAvKiAwMTExMDExMSAqLworCTB4ZGQsIC8qIDExMDExMTAxICovCisJMHg3NywgLyogMDExMTAxMTEgKi8KKwkweGRkLCAvKiAxMTAxMTEwMSAqLworCTB4NzcsIC8qIDAxMTEwMTExICovCisJMHhkZCwgLyogMTEwMTExMDEgKi8KKwkweDc3LCAvKiAwMTExMDExMSAqLworCisJLyogMTc5IDB4YjMgJ7MnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE4MCAweGI0ICe0JyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAxODEgMHhiNSAntScgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCisJLyogMTgyIDB4YjYgJ7YnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweGY2LCAvKiAxMTExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDE4MyAweGI3ICe3JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAxODQgMHhiOCAnuCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCisJLyogMTg1IDB4YjkgJ7knICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZjYsIC8qIDExMTEwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweGY2LCAvKiAxMTExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDE4NiAweGJhICe6JyAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAxODcgMHhiYiAnuycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4ZjYsIC8qIDExMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCisJLyogMTg4IDB4YmMgJ7wnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZjYsIC8qIDExMTEwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE4OSAweGJkICe9JyAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxOTAgMHhiZSAnvicgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTkxIDB4YmYgJ78nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE5MiAweGMwICfAJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxOTMgMHhjMSAnwScgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTk0IDB4YzIgJ8InICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE5NSAweGMzICfDJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAxOTYgMHhjNCAnxCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTk3IDB4YzUgJ8UnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE5OCAweGM2ICfGJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAxOTkgMHhjNyAnxycgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzcsIC8qIDAwMTEwMTExICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCisJLyogMjAwIDB4YzggJ8gnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzcsIC8qIDAwMTEwMTExICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDNmLCAvKiAwMDExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIwMSAweGM5ICfJJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNmLCAvKiAwMDExMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzNywgLyogMDAxMTAxMTEgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAyMDIgMHhjYSAnyicgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHhmNywgLyogMTExMTAxMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjAzIDB4Y2IgJ8snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY3LCAvKiAxMTExMDExMSAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDIwNCAweGNjICfMJyAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM3LCAvKiAwMDExMDExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzNywgLyogMDAxMTAxMTEgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAyMDUgMHhjZCAnzScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjA2IDB4Y2UgJ84nICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZjcsIC8qIDExMTEwMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY3LCAvKiAxMTExMDExMSAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDIwNyAweGNmICfPJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMDggMHhkMCAn0CcgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjA5IDB4ZDEgJ9EnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDIxMCAweGQyICfSJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAyMTEgMHhkMyAn0ycgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4M2YsIC8qIDAwMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjEyIDB4ZDQgJ9QnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MWYsIC8qIDAwMDExMTExICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIxMyAweGQ1ICfVJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAyMTQgMHhkNiAn1icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2YsIC8qIDAwMTExMTExICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCisJLyogMjE1IDB4ZDcgJ9cnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDIxNiAweGQ4ICfYJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAyMTcgMHhkOSAn2ScgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjE4IDB4ZGEgJ9onICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDIxOSAweGRiICfbJyAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisKKwkvKiAyMjAgMHhkYyAn3CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCisJLyogMjIxIDB4ZGQgJ90nICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKworCS8qIDIyMiAweGRlICfeJyAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisKKwkvKiAyMjMgMHhkZiAn3ycgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjI0IDB4ZTAgJ+AnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIyNSAweGUxICfhJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMjYgMHhlMiAn4icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjI3IDB4ZTMgJ+MnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIyOCAweGU0ICfkJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMjkgMHhlNSAn5ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHg3MCwgLyogMDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjMwIDB4ZTYgJ+YnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIzMSAweGU3ICfnJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMzIgMHhlOCAn6CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjMzIDB4ZTkgJ+knICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIzNCAweGVhICfqJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGVlLCAvKiAxMTEwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMzUgMHhlYiAn6ycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxZSwgLyogMDAwMTExMTAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDNlLCAvKiAwMDExMTExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjM2IDB4ZWMgJ+wnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweGRiLCAvKiAxMTAxMTAxMSAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIzNyAweGVkICftJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDMsIC8qIDAwMDAwMDExICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweGYzLCAvKiAxMTExMDAxMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMzggMHhlZSAn7icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxYywgLyogMDAwMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgxYywgLyogMDAwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjM5IDB4ZWYgJ+8nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0MCAweGYwICfwJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNDEgMHhmMSAn8ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjQyIDB4ZjIgJ/InICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0MyAweGYzICfzJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNDQgMHhmNCAn9CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDFiLCAvKiAwMDAxMTAxMSAqLworCTB4MWIsIC8qIDAwMDExMDExICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCisJLyogMjQ1IDB4ZjUgJ/UnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHg3MCwgLyogMDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0NiAweGY2ICf2JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNDcgMHhmNyAn9ycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjQ4IDB4ZjggJ/gnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0OSAweGY5ICf5JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNTAgMHhmYSAn+icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjUxIDB4ZmIgJ/snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweGVjLCAvKiAxMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MWMsIC8qIDAwMDExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI1MiAweGZjICf8JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNTMgMHhmZCAn/ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMiwgLyogMDAxMTAwMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjU0IDB4ZmUgJ/4nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI1NSAweGZmICf/JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2hhc2h0YWJsZS5jIGIvbGliL2hhc2h0YWJsZS5jCmluZGV4IDY4OTU1NTAuLmFiZDYxYzggMTAwNjQ0Ci0tLSBhL2xpYi9oYXNodGFibGUuYworKysgYi9saWIvaGFzaHRhYmxlLmMKQEAgLTQ3OCw3ICs0NzgsOCBAQAogfQogCiBzc2l6ZV90IGhleHBvcnRfcihzdHJ1Y3QgaHNlYXJjaF9kYXRhICpodGFiLCBjb25zdCBjaGFyIHNlcCwKLQkJIGNoYXIgKipyZXNwLCBzaXplX3Qgc2l6ZSkKKwkJIGNoYXIgKipyZXNwLCBzaXplX3Qgc2l6ZSwKKwkJIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQogewogCUVOVFJZICpsaXN0W2h0YWItPnNpemVdOwogCWNoYXIgKnJlcywgKnA7CkBAIC00OTEsOCArNDkyLDggQEAKIAkJcmV0dXJuICgtMSk7CiAJfQogCi0JZGVidWcoIkVYUE9SVCAgdGFibGUgPSAlcCwgaHRhYi5zaXplID0gJWQsIGh0YWIuZmlsbGVkID0gJWQsIHNpemUgPSAlZFxuIiwKLQkJaHRhYiwgaHRhYi0+c2l6ZSwgaHRhYi0+ZmlsbGVkLCBzaXplKTsKKwlkZWJ1ZygiRVhQT1JUICB0YWJsZSA9ICVwLCBodGFiLnNpemUgPSAlZCwgaHRhYi5maWxsZWQgPSAlZCwgIgorCQkic2l6ZSA9ICV6dVxuIiwgaHRhYiwgaHRhYi0+c2l6ZSwgaHRhYi0+ZmlsbGVkLCBzaXplKTsKIAkvKgogCSAqIFBhc3MgMToKIAkgKiBzZWFyY2ggdXNlZCBlbnRyaWVzLApAQCAtNTAyLDYgKzUwMywxNiBAQAogCiAJCWlmIChodGFiLT50YWJsZVtpXS51c2VkID4gMCkgewogCQkJRU5UUlkgKmVwID0gJmh0YWItPnRhYmxlW2ldLmVudHJ5OworCQkJaW50IGFyZywgZm91bmQgPSAwOworCisJCQlmb3IgKGFyZyA9IDA7IGFyZyA8IGFyZ2M7ICsrYXJnKSB7CisJCQkJaWYgKHN0cmNtcChhcmd2W2FyZ10sIGVwLT5rZXkpID09IDApIHsKKwkJCQkJZm91bmQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoKGFyZ2MgPiAwKSAmJiAoZm91bmQgPT0gMCkpCisJCQkJY29udGludWU7CiAKIAkJCWxpc3RbbisrXSA9IGVwOwogCkBAIC01MzksOCArNTUwLDggQEAKIAkvKiBDaGVjayBpZiB0aGUgdXNlciBzdXBwbGllZCBidWZmZXIgc2l6ZSBpcyBzdWZmaWNpZW50ICovCiAJaWYgKHNpemUpIHsKIAkJaWYgKHNpemUgPCB0b3RsZW4gKyAxKSB7CS8qIHByb3ZpZGVkIGJ1ZmZlciB0b28gc21hbGwgKi8KLQkJCWRlYnVnKCIjIyMgYnVmZmVyIHRvbyBzbWFsbDogJWQsIGJ1dCBuZWVkICVkXG4iLAotCQkJCXNpemUsIHRvdGxlbiArIDEpOworCQkJcHJpbnRmKCJFbnYgZXhwb3J0IGJ1ZmZlciB0b28gc21hbGw6ICV6dSwgIgorCQkJCSJidXQgbmVlZCAlenVcbiIsIHNpemUsIHRvdGxlbiArIDEpOwogCQkJX19zZXRfZXJybm8oRU5PTUVNKTsKIAkJCXJldHVybiAoLTEpOwogCQl9CkBAIC02NDAsNyArNjUxLDcgQEAKIAogCS8qIHdlIGFsbG9jYXRlIG5ldyBzcGFjZSB0byBtYWtlIHN1cmUgd2UgY2FuIHdyaXRlIHRvIHRoZSBhcnJheSAqLwogCWlmICgoZGF0YSA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotCQlkZWJ1ZygiaGltcG9ydF9yOiBjYW4ndCBtYWxsb2MgJWQgYnl0ZXNcbiIsIHNpemUpOworCQlkZWJ1ZygiaGltcG9ydF9yOiBjYW4ndCBtYWxsb2MgJXp1IGJ5dGVzXG4iLCBzaXplKTsKIAkJX19zZXRfZXJybm8oRU5PTUVNKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvbmFuZF9ib290LmMgYi9uYW5kX3NwbC9uYW5kX2Jvb3QuYwppbmRleCA2MTVlZjI1Li5iZWUxMDI5IDEwMDY0NAotLS0gYS9uYW5kX3NwbC9uYW5kX2Jvb3QuYworKysgYi9uYW5kX3NwbC9uYW5kX2Jvb3QuYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAJaW50IGVjY2J5dGVzID0gQ09ORklHX1NZU19OQU5EX0VDQ0JZVEVTOwogCWludCBlY2NzdGVwcyA9IENPTkZJR19TWVNfTkFORF9FQ0NTVEVQUzsKIAl1aW50OF90ICpwID0gZHN0OwotCWludCBzdGF0OwogCiAJbmFuZF9jb21tYW5kKG10ZCwgYmxvY2ssIHBhZ2UsIDAsIE5BTkRfQ01EX1JFQUQwKTsKIApAQCAtMjE3LDcgKzIxNiw3IEBACiAJCSAqIGZyb20gY29ycmVjdF9kYXRhKCkuIFdlIGp1c3QgaG9wZSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMKIAkJICogYXJlIGNvcnJlY3RlZCBieSB0aGlzIHJvdXRpbmUuCiAJCSAqLwotCQlzdGF0ID0gdGhpcy0+ZWNjLmNvcnJlY3QobXRkLCBwLCAmZWNjX2NvZGVbaV0sICZlY2NfY2FsY1tpXSk7CisJCXRoaXMtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCAmZWNjX2NhbGNbaV0pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjY4LDcgKzI2Nyw2IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCBuYW5kX2NoaXA7CiAJbmFuZF9pbmZvX3QgbmFuZF9pbmZvOwotCWludCByZXQ7CiAJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSB2b2lkICgqdWJvb3QpKHZvaWQpOwogCiAJLyoKQEAgLTI4Nyw4ICsyODUsOCBAQAogCS8qCiAJICogTG9hZCBVLUJvb3QgaW1hZ2UgZnJvbSBOQU5EIGludG8gUkFNCiAJICovCi0JcmV0ID0gbmFuZF9sb2FkKCZuYW5kX2luZm8sIENPTkZJR19TWVNfTkFORF9VX0JPT1RfT0ZGUywgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9TSVpFLAotCQkJKHVjaGFyICopQ09ORklHX1NZU19OQU5EX1VfQk9PVF9EU1QpOworCW5hbmRfbG9hZCgmbmFuZF9pbmZvLCBDT05GSUdfU1lTX05BTkRfVV9CT09UX09GRlMsIENPTkZJR19TWVNfTkFORF9VX0JPT1RfU0laRSwKKwkJICAodWNoYXIgKilDT05GSUdfU1lTX05BTkRfVV9CT09UX0RTVCk7CiAKICNpZmRlZiBDT05GSUdfTkFORF9FTlZfRFNUCiAJbmFuZF9sb2FkKCZuYW5kX2luZm8sIENPTkZJR19FTlZfT0ZGU0VULCBDT05GSUdfRU5WX1NJWkUsCmRpZmYgLS1naXQgYS9wb3N0L2xpYl9wb3dlcnBjL2ZwdS8yMDAwMTEyMi0xLmMgYi9wb3N0L2xpYl9wb3dlcnBjL2ZwdS8yMDAwMTEyMi0xLmMKaW5kZXggNGFmMzAwZC4uNWI0ZjQyYyAxMDA2NDQKLS0tIGEvcG9zdC9saWJfcG93ZXJwYy9mcHUvMjAwMDExMjItMS5jCisrKyBiL3Bvc3QvbGliX3Bvd2VycGMvZnB1LzIwMDAxMTIyLTEuYwpAQCAtMzQsMTIgKzM0LDExIEBACiAKIGludCBmcHVfcG9zdF90ZXN0X21hdGgxICh2b2lkKQogewotCXZvbGF0aWxlIGRvdWJsZSBhLCAqcDsKKwl2b2xhdGlsZSBkb3VibGUgYTsKIAlkb3VibGUgYywgZDsKIAl2b2xhdGlsZSBkb3VibGUgYjsKIAogCWQgPSAxLjA7Ci0JcCA9ICZiOwogCiAJZG8KIAl7CmRpZmYgLS1naXQgYS9zcGwvTWFrZWZpbGUgYi9zcGwvTWFrZWZpbGUKaW5kZXggYzgzMTdmYS4uNmFjNDJhMiAxMDA2NDQKLS0tIGEvc3BsL01ha2VmaWxlCisrKyBiL3NwbC9NYWtlZmlsZQpAQCAtNTQsNiArNTQsNyBAQAogTElCUy0kKENPTkZJR19TUExfTElCR0VORVJJQ19TVVBQT1JUKSArPSBsaWIvbGliZ2VuZXJpYy5vCiBMSUJTLSQoQ09ORklHX1NQTF9QT1dFUl9TVVBQT1JUKSArPSBkcml2ZXJzL3Bvd2VyL2xpYnBvd2VyLm8KIExJQlMtJChDT05GSUdfU1BMX05BTkRfU1VQUE9SVCkgKz0gZHJpdmVycy9tdGQvbmFuZC9saWJuYW5kLm8KK0xJQlMtJChDT05GSUdfU1BMX09ORU5BTkRfU1VQUE9SVCkgKz0gZHJpdmVycy9tdGQvb25lbmFuZC9saWJvbmVuYW5kLm8KIExJQlMtJChDT05GSUdfU1BMX0RNQV9TVVBQT1JUKSArPSBkcml2ZXJzL2RtYS9saWJkbWEubwogTElCUy0kKENPTkZJR19TUExfUE9TVF9NRU1fU1VQUE9SVCkgKz0gcG9zdC9kcml2ZXJzL21lbW9yeS5vCiAKQEAgLTYzLDYgKzY0LDkgQEAKIGlmZXEgKCQoU09DKSxvbWFwNCkKIExJQlMteSArPSAkKENQVURJUikvb21hcC1jb21tb24vbGlib21hcC1jb21tb24ubwogZW5kaWYKK2lmZXEgKCQoU09DKSxvbWFwNSkKK0xJQlMteSArPSAkKENQVURJUikvb21hcC1jb21tb24vbGlib21hcC1jb21tb24ubworZW5kaWYKIAogU1RBUlQgOj0gJChhZGRwcmVmaXggJChTUExUUkVFKS8sJChTVEFSVCkpCiBMSUJTIDo9ICQoYWRkcHJlZml4ICQoU1BMVFJFRSkvLCQoc29ydCAkKExJQlMteSkpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvLmdpdGlnbm9yZSBiL3Rvb2xzLy5naXRpZ25vcmUKaW5kZXggMDdmMjFhMy4uOThhNWM3OCAxMDA2NDQKLS0tIGEvdG9vbHMvLmdpdGlnbm9yZQorKysgYi90b29scy8uZ2l0aWdub3JlCkBAIC00LDYgKzQsNyBAQAogL2ltZzJzcmVjCiAvbWtpbWFnZQogL21wYzg2eF9jbGsKKy9teHNib290CiAvbmNiCiAvbmNwCiAvdWJzaGExCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZSBiL3Rvb2xzL01ha2VmaWxlCmluZGV4IGRmNTZhMjUuLmE1Zjk4OWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlCisrKyBiL3Rvb2xzL01ha2VmaWxlCkBAIC02Niw3ICs2Niw5IEBACiBCSU5fRklMRVMtJChDT05GSUdfQ01EX05FVCkgKz0gZ2VuX2V0aF9hZGRyJChTRlgpCiBCSU5fRklMRVMtJChDT05GSUdfQ01EX0xPQURTKSArPSBpbWcyc3JlYyQoU0ZYKQogQklOX0ZJTEVTLSQoQ09ORklHX1hXQVlfU1dBUF9CWVRFUykgKz0geHdheS1zd2FwLWJ5dGVzJChTRlgpCitCSU5fRklMRVMteSArPSBta2VudmltYWdlJChTRlgpCiBCSU5fRklMRVMteSArPSBta2ltYWdlJChTRlgpCitCSU5fRklMRVMtJChDT05GSUdfTVgyOCkgKz0gbXhzYm9vdCQoU0ZYKQogQklOX0ZJTEVTLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5jYiQoU0ZYKQogQklOX0ZJTEVTLSQoQ09ORklHX1NIQTFfQ0hFQ0tfVUJfSU1HKSArPSB1YnNoYTEkKFNGWCkKIApAQCAtOTAsNyArOTIsOSBAQAogTk9QRURfT0JKX0ZJTEVTLXkgKz0ga3diaW1hZ2UubwogTk9QRURfT0JKX0ZJTEVTLXkgKz0gaW14aW1hZ2UubwogTk9QRURfT0JKX0ZJTEVTLXkgKz0gb21hcGltYWdlLm8KK05PUEVEX09CSl9GSUxFUy15ICs9IG1rZW52aW1hZ2UubwogTk9QRURfT0JKX0ZJTEVTLXkgKz0gbWtpbWFnZS5vCitPQkpfRklMRVMtJChDT05GSUdfTVgyOCkgKz0gbXhzYm9vdC5vCiBPQkpfRklMRVMtJChDT05GSUdfTkVUQ09OU09MRSkgKz0gbmNiLm8KIE5PUEVEX09CSl9GSUxFUy15ICs9IG9zX3N1cHBvcnQubwogT0JKX0ZJTEVTLSQoQ09ORklHX1NIQTFfQ0hFQ0tfVUJfSU1HKSArPSB1YnNoYTEubwpAQCAtMTExLDggKzExNSwxMSBAQAogCiAjIEdlbmVyYXRlZCBMQ0QvdmlkZW8gbG9nbwogTE9HT19IID0gJChPQkpUUkVFKS9pbmNsdWRlL2JtcF9sb2dvLmgKK0xPR09fREFUQV9IID0gJChPQkpUUkVFKS9pbmNsdWRlL2JtcF9sb2dvX2RhdGEuaAogTE9HTy0kKENPTkZJR19MQ0RfTE9HTykgKz0gJChMT0dPX0gpCitMT0dPLSQoQ09ORklHX0xDRF9MT0dPKSArPSAkKExPR09fREFUQV9IKQogTE9HTy0kKENPTkZJR19WSURFT19MT0dPKSArPSAkKExPR09fSCkKK0xPR08tJChDT05GSUdfVklERU9fTE9HTykgKz0gJChMT0dPX0RBVEFfSCkKIAogaWZlcSAoJChMT0dPX0JNUCksKQogTE9HT19CTVA9IGxvZ29zL2RlbnguYm1wCkBAIC0xODUsNiArMTkyLDkgQEAKIAkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkXgogCSQoSE9TVFNUUklQKSAkQAogCiskKG9iailta2VudmltYWdlJChTRlgpOgkkKG9iailjcmMzMi5vICQob2JqKW1rZW52aW1hZ2UubworCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCisKICQob2JqKW1raW1hZ2UkKFNGWCk6CSQob2JqKWFpc2ltYWdlLm8gXAogCQkJJChvYmopY3JjMzIubyBcCiAJCQkkKG9iailkZWZhdWx0X2ltYWdlLm8gXApAQCAtMjA2LDYgKzIxNiwxMCBAQAogCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCiAJJChIT1NUU1RSSVApICRACiAKKyQob2JqKW14c2Jvb3QkKFNGWCk6CSQob2JqKW14c2Jvb3QubworCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCisJJChIT1NUU1RSSVApICRACisKICQob2JqKW5jYiQoU0ZYKToJJChvYmopbmNiLm8KIAkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkXgogCSQoSE9TVFNUUklQKSAkQApAQCAtMjM2LDcgKzI1MCwxMCBAQAogZW5kaWYKIAogJChMT0dPX0gpOgkkKG9iailibXBfbG9nbyAkKExPR09fQk1QKQotCSQob2JqKS4vYm1wX2xvZ28gJChMT0dPX0JNUCkgPiRACisJJChvYmopLi9ibXBfbG9nbyAtLWdlbi1pbmZvICQoTE9HT19CTVApID4gJEAKKworJChMT0dPX0RBVEFfSCk6CSQob2JqKWJtcF9sb2dvICQoTE9HT19CTVApCisJJChvYmopLi9ibXBfbG9nbyAtLWdlbi1kYXRhICQoTE9HT19CTVApID4gJEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS90b29scy9ibXBfbG9nby5jIGIvdG9vbHMvYm1wX2xvZ28uYwppbmRleCA0NzIyOGQyLi5iMmFkM2Q1IDEwMDY0NAotLS0gYS90b29scy9ibXBfbG9nby5jCisrKyBiL3Rvb2xzL2JtcF9sb2dvLmMKQEAgLTEsNSArMSwxMCBAQAogI2luY2x1ZGUgImNvbXBpbGVyLmgiCiAKK2VudW0geworCU1PREVfR0VOX0lORk8sCisJTU9ERV9HRU5fREFUQQorfTsKKwogdHlwZWRlZiBzdHJ1Y3QgYml0bWFwX3MgewkJLyogYml0bWFwIGRlc2NyaXB0aW9uICovCiAJdWludDE2X3Qgd2lkdGg7CiAJdWludDE2X3QgaGVpZ2h0OwpAQCAtOSw2ICsxNCwxMSBAQAogCiAjZGVmaW5lIERFRkFVTFRfQ01BUF9TSVpFCTE2CS8qIHNpemUgb2YgZGVmYXVsdCBjb2xvciBtYXAJKi8KIAordm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKQoreworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstLWdlbi1pbmZvfC0tZ2VuLWRhdGFdIGZpbGVcbiIsIHByb2cpOworfQorCiAvKgogICogTmV1dHJhbGl6ZSBsaXR0bGUgZW5kaWFucy4KICAqLwpAQCAtMzksMjEgKzQ5LDUyIEBACiAJZXhpdCAoRVhJVF9GQUlMVVJFKTsKIH0KIAordm9pZCBnZW5faW5mbyhiaXRtYXBfdCAqYiwgdWludDE2X3Qgbl9jb2xvcnMpCit7CisJcHJpbnRmKCIvKlxuIgorCQkiICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgXCJ0b29scy9ibXBfbG9nb1wiXG4iCisJCSIgKlxuIgorCQkiICogRE8gTk9UIEVESVRcbiIKKwkJIiAqXG4iCisJCSIgKi9cblxuXG4iCisJCSIjaWZuZGVmIF9fQk1QX0xPR09fSF9fXG4iCisJCSIjZGVmaW5lIF9fQk1QX0xPR09fSF9fXG5cbiIKKwkJIiNkZWZpbmUgQk1QX0xPR09fV0lEVEhcdFx0JWRcbiIKKwkJIiNkZWZpbmUgQk1QX0xPR09fSEVJR0hUXHRcdCVkXG4iCisJCSIjZGVmaW5lIEJNUF9MT0dPX0NPTE9SU1x0XHQlZFxuIgorCQkiI2RlZmluZSBCTVBfTE9HT19PRkZTRVRcdFx0JWRcblxuIgorCQkiZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGJtcF9sb2dvX3BhbGV0dGVbXTtcbiIKKwkJImV4dGVybiB1bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdO1xuXG4iCisJCSIjZW5kaWYgLyogX19CTVBfTE9HT19IX18gKi9cbiIsCisJCWItPndpZHRoLCBiLT5oZWlnaHQsIG5fY29sb3JzLAorCQlERUZBVUxUX0NNQVBfU0laRSk7Cit9CisKIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWludAlpLCB4OworCWludAltb2RlLCBpLCB4OwogCUZJTEUJKmZwOwogCWJpdG1hcF90IGJtcDsKIAliaXRtYXBfdCAqYiA9ICZibXA7CiAJdWludDE2X3QgZGF0YV9vZmZzZXQsIG5fY29sb3JzOwogCi0JaWYgKGFyZ2MgPCAyKSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIlVzYWdlOiAlcyBmaWxlXG4iLCBhcmd2WzBdKTsKKwlpZiAoYXJnYyA8IDMpIHsKKwkJdXNhZ2UoYXJndlswXSk7CiAJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CiAJfQogCi0JaWYgKChmcCA9IGZvcGVuIChhcmd2WzFdLCAicmIiKSkgPT0gTlVMTCkgewotCQlwZXJyb3IgKGFyZ3ZbMV0pOworCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWdlbi1pbmZvIikpCisJCW1vZGUgPSBNT0RFX0dFTl9JTkZPOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tZ2VuLWRhdGEiKSkKKwkJbW9kZSA9IE1PREVfR0VOX0RBVEE7CisJZWxzZSB7CisJCXVzYWdlKGFyZ3ZbMF0pOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJZnAgPSBmb3Blbihhcmd2WzJdLCAicmIiKTsKKwlpZiAoIWZwKSB7CisJCXBlcnJvcihhcmd2WzJdKTsKIAkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKIAl9CiAKQEAgLTkyLDI4ICsxMzMsMjYgQEAKIAkJbl9jb2xvcnMgPSAyNTYgLSBERUZBVUxUX0NNQVBfU0laRTsKIAl9CiAKLQlwcmludGYgKCIvKlxuIgorCWlmIChtb2RlID09IE1PREVfR0VOX0lORk8pIHsKKwkJZ2VuX2luZm8oYiwgbl9jb2xvcnMpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmludGYoIi8qXG4iCiAJCSIgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBcInRvb2xzL2JtcF9sb2dvXCJcbiIKIAkJIiAqXG4iCiAJCSIgKiBETyBOT1QgRURJVFxuIgogCQkiICpcbiIKIAkJIiAqL1xuXG5cbiIKLQkJIiNpZm5kZWYgX19CTVBfTE9HT19IX19cbiIKLQkJIiNkZWZpbmUgX19CTVBfTE9HT19IX19cblxuIgotCQkiI2RlZmluZSBCTVBfTE9HT19XSURUSFx0XHQlZFxuIgotCQkiI2RlZmluZSBCTVBfTE9HT19IRUlHSFRcdFx0JWRcbiIKLQkJIiNkZWZpbmUgQk1QX0xPR09fQ09MT1JTXHRcdCVkXG4iCi0JCSIjZGVmaW5lIEJNUF9MT0dPX09GRlNFVFx0XHQlZFxuIgotCQkiXG4iLAotCQliLT53aWR0aCwgYi0+aGVpZ2h0LCBuX2NvbG9ycywKLQkJREVGQVVMVF9DTUFQX1NJWkUpOworCQkiI2lmbmRlZiBfX0JNUF9MT0dPX0RBVEFfSF9fXG4iCisJCSIjZGVmaW5lIF9fQk1QX0xPR09fREFUQV9IX19cblxuIik7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KIAlpZiAoKGItPmRhdGEgPSAodWludDhfdCAqKW1hbGxvYyhiLT53aWR0aCAqIGItPmhlaWdodCkpID09IE5VTEwpCiAJCWVycm9yICgiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGZpbGUiLCBmcCk7CiAKIAkvKiByZWFkIGFuZCBwcmludCB0aGUgcGFsZXR0ZSBpbmZvcm1hdGlvbiAqLwotCXByaW50ZiAoInVuc2lnbmVkIHNob3J0IGJtcF9sb2dvX3BhbGV0dGVbXSA9IHtcbiIpOworCXByaW50ZigidW5zaWduZWQgc2hvcnQgYm1wX2xvZ29fcGFsZXR0ZVtdID0ge1xuIik7CiAKIAlmb3IgKGk9MDsgaTxuX2NvbG9yczsgKytpKSB7CiAJCWItPnBhbGV0dGVbKGludCkoaSozKzIpXSA9IGZnZXRjKGZwKTsKQEAgLTEzNywxNCArMTc2LDEzIEBACiAJcHJpbnRmICgiXG4iKTsKIAlwcmludGYgKCJ9O1xuIik7CiAJcHJpbnRmICgiXG4iKTsKLQlwcmludGYgKCJ1bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdID0ge1xuIik7CisJcHJpbnRmKCJ1bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdID0ge1xuIik7CiAJZm9yIChpPShiLT5oZWlnaHQtMSkqYi0+d2lkdGg7IGk+PTA7IGktPWItPndpZHRoKSB7CiAJCWZvciAoeCA9IDA7IHggPCBiLT53aWR0aDsgeCsrKSB7CiAJCQliLT5kYXRhWyh1aW50MTZfdCkgaSArIHhdID0gKHVpbnQ4X3QpIGZnZXRjIChmcCkgXAogCQkJCQkJKyBERUZBVUxUX0NNQVBfU0laRTsKIAkJfQogCX0KLQlmY2xvc2UgKGZwKTsKIAogCWZvciAoaT0wOyBpPChiLT5oZWlnaHQqYi0+d2lkdGgpOyArK2kpIHsKIAkJaWYgKChpJTgpID09IDApCkBAIC0xNTYsOCArMTk0LDEwIEBACiAJfQogCXByaW50ZiAoIlxuIgogCQkifTtcblxuIgotCQkiI2VuZGlmIC8qIF9fQk1QX0xPR09fSF9fICovXG4iCisJCSIjZW5kaWYgLyogX19CTVBfTE9HT19EQVRBX0hfXyAqL1xuIgogCSk7CiAKLQlyZXR1cm4gKDApOworb3V0OgorCWZjbG9zZShmcCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9jaGVja3BhdGNoLnBsIGIvdG9vbHMvY2hlY2twYXRjaC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMDQ4YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvY2hlY2twYXRjaC5wbApAQCAtMCwwICsxLDMzMzcgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKKyMgKGMpIDIwMDUsIEpvZWwgU2Nob3BwIDxqc2Nob3BwQGF1c3Rpbi5pYm0uY29tPiAodGhlIHVnbHkgYml0KQorIyAoYykgMjAwNywyMDA4LCBBbmR5IFdoaXRjcm9mdCA8YXB3QHVrLmlibS5jb20+IChuZXcgY29uZGl0aW9ucywgdGVzdCBzdWl0ZSkKKyMgKGMpIDIwMDgtMjAxMCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorCit1c2Ugc3RyaWN0OworCitteSAkUCA9ICQwOworJFAgPX4gc0AuKi9AQGc7CisKK215ICRWID0gJzAuMzInOworCit1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOworCitteSAkcXVpZXQgPSAwOworbXkgJHRyZWUgPSAxOworbXkgJGNoa19zaWdub2ZmID0gMTsKK215ICRjaGtfcGF0Y2ggPSAxOworbXkgJHRzdF9vbmx5OworbXkgJGVtYWNzID0gMDsKK215ICR0ZXJzZSA9IDA7CitteSAkZmlsZSA9IDA7CitteSAkY2hlY2sgPSAwOworbXkgJHN1bW1hcnkgPSAxOworbXkgJG1haWxiYWNrID0gMDsKK215ICRzdW1tYXJ5X2ZpbGUgPSAwOworbXkgJHNob3dfdHlwZXMgPSAwOworbXkgJHJvb3Q7CitteSAlZGVidWc7CitteSAlaWdub3JlX3R5cGUgPSAoKTsKK215IEBpZ25vcmUgPSAoKTsKK215ICRoZWxwID0gMDsKK215ICRjb25maWd1cmF0aW9uX2ZpbGUgPSAiLmNoZWNrcGF0Y2guY29uZiI7CisKK3N1YiBoZWxwIHsKKwlteSAoJGV4aXRjb2RlKSA9IEBfOworCisJcHJpbnQgPDwgIkVPTSI7CitVc2FnZTogJFAgW09QVElPTl0uLi4gW0ZJTEVdLi4uCitWZXJzaW9uOiAkVgorCitPcHRpb25zOgorICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICBxdWlldAorICAtLW5vLXRyZWUgICAgICAgICAgICAgICAgICBydW4gd2l0aG91dCBhIGtlcm5lbCB0cmVlCisgIC0tbm8tc2lnbm9mZiAgICAgICAgICAgICAgIGRvIG5vdCBjaGVjayBmb3IgJ1NpZ25lZC1vZmYtYnknIGxpbmUKKyAgLS1wYXRjaCAgICAgICAgICAgICAgICAgICAgdHJlYXQgRklMRSBhcyBwYXRjaGZpbGUgKGRlZmF1bHQpCisgIC0tZW1hY3MgICAgICAgICAgICAgICAgICAgIGVtYWNzIGNvbXBpbGUgd2luZG93IGZvcm1hdAorICAtLXRlcnNlICAgICAgICAgICAgICAgICAgICBvbmUgbGluZSBwZXIgcmVwb3J0CisgIC1mLCAtLWZpbGUgICAgICAgICAgICAgICAgIHRyZWF0IEZJTEUgYXMgcmVndWxhciBzb3VyY2UgZmlsZQorICAtLXN1YmplY3RpdmUsIC0tc3RyaWN0ICAgICBlbmFibGUgbW9yZSBzdWJqZWN0aXZlIHRlc3RzCisgIC0taWdub3JlIFRZUEUoLFRZUEUyLi4uKSAgIGlnbm9yZSB2YXJpb3VzIGNvbW1hIHNlcGFyYXRlZCBtZXNzYWdlIHR5cGVzCisgIC0tc2hvdy10eXBlcyAgICAgICAgICAgICAgIHNob3cgdGhlIG1lc3NhZ2UgInR5cGVzIiBpbiB0aGUgb3V0cHV0CisgIC0tcm9vdD1QQVRIICAgICAgICAgICAgICAgIFBBVEggdG8gdGhlIGtlcm5lbCB0cmVlIHJvb3QKKyAgLS1uby1zdW1tYXJ5ICAgICAgICAgICAgICAgc3VwcHJlc3MgdGhlIHBlci1maWxlIHN1bW1hcnkKKyAgLS1tYWlsYmFjayAgICAgICAgICAgICAgICAgb25seSBwcm9kdWNlIGEgcmVwb3J0IGluIGNhc2Ugb2Ygd2FybmluZ3MvZXJyb3JzCisgIC0tc3VtbWFyeS1maWxlICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGZpbGVuYW1lIGluIHN1bW1hcnkKKyAgLS1kZWJ1ZyBLRVk9WzB8MV0gICAgICAgICAgdHVybiBvbi9vZmYgZGVidWdnaW5nIG9mIEtFWSwgd2hlcmUgS0VZIGlzIG9uZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzJywgJ3Bvc3NpYmxlJywgJ3R5cGUnLCBhbmQgJ2F0dHInIChkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsbCBvZmYpCisgIC0tdGVzdC1vbmx5PVdPUkQgICAgICAgICAgIHJlcG9ydCBvbmx5IHdhcm5pbmdzL2Vycm9ycyBjb250YWluaW5nIFdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbGx5CisgIC1oLCAtLWhlbHAsIC0tdmVyc2lvbiAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisKK1doZW4gRklMRSBpcyAtIHJlYWQgc3RhbmRhcmQgaW5wdXQuCitFT00KKworCWV4aXQoJGV4aXRjb2RlKTsKK30KKworbXkgJGNvbmYgPSB3aGljaF9jb25mKCRjb25maWd1cmF0aW9uX2ZpbGUpOworaWYgKC1mICRjb25mKSB7CisJbXkgQGNvbmZfYXJnczsKKwlvcGVuKG15ICRjb25mZmlsZSwgJzwnLCAiJGNvbmYiKQorCSAgICBvciB3YXJuICIkUDogQ2FuJ3QgZmluZCBhIHJlYWRhYmxlICRjb25maWd1cmF0aW9uX2ZpbGUgZmlsZSAkIVxuIjsKKworCXdoaWxlICg8JGNvbmZmaWxlPikgeworCQlteSAkbGluZSA9ICRfOworCisJCSRsaW5lID1+IHMvXHMqXG4/JC8vZzsKKwkJJGxpbmUgPX4gcy9eXHMqLy9nOworCQkkbGluZSA9fiBzL1xzKy8gL2c7CisKKwkJbmV4dCBpZiAoJGxpbmUgPX4gbS9eXHMqIy8pOworCQluZXh0IGlmICgkbGluZSA9fiBtL15ccyokLyk7CisKKwkJbXkgQHdvcmRzID0gc3BsaXQoIiAiLCAkbGluZSk7CisJCWZvcmVhY2ggbXkgJHdvcmQgKEB3b3JkcykgeworCQkJbGFzdCBpZiAoJHdvcmQgPX4gbS9eIy8pOworCQkJcHVzaCAoQGNvbmZfYXJncywgJHdvcmQpOworCQl9CisJfQorCWNsb3NlKCRjb25mZmlsZSk7CisJdW5zaGlmdChAQVJHViwgQGNvbmZfYXJncykgaWYgQGNvbmZfYXJnczsKK30KKworR2V0T3B0aW9ucygKKwkncXxxdWlldCsnCT0+IFwkcXVpZXQsCisJJ3RyZWUhJwkJPT4gXCR0cmVlLAorCSdzaWdub2ZmIScJPT4gXCRjaGtfc2lnbm9mZiwKKwkncGF0Y2ghJwk9PiBcJGNoa19wYXRjaCwKKwknZW1hY3MhJwk9PiBcJGVtYWNzLAorCSd0ZXJzZSEnCT0+IFwkdGVyc2UsCisJJ2Z8ZmlsZSEnCT0+IFwkZmlsZSwKKwknc3ViamVjdGl2ZSEnCT0+IFwkY2hlY2ssCisJJ3N0cmljdCEnCT0+IFwkY2hlY2ssCisJJ2lnbm9yZT1zJwk9PiBcQGlnbm9yZSwKKwknc2hvdy10eXBlcyEnCT0+IFwkc2hvd190eXBlcywKKwkncm9vdD1zJwk9PiBcJHJvb3QsCisJJ3N1bW1hcnkhJwk9PiBcJHN1bW1hcnksCisJJ21haWxiYWNrIScJPT4gXCRtYWlsYmFjaywKKwknc3VtbWFyeS1maWxlIScJPT4gXCRzdW1tYXJ5X2ZpbGUsCisKKwknZGVidWc9cycJPT4gXCVkZWJ1ZywKKwkndGVzdC1vbmx5PXMnCT0+IFwkdHN0X29ubHksCisJJ2h8aGVscCcJPT4gXCRoZWxwLAorCSd2ZXJzaW9uJwk9PiBcJGhlbHAKKykgb3IgaGVscCgxKTsKKworaGVscCgwKSBpZiAoJGhlbHApOworCitteSAkZXhpdCA9IDA7CisKK2lmICgkI0FSR1YgPCAwKSB7CisJcHJpbnQgIiRQOiBubyBpbnB1dCBmaWxlc1xuIjsKKwlleGl0KDEpOworfQorCitAaWdub3JlID0gc3BsaXQoLywvLCBqb2luKCcsJyxAaWdub3JlKSk7Citmb3JlYWNoIG15ICR3b3JkIChAaWdub3JlKSB7CisJJHdvcmQgPX4gcy9ccypcbj8kLy9nOworCSR3b3JkID1+IHMvXlxzKi8vZzsKKwkkd29yZCA9fiBzL1xzKy8gL2c7CisJJHdvcmQgPX4gdHIvW2Etel0vW0EtWl0vOworCisJbmV4dCBpZiAoJHdvcmQgPX4gbS9eXHMqIy8pOworCW5leHQgaWYgKCR3b3JkID1+IG0vXlxzKiQvKTsKKworCSRpZ25vcmVfdHlwZXskd29yZH0rKzsKK30KKworbXkgJGRiZ192YWx1ZXMgPSAwOworbXkgJGRiZ19wb3NzaWJsZSA9IDA7CitteSAkZGJnX3R5cGUgPSAwOworbXkgJGRiZ19hdHRyID0gMDsKK2ZvciBteSAka2V5IChrZXlzICVkZWJ1ZykgeworCSMjIG5vIGNyaXRpYworCWV2YWwgIlwke2RiZ18ka2V5fSA9ICckZGVidWd7JGtleX0nOyI7CisJZGllICIkQCIgaWYgKCRAKTsKK30KKworbXkgJHJwdF9jbGVhbmVycyA9IDA7CisKK2lmICgkdGVyc2UpIHsKKwkkZW1hY3MgPSAxOworCSRxdWlldCsrOworfQorCitpZiAoJHRyZWUpIHsKKwlpZiAoZGVmaW5lZCAkcm9vdCkgeworCQlpZiAoIXRvcF9vZl9rZXJuZWxfdHJlZSgkcm9vdCkpIHsKKwkJCWRpZSAiJFA6ICRyb290OiAtLXJvb3QgZG9lcyBub3QgcG9pbnQgYXQgYSB2YWxpZCB0cmVlXG4iOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHRvcF9vZl9rZXJuZWxfdHJlZSgnLicpKSB7CisJCQkkcm9vdCA9ICcuJzsKKwkJfSBlbHNpZiAoJDAgPX4gbUAoLiopL3NjcmlwdHMvW14vXSokQCAmJgorCQkJCQkJdG9wX29mX2tlcm5lbF90cmVlKCQxKSkgeworCQkJJHJvb3QgPSAkMTsKKwkJfQorCX0KKworCWlmICghZGVmaW5lZCAkcm9vdCkgeworCQlwcmludCAiTXVzdCBiZSBydW4gZnJvbSB0aGUgdG9wLWxldmVsIGRpci4gb2YgYSBrZXJuZWwgdHJlZVxuIjsKKwkJZXhpdCgyKTsKKwl9Cit9CisKK215ICRlbWl0dGVkX2NvcnJ1cHQgPSAwOworCitvdXIgJElkZW50CT0gcXJ7CisJCQlbQS1aYS16X11bQS1aYS16XGRfXSoKKwkJCSg/OlxzKlwjXCNccypbQS1aYS16X11bQS1aYS16XGRfXSopKgorCQl9eDsKK291ciAkU3RvcmFnZQk9IHFye2V4dGVybnxzdGF0aWN8YXNtbGlua2FnZX07CitvdXIgJFNwYXJzZQk9IHFyeworCQkJX191c2VyfAorCQkJX19rZXJuZWx8CisJCQlfX2ZvcmNlfAorCQkJX19pb21lbXwKKwkJCV9fbXVzdF9jaGVja3wKKwkJCV9faW5pdF9yZWZva3wKKwkJCV9fa3Byb2Jlc3wKKwkJCV9fcmVmfAorCQkJX19yY3UKKwkJfXg7CisKKyMgTm90ZXMgdG8gJEF0dHJpYnV0ZToKKyMgV2UgbmVlZCBcYiBhZnRlciAnaW5pdCcgb3RoZXJ3aXNlICdpbml0Y29uc3QnIHdpbGwgY2F1c2UgYSBmYWxzZSBwb3NpdGl2ZSBpbiBhIGNoZWNrCitvdXIgJEF0dHJpYnV0ZQk9IHFyeworCQkJY29uc3R8CisJCQlfX3BlcmNwdXwKKwkJCV9fbm9jYXN0fAorCQkJX19zYWZlfAorCQkJX19iaXR3aXNlX198CisJCQlfX3BhY2tlZF9ffAorCQkJX19wYWNrZWQyX198CisJCQlfX25ha2VkfAorCQkJX19tYXliZV91bnVzZWR8CisJCQlfX2Fsd2F5c191bnVzZWR8CisJCQlfX25vcmV0dXJufAorCQkJX191c2VkfAorCQkJX19jb2xkfAorCQkJX19ub2Nsb25lfAorCQkJX19kZXByZWNhdGVkfAorCQkJX19yZWFkX21vc3RseXwKKwkJCV9fa3Byb2Jlc3wKKwkJCV9fKD86bWVtfGNwdXxkZXZ8KSg/OmluaXRkYXRhfGluaXRjb25zdHxpbml0XGIpfAorCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkfAorCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcHwKKwkJCV9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXB8CisJCQlfX3dlYWsKKwkJICB9eDsKK291ciAkTW9kaWZpZXI7CitvdXIgJElubGluZQk9IHFye2lubGluZXxfX2Fsd2F5c19pbmxpbmV8bm9pbmxpbmV9Oworb3VyICRNZW1iZXIJPSBxcnstPiRJZGVudHxcLiRJZGVudHxcW1teXV0qXF19Oworb3VyICRMdmFsCT0gcXJ7JElkZW50KD86JE1lbWJlcikqfTsKKworb3VyICRDb25zdGFudAk9IHFyeyg/OlswLTldK3wweFswLTlhLWZBLUZdKylbVUxdKn07CitvdXIgJEFzc2lnbm1lbnQJPSBxcnsoPzpcKlw9fC89fCU9fFwrPXwtPXw8PD18Pj49fCY9fFxePXxcfD18PSl9Oworb3VyICRDb21wYXJlICAgID0gcXJ7PD18Pj18PT18IT18PHw+fTsKK291ciAkT3BlcmF0b3JzCT0gcXJ7CisJCQk8PXw+PXw9PXwhPXwKKwkJCT0+fC0+fDw8fD4+fDx8PnwhfH58CisJCQkmJnxcfFx8fCx8XF58XCtcK3wtLXwmfFx8fFwrfC18XCp8XC98JQorCQkgIH14OworCitvdXIgJE5vbnB0clR5cGU7CitvdXIgJFR5cGU7CitvdXIgJERlY2xhcmU7CisKK291ciAkVVRGOAk9IHFyIHsKKwlbXHgwOVx4MEFceDBEXHgyMC1ceDdFXSAgICAgICAgICAgICAgIyBBU0NJSQorCXwgW1x4QzItXHhERl1bXHg4MC1ceEJGXSAgICAgICAgICAgICAjIG5vbi1vdmVybG9uZyAyLWJ5dGUKKwl8ICBceEUwW1x4QTAtXHhCRl1bXHg4MC1ceEJGXSAgICAgICAgIyBleGNsdWRpbmcgb3ZlcmxvbmdzCisJfCBbXHhFMS1ceEVDXHhFRVx4RUZdW1x4ODAtXHhCRl17Mn0gICMgc3RyYWlnaHQgMy1ieXRlCisJfCAgXHhFRFtceDgwLVx4OUZdW1x4ODAtXHhCRl0gICAgICAgICMgZXhjbHVkaW5nIHN1cnJvZ2F0ZXMKKwl8ICBceEYwW1x4OTAtXHhCRl1bXHg4MC1ceEJGXXsyfSAgICAgIyBwbGFuZXMgMS0zCisJfCBbXHhGMS1ceEYzXVtceDgwLVx4QkZdezN9ICAgICAgICAgICMgcGxhbmVzIDQtMTUKKwl8ICBceEY0W1x4ODAtXHg4Rl1bXHg4MC1ceEJGXXsyfSAgICAgIyBwbGFuZSAxNgorfXg7CisKK291ciAkdHlwZVR5cGVkZWZzID0gcXJ7KD94OgorCSg/Ol9fKT8oPzp1fHN8YmV8bGUpKD86OHwxNnwzMnw2NCl8CisJYXRvbWljX3QKKyl9OworCitvdXIgJGxvZ0Z1bmN0aW9ucyA9IHFyeyg/eDoKKwlwcmludGsoPzpfcmF0ZWxpbWl0ZWR8X29uY2V8KXwKKwlbYS16MC05XStfKD86cHJpbnRrfGVtZXJnfGFsZXJ0fGNyaXR8ZXJyfHdhcm5pbmd8d2Fybnxub3RpY2V8aW5mb3xkZWJ1Z3xkYmd8dmRiZ3xkZXZlbHxjb250fFdBUk4pKD86X3JhdGVsaW1pdGVkfF9vbmNlfCl8CisJV0FSTig/Ol9SQVRFTElNSVR8X09OQ0V8KXwKKwlwYW5pY3wKKwlNT0RVTEVfW0EtWl9dKworKX07CisKK291ciAkc2lnbmF0dXJlX3RhZ3MgPSBxcnsoP3hpOgorCVNpZ25lZC1vZmYtYnk6fAorCUFja2VkLWJ5OnwKKwlUZXN0ZWQtYnk6fAorCVJldmlld2VkLWJ5OnwKKwlSZXBvcnRlZC1ieTp8CisJVG86fAorCUNjOgorKX07CisKK291ciBAdHlwZUxpc3QgPSAoCisJcXJ7dm9pZH0sCisJcXJ7KD86dW5zaWduZWRccyspP2NoYXJ9LAorCXFyeyg/OnVuc2lnbmVkXHMrKT9zaG9ydH0sCisJcXJ7KD86dW5zaWduZWRccyspP2ludH0sCisJcXJ7KD86dW5zaWduZWRccyspP2xvbmd9LAorCXFyeyg/OnVuc2lnbmVkXHMrKT9sb25nXHMraW50fSwKKwlxcnsoPzp1bnNpZ25lZFxzKyk/bG9uZ1xzK2xvbmd9LAorCXFyeyg/OnVuc2lnbmVkXHMrKT9sb25nXHMrbG9uZ1xzK2ludH0sCisJcXJ7dW5zaWduZWR9LAorCXFye2Zsb2F0fSwKKwlxcntkb3VibGV9LAorCXFye2Jvb2x9LAorCXFye3N0cnVjdFxzKyRJZGVudH0sCisJcXJ7dW5pb25ccyskSWRlbnR9LAorCXFye2VudW1ccyskSWRlbnR9LAorCXFyeyR7SWRlbnR9X3R9LAorCXFyeyR7SWRlbnR9X2hhbmRsZXJ9LAorCXFyeyR7SWRlbnR9X2hhbmRsZXJfZm59LAorKTsKK291ciBAbW9kaWZpZXJMaXN0ID0gKAorCXFye2Zhc3RjYWxsfSwKKyk7CisKK291ciAkYWxsb3dlZF9hc21faW5jbHVkZXMgPSBxcnsoP3g6CisJaXJxfAorCW1lbW9yeQorKX07CisjIG1lbW9yeS5oOiBBUk0gaGFzIGEgY3VzdG9tIG9uZQorCitzdWIgYnVpbGRfdHlwZXMgeworCW15ICRtb2RzID0gIig/eDogIFxuIiAuIGpvaW4oInxcbiAgIiwgQG1vZGlmaWVyTGlzdCkgLiAiXG4pIjsKKwlteSAkYWxsID0gIig/eDogIFxuIiAuIGpvaW4oInxcbiAgIiwgQHR5cGVMaXN0KSAuICJcbikiOworCSRNb2RpZmllcgk9IHFyeyg/OiRBdHRyaWJ1dGV8JFNwYXJzZXwkbW9kcyl9OworCSROb25wdHJUeXBlCT0gcXJ7CisJCQkoPzokTW9kaWZpZXJccyt8Y29uc3RccyspKgorCQkJKD86CisJCQkJKD86dHlwZW9mfF9fdHlwZW9mX18pXHMqXChccypcKipccyokSWRlbnRccypcKXwKKwkJCQkoPzokdHlwZVR5cGVkZWZzXGIpfAorCQkJCSg/OiR7YWxsfVxiKQorCQkJKQorCQkJKD86XHMrJE1vZGlmaWVyfFxzK2NvbnN0KSoKKwkJICB9eDsKKwkkVHlwZQk9IHFyeworCQkJJE5vbnB0clR5cGUKKwkJCSg/Oltcc1wqXStccypjb25zdHxbXHNcKl0rfCg/OlxzKlxbXHMqXF0pKyk/CisJCQkoPzpccyskSW5saW5lfFxzKyRNb2RpZmllcikqCisJCSAgfXg7CisJJERlY2xhcmUJPSBxcnsoPzokU3RvcmFnZVxzKyk/JFR5cGV9OworfQorYnVpbGRfdHlwZXMoKTsKKworb3VyICRtYXRjaF9iYWxhbmNlZF9wYXJlbnRoZXNlcyA9IHFyLyhcKCg/OlteXChcKV0rfCgtMSkpKlwpKS87CisKK291ciAkVHlwZWNhc3QJPSBxcntccyooXChccyokTm9ucHRyVHlwZVxzKlwpKXswLDF9XHMqfTsKK291ciAkTHZhbE9yRnVuYwk9IHFyeygkTHZhbClccyooJG1hdGNoX2JhbGFuY2VkX3BhcmVudGhlc2VzezAsMX0pXHMqfTsKKworc3ViIGRlcGFyZW50aGVzaXplIHsKKwlteSAoJHN0cmluZykgPSBAXzsKKwlyZXR1cm4gIiIgaWYgKCFkZWZpbmVkKCRzdHJpbmcpKTsKKwkkc3RyaW5nID1+IHNAXlxzKlwoXHMqQEBnOworCSRzdHJpbmcgPX4gc0BccypcKVxzKiRAQGc7CisJJHN0cmluZyA9fiBzQFxzK0AgQGc7CisJcmV0dXJuICRzdHJpbmc7Cit9CisKKyRjaGtfc2lnbm9mZiA9IDAgaWYgKCRmaWxlKTsKKworbXkgQGRlcF9pbmNsdWRlcyA9ICgpOworbXkgQGRlcF9mdW5jdGlvbnMgPSAoKTsKK215ICRyZW1vdmFsID0gIkRvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCI7CitpZiAoJHRyZWUgJiYgLWYgIiRyb290LyRyZW1vdmFsIikgeworCW9wZW4obXkgJFJFTU9WRSwgJzwnLCAiJHJvb3QvJHJlbW92YWwiKSB8fAorCQkJCWRpZSAiJFA6ICRyZW1vdmFsOiBvcGVuIGZhaWxlZCAtICQhXG4iOworCXdoaWxlICg8JFJFTU9WRT4pIHsKKwkJaWYgKC9eQ2hlY2s6XHMrKC4qXFMpLykgeworCQkJZm9yIG15ICRlbnRyeSAoc3BsaXQoL1ssIF0rLywgJDEpKSB7CisJCQkJaWYgKCRlbnRyeSA9fiBtQGluY2x1ZGUvKC4qKUApIHsKKwkJCQkJcHVzaChAZGVwX2luY2x1ZGVzLCAkMSk7CisKKwkJCQl9IGVsc2lmICgkZW50cnkgIX4gbUAvQCkgeworCQkJCQlwdXNoKEBkZXBfZnVuY3Rpb25zLCAkZW50cnkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwljbG9zZSgkUkVNT1ZFKTsKK30KKworbXkgQHJhd2xpbmVzID0gKCk7CitteSBAbGluZXMgPSAoKTsKK215ICR2bmFtZTsKK2ZvciBteSAkZmlsZW5hbWUgKEBBUkdWKSB7CisJbXkgJEZJTEU7CisJaWYgKCRmaWxlKSB7CisJCW9wZW4oJEZJTEUsICctfCcsICJkaWZmIC11IC9kZXYvbnVsbCAkZmlsZW5hbWUiKSB8fAorCQkJZGllICIkUDogJGZpbGVuYW1lOiBkaWZmIGZhaWxlZCAtICQhXG4iOworCX0gZWxzaWYgKCRmaWxlbmFtZSBlcSAnLScpIHsKKwkJb3BlbigkRklMRSwgJzwmU1RESU4nKTsKKwl9IGVsc2UgeworCQlvcGVuKCRGSUxFLCAnPCcsICIkZmlsZW5hbWUiKSB8fAorCQkJZGllICIkUDogJGZpbGVuYW1lOiBvcGVuIGZhaWxlZCAtICQhXG4iOworCX0KKwlpZiAoJGZpbGVuYW1lIGVxICctJykgeworCQkkdm5hbWUgPSAnWW91ciBwYXRjaCc7CisJfSBlbHNlIHsKKwkJJHZuYW1lID0gJGZpbGVuYW1lOworCX0KKwl3aGlsZSAoPCRGSUxFPikgeworCQljaG9tcDsKKwkJcHVzaChAcmF3bGluZXMsICRfKTsKKwl9CisJY2xvc2UoJEZJTEUpOworCWlmICghcHJvY2VzcygkZmlsZW5hbWUpKSB7CisJCSRleGl0ID0gMTsKKwl9CisJQHJhd2xpbmVzID0gKCk7CisJQGxpbmVzID0gKCk7Cit9CisKK2V4aXQoJGV4aXQpOworCitzdWIgdG9wX29mX2tlcm5lbF90cmVlIHsKKwlteSAoJHJvb3QpID0gQF87CisKKwlteSBAdHJlZV9jaGVjayA9ICgKKwkJIkNPUFlJTkciLCAiQ1JFRElUUyIsICJLYnVpbGQiLCAiTUFJTlRBSU5FUlMiLCAiTWFrZWZpbGUiLAorCQkiUkVBRE1FIiwgIkRvY3VtZW50YXRpb24iLCAiYXJjaCIsICJpbmNsdWRlIiwgImRyaXZlcnMiLAorCQkiZnMiLCAiaW5pdCIsICJpcGMiLCAia2VybmVsIiwgImxpYiIsICJzY3JpcHRzIiwKKwkpOworCisJZm9yZWFjaCBteSAkY2hlY2sgKEB0cmVlX2NoZWNrKSB7CisJCWlmICghIC1lICRyb290IC4gJy8nIC4gJGNoZWNrKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKKyAgICB9CisKK3N1YiBwYXJzZV9lbWFpbCB7CisJbXkgKCRmb3JtYXR0ZWRfZW1haWwpID0gQF87CisKKwlteSAkbmFtZSA9ICIiOworCW15ICRhZGRyZXNzID0gIiI7CisJbXkgJGNvbW1lbnQgPSAiIjsKKworCWlmICgkZm9ybWF0dGVkX2VtYWlsID1+IC9eKC4qKTwoXFMrXEBcUyspPiguKikkLykgeworCQkkbmFtZSA9ICQxOworCQkkYWRkcmVzcyA9ICQyOworCQkkY29tbWVudCA9ICQzIGlmIGRlZmluZWQgJDM7CisJfSBlbHNpZiAoJGZvcm1hdHRlZF9lbWFpbCA9fiAvXlxzKjwoXFMrXEBcUyspPiguKikkLykgeworCQkkYWRkcmVzcyA9ICQxOworCQkkY29tbWVudCA9ICQyIGlmIGRlZmluZWQgJDI7CisJfSBlbHNpZiAoJGZvcm1hdHRlZF9lbWFpbCA9fiAvKFxTK1xAXFMrKSguKikkLykgeworCQkkYWRkcmVzcyA9ICQxOworCQkkY29tbWVudCA9ICQyIGlmIGRlZmluZWQgJDI7CisJCSRmb3JtYXR0ZWRfZW1haWwgPX4gcy8kYWRkcmVzcy4qJC8vOworCQkkbmFtZSA9ICRmb3JtYXR0ZWRfZW1haWw7CisJCSRuYW1lID1+IHMvXlxzK3xccyskLy9nOworCQkkbmFtZSA9fiBzL15cInxcIiQvL2c7CisJCSMgSWYgdGhlcmUncyBhIG5hbWUgbGVmdCBhZnRlciBzdHJpcHBpbmcgc3BhY2VzIGFuZAorCQkjIGxlYWRpbmcgcXVvdGVzLCBhbmQgdGhlIGFkZHJlc3MgZG9lc24ndCBoYXZlIGJvdGgKKwkJIyBsZWFkaW5nIGFuZCB0cmFpbGluZyBhbmdsZSBicmFja2V0cywgdGhlIGFkZHJlc3MKKwkJIyBpcyBpbnZhbGlkLiBpZToKKwkJIyAgICJqb2Ugc21pdGggam9lQHNtaXRoLmNvbSIgYmFkCisJCSMgICAiam9lIHNtaXRoIDxqb2VAc21pdGguY29tIiBiYWQKKwkJaWYgKCRuYW1lIG5lICIiICYmICRhZGRyZXNzICF+IC9ePFtePl0rPiQvKSB7CisJCQkkbmFtZSA9ICIiOworCQkJJGFkZHJlc3MgPSAiIjsKKwkJCSRjb21tZW50ID0gIiI7CisJCX0KKwl9CisKKwkkbmFtZSA9fiBzL15ccyt8XHMrJC8vZzsKKwkkbmFtZSA9fiBzL15cInxcIiQvL2c7CisJJGFkZHJlc3MgPX4gcy9eXHMrfFxzKyQvL2c7CisJJGFkZHJlc3MgPX4gcy9eXDx8XD4kLy9nOworCisJaWYgKCRuYW1lID1+IC9bXlx3IFwtXS9pKSB7ICMjaGFzICJtdXN0IHF1b3RlIiBjaGFycworCQkkbmFtZSA9fiBzLyg/PCFcXCkiL1xcIi9nOyAjI2VzY2FwZSBxdW90ZXMKKwkJJG5hbWUgPSAiXCIkbmFtZVwiIjsKKwl9CisKKwlyZXR1cm4gKCRuYW1lLCAkYWRkcmVzcywgJGNvbW1lbnQpOworfQorCitzdWIgZm9ybWF0X2VtYWlsIHsKKwlteSAoJG5hbWUsICRhZGRyZXNzKSA9IEBfOworCisJbXkgJGZvcm1hdHRlZF9lbWFpbDsKKworCSRuYW1lID1+IHMvXlxzK3xccyskLy9nOworCSRuYW1lID1+IHMvXlwifFwiJC8vZzsKKwkkYWRkcmVzcyA9fiBzL15ccyt8XHMrJC8vZzsKKworCWlmICgkbmFtZSA9fiAvW15cdyBcLV0vaSkgeyAjI2hhcyAibXVzdCBxdW90ZSIgY2hhcnMKKwkJJG5hbWUgPX4gcy8oPzwhXFwpIi9cXCIvZzsgIyNlc2NhcGUgcXVvdGVzCisJCSRuYW1lID0gIlwiJG5hbWVcIiI7CisJfQorCisJaWYgKCIkbmFtZSIgZXEgIiIpIHsKKwkJJGZvcm1hdHRlZF9lbWFpbCA9ICIkYWRkcmVzcyI7CisJfSBlbHNlIHsKKwkJJGZvcm1hdHRlZF9lbWFpbCA9ICIkbmFtZSA8JGFkZHJlc3M+IjsKKwl9CisKKwlyZXR1cm4gJGZvcm1hdHRlZF9lbWFpbDsKK30KKworc3ViIHdoaWNoX2NvbmYgeworCW15ICgkY29uZikgPSBAXzsKKworCWZvcmVhY2ggbXkgJHBhdGggKHNwbGl0KC86LywgIi46JEVOVntIT01FfTouc2NyaXB0cyIpKSB7CisJCWlmICgtZSAiJHBhdGgvJGNvbmYiKSB7CisJCQlyZXR1cm4gIiRwYXRoLyRjb25mIjsKKwkJfQorCX0KKworCXJldHVybiAiIjsKK30KKworc3ViIGV4cGFuZF90YWJzIHsKKwlteSAoJHN0cikgPSBAXzsKKworCW15ICRyZXMgPSAnJzsKKwlteSAkbiA9IDA7CisJZm9yIG15ICRjIChzcGxpdCgvLywgJHN0cikpIHsKKwkJaWYgKCRjIGVxICJcdCIpIHsKKwkJCSRyZXMgLj0gJyAnOworCQkJJG4rKzsKKwkJCWZvciAoOyAoJG4gJSA4KSAhPSAwOyAkbisrKSB7CisJCQkJJHJlcyAuPSAnICc7CisJCQl9CisJCQluZXh0OworCQl9CisJCSRyZXMgLj0gJGM7CisJCSRuKys7CisJfQorCisJcmV0dXJuICRyZXM7Cit9CitzdWIgY29weV9zcGFjaW5nIHsKKwkobXkgJHJlcyA9IHNoaWZ0KSA9fiB0ci9cdC8gL2M7CisJcmV0dXJuICRyZXM7Cit9CisKK3N1YiBsaW5lX3N0YXRzIHsKKwlteSAoJGxpbmUpID0gQF87CisKKwkjIERyb3AgdGhlIGRpZmYgbGluZSBsZWFkZXIgYW5kIGV4cGFuZCB0YWJzCisJJGxpbmUgPX4gcy9eLi8vOworCSRsaW5lID0gZXhwYW5kX3RhYnMoJGxpbmUpOworCisJIyBQaWNrIHRoZSBpbmRlbnQgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGxpbmUuCisJbXkgKCR3aGl0ZSkgPSAoJGxpbmUgPX4gL14oXHMqKS8pOworCisJcmV0dXJuIChsZW5ndGgoJGxpbmUpLCBsZW5ndGgoJHdoaXRlKSk7Cit9CisKK215ICRzYW5pdGlzZV9xdW90ZSA9ICcnOworCitzdWIgc2FuaXRpc2VfbGluZV9yZXNldCB7CisJbXkgKCRpbl9jb21tZW50KSA9IEBfOworCisJaWYgKCRpbl9jb21tZW50KSB7CisJCSRzYW5pdGlzZV9xdW90ZSA9ICcqLyc7CisJfSBlbHNlIHsKKwkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJfQorfQorc3ViIHNhbml0aXNlX2xpbmUgeworCW15ICgkbGluZSkgPSBAXzsKKworCW15ICRyZXMgPSAnJzsKKwlteSAkbCA9ICcnOworCisJbXkgJHFsZW4gPSAwOworCW15ICRvZmYgPSAwOworCW15ICRjOworCisJIyBBbHdheXMgY29weSBvdmVyIHRoZSBkaWZmIG1hcmtlci4KKwkkcmVzID0gc3Vic3RyKCRsaW5lLCAwLCAxKTsKKworCWZvciAoJG9mZiA9IDE7ICRvZmYgPCBsZW5ndGgoJGxpbmUpOyAkb2ZmKyspIHsKKwkJJGMgPSBzdWJzdHIoJGxpbmUsICRvZmYsIDEpOworCisJCSMgQ29tbWVudHMgd2UgYXJlIHdhY2tpbmcgY29tcGxldGx5IGluY2x1ZGluZyB0aGUgYmVnaW4KKwkJIyBhbmQgZW5kLCBhbGwgdG8gJDsuCisJCWlmICgkc2FuaXRpc2VfcXVvdGUgZXEgJycgJiYgc3Vic3RyKCRsaW5lLCAkb2ZmLCAyKSBlcSAnLyonKSB7CisJCQkkc2FuaXRpc2VfcXVvdGUgPSAnKi8nOworCisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMiwgIiQ7JDsiKTsKKwkJCSRvZmYrKzsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnKi8nICYmIHN1YnN0cigkbGluZSwgJG9mZiwgMikgZXEgJyovJykgeworCQkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMiwgIiQ7JDsiKTsKKwkJCSRvZmYrKzsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnJyAmJiBzdWJzdHIoJGxpbmUsICRvZmYsIDIpIGVxICcvLycpIHsKKwkJCSRzYW5pdGlzZV9xdW90ZSA9ICcvLyc7CisKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAyLCAkc2FuaXRpc2VfcXVvdGUpOworCQkJJG9mZisrOworCQkJbmV4dDsKKwkJfQorCisJCSMgQSBcIGluIGEgc3RyaW5nIG1lYW5zIGlnbm9yZSB0aGUgbmV4dCBjaGFyYWN0ZXIuCisJCWlmICgoJHNhbml0aXNlX3F1b3RlIGVxICInIiB8fCAkc2FuaXRpc2VfcXVvdGUgZXEgJyInKSAmJgorCQkgICAgJGMgZXEgIlxcIikgeworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDIsICdYWCcpOworCQkJJG9mZisrOworCQkJbmV4dDsKKwkJfQorCQkjIFJlZ3VsYXIgcXVvdGVzLgorCQlpZiAoJGMgZXEgIiciIHx8ICRjIGVxICciJykgeworCQkJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnJykgeworCQkJCSRzYW5pdGlzZV9xdW90ZSA9ICRjOworCisJCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICRjKTsKKwkJCQluZXh0OworCQkJfSBlbHNpZiAoJHNhbml0aXNlX3F1b3RlIGVxICRjKSB7CisJCQkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJCQl9CisJCX0KKworCQkjcHJpbnQgImM8JGM+IFNRPCRzYW5pdGlzZV9xdW90ZT5cbiI7CisJCWlmICgkb2ZmICE9IDAgJiYgJHNhbml0aXNlX3F1b3RlIGVxICcqLycgJiYgJGMgbmUgIlx0IikgeworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICQ7KTsKKwkJfSBlbHNpZiAoJG9mZiAhPSAwICYmICRzYW5pdGlzZV9xdW90ZSBlcSAnLy8nICYmICRjIG5lICJcdCIpIHsKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAkOyk7CisJCX0gZWxzaWYgKCRvZmYgIT0gMCAmJiAkc2FuaXRpc2VfcXVvdGUgJiYgJGMgbmUgIlx0IikgeworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICdYJyk7CisJCX0gZWxzZSB7CisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMSwgJGMpOworCQl9CisJfQorCisJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnLy8nKSB7CisJCSRzYW5pdGlzZV9xdW90ZSA9ICcnOworCX0KKworCSMgVGhlIHBhdGhuYW1lIG9uIGEgI2luY2x1ZGUgbWF5IGJlIHN1cnJvdW5kZWQgYnkgJzwnIGFuZCAnPicuCisJaWYgKCRyZXMgPX4gL14uXHMqXCNccyppbmNsdWRlXHMrXDwoLiopXD4vKSB7CisJCW15ICRjbGVhbiA9ICdYJyB4IGxlbmd0aCgkMSk7CisJCSRyZXMgPX4gc0BcPC4qXD5APCRjbGVhbj5AOworCisJIyBUaGUgd2hvbGUgb2YgYSAjZXJyb3IgaXMgYSBzdHJpbmcuCisJfSBlbHNpZiAoJHJlcyA9fiAvXi5ccypcI1xzKig/OmVycm9yfHdhcm5pbmcpXHMrKC4qKVxiLykgeworCQlteSAkY2xlYW4gPSAnWCcgeCBsZW5ndGgoJDEpOworCQkkcmVzID1+IHNAKFwjXHMqKD86ZXJyb3J8d2FybmluZylccyspLipAJDEkY2xlYW5AOworCX0KKworCXJldHVybiAkcmVzOworfQorCitzdWIgY3R4X3N0YXRlbWVudF9ibG9jayB7CisJbXkgKCRsaW5lbnIsICRyZW1haW4sICRvZmYpID0gQF87CisJbXkgJGxpbmUgPSAkbGluZW5yIC0gMTsKKwlteSAkYmxrID0gJyc7CisJbXkgJHNvZmYgPSAkb2ZmOworCW15ICRjb2ZmID0gJG9mZiAtIDE7CisJbXkgJGNvZmZfc2V0ID0gMDsKKworCW15ICRsb2ZmID0gMDsKKworCW15ICR0eXBlID0gJyc7CisJbXkgJGxldmVsID0gMDsKKwlteSBAc3RhY2sgPSAoKTsKKwlteSAkcDsKKwlteSAkYzsKKwlteSAkbGVuID0gMDsKKworCW15ICRyZW1haW5kZXI7CisJd2hpbGUgKDEpIHsKKwkJQHN0YWNrID0gKFsnJywgMF0pIGlmICgkI3N0YWNrID09IC0xKTsKKworCQkjd2FybiAiQ1NCOiBibGs8JGJsaz4gcmVtYWluPCRyZW1haW4+XG4iOworCQkjIElmIHdlIGFyZSBhYm91dCB0byBkcm9wIG9mZiB0aGUgZW5kLCBwdWxsIGluIG1vcmUKKwkJIyBjb250ZXh0LgorCQlpZiAoJG9mZiA+PSAkbGVuKSB7CisJCQlmb3IgKDsgJHJlbWFpbiA+IDA7ICRsaW5lKyspIHsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkbGluZXNbJGxpbmVdKTsKKwkJCQluZXh0IGlmICgkbGluZXNbJGxpbmVdID1+IC9eLS8pOworCQkJCSRyZW1haW4tLTsKKwkJCQkkbG9mZiA9ICRsZW47CisJCQkJJGJsayAuPSAkbGluZXNbJGxpbmVdIC4gIlxuIjsKKwkJCQkkbGVuID0gbGVuZ3RoKCRibGspOworCQkJCSRsaW5lKys7CisJCQkJbGFzdDsKKwkJCX0KKwkJCSMgQmFpbCBpZiB0aGVyZSBpcyBubyBmdXJ0aGVyIGNvbnRleHQuCisJCQkjd2FybiAiQ1NCOiBibGs8JGJsaz4gb2ZmPCRvZmY+IGxlbjwkbGVuPlxuIjsKKwkJCWlmICgkb2ZmID49ICRsZW4pIHsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCSRwID0gJGM7CisJCSRjID0gc3Vic3RyKCRibGssICRvZmYsIDEpOworCQkkcmVtYWluZGVyID0gc3Vic3RyKCRibGssICRvZmYpOworCisJCSN3YXJuICJDU0I6IGM8JGM+IHR5cGU8JHR5cGU+IGxldmVsPCRsZXZlbD4gcmVtYWluZGVyPCRyZW1haW5kZXI+IGNvZmZfc2V0PCRjb2ZmX3NldD5cbiI7CisKKwkJIyBIYW5kbGUgbmVzdGVkICNpZi8jZWxzZS4KKwkJaWYgKCRyZW1haW5kZXIgPX4gL14jXHMqKD86aWZuZGVmfGlmZGVmfGlmKVxzLykgeworCQkJcHVzaChAc3RhY2ssIFsgJHR5cGUsICRsZXZlbCBdKTsKKwkJfSBlbHNpZiAoJHJlbWFpbmRlciA9fiAvXiNccyooPzplbHNlfGVsaWYpXGIvKSB7CisJCQkoJHR5cGUsICRsZXZlbCkgPSBAeyRzdGFja1skI3N0YWNrIC0gMV19OworCQl9IGVsc2lmICgkcmVtYWluZGVyID1+IC9eI1xzKmVuZGlmXGIvKSB7CisJCQkoJHR5cGUsICRsZXZlbCkgPSBAe3BvcChAc3RhY2spfTsKKwkJfQorCisJCSMgU3RhdGVtZW50IGVuZHMgYXQgdGhlICc7JyBvciBhIGNsb3NlICd9JyBhdCB0aGUKKwkJIyBvdXRlcm1vc3QgbGV2ZWwuCisJCWlmICgkbGV2ZWwgPT0gMCAmJiAkYyBlcSAnOycpIHsKKwkJCWxhc3Q7CisJCX0KKworCQkjIEFuIGVsc2UgaXMgcmVhbGx5IGEgY29uZGl0aW9uYWwgYXMgbG9uZyBhcyBpdHMgbm90IGVsc2UgaWYKKwkJaWYgKCRsZXZlbCA9PSAwICYmICRjb2ZmX3NldCA9PSAwICYmCisJCQkJKCFkZWZpbmVkKCRwKSB8fCAkcCA9fiAvKD86XHN8XH18XCspLykgJiYKKwkJCQkkcmVtYWluZGVyID1+IC9eKGVsc2UpKD86XHN8eykvICYmCisJCQkJJHJlbWFpbmRlciAhfiAvXmVsc2VccytpZlxiLykgeworCQkJJGNvZmYgPSAkb2ZmICsgbGVuZ3RoKCQxKSAtIDE7CisJCQkkY29mZl9zZXQgPSAxOworCQkJI3dhcm4gIkNTQjogbWFyayBjb2ZmPCRjb2ZmPiBzb2ZmPCRzb2ZmPiAxPCQxPlxuIjsKKwkJCSN3YXJuICJbIiAuIHN1YnN0cigkYmxrLCAkc29mZiwgJGNvZmYgLSAkc29mZiArIDEpIC4gIl1cbiI7CisJCX0KKworCQlpZiAoKCR0eXBlIGVxICcnIHx8ICR0eXBlIGVxICcoJykgJiYgJGMgZXEgJygnKSB7CisJCQkkbGV2ZWwrKzsKKwkJCSR0eXBlID0gJygnOworCQl9CisJCWlmICgkdHlwZSBlcSAnKCcgJiYgJGMgZXEgJyknKSB7CisJCQkkbGV2ZWwtLTsKKwkJCSR0eXBlID0gKCRsZXZlbCAhPSAwKT8gJygnIDogJyc7CisKKwkJCWlmICgkbGV2ZWwgPT0gMCAmJiAkY29mZiA8ICRzb2ZmKSB7CisJCQkJJGNvZmYgPSAkb2ZmOworCQkJCSRjb2ZmX3NldCA9IDE7CisJCQkJI3dhcm4gIkNTQjogbWFyayBjb2ZmPCRjb2ZmPlxuIjsKKwkJCX0KKwkJfQorCQlpZiAoKCR0eXBlIGVxICcnIHx8ICR0eXBlIGVxICd7JykgJiYgJGMgZXEgJ3snKSB7CisJCQkkbGV2ZWwrKzsKKwkJCSR0eXBlID0gJ3snOworCQl9CisJCWlmICgkdHlwZSBlcSAneycgJiYgJGMgZXEgJ30nKSB7CisJCQkkbGV2ZWwtLTsKKwkJCSR0eXBlID0gKCRsZXZlbCAhPSAwKT8gJ3snIDogJyc7CisKKwkJCWlmICgkbGV2ZWwgPT0gMCkgeworCQkJCWlmIChzdWJzdHIoJGJsaywgJG9mZiArIDEsIDEpIGVxICc7JykgeworCQkJCQkkb2ZmKys7CisJCQkJfQorCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJJG9mZisrOworCX0KKwkjIFdlIGFyZSB0cnVseSBhdCB0aGUgZW5kLCBzbyBzaHVmZmxlIHRvIHRoZSBuZXh0IGxpbmUuCisJaWYgKCRvZmYgPT0gJGxlbikgeworCQkkbG9mZiA9ICRsZW4gKyAxOworCQkkbGluZSsrOworCQkkcmVtYWluLS07CisJfQorCisJbXkgJHN0YXRlbWVudCA9IHN1YnN0cigkYmxrLCAkc29mZiwgJG9mZiAtICRzb2ZmICsgMSk7CisJbXkgJGNvbmRpdGlvbiA9IHN1YnN0cigkYmxrLCAkc29mZiwgJGNvZmYgLSAkc29mZiArIDEpOworCisJI3dhcm4gIlNUQVRFTUVOVDwkc3RhdGVtZW50PlxuIjsKKwkjd2FybiAiQ09ORElUSU9OPCRjb25kaXRpb24+XG4iOworCisJI3ByaW50ICJjb2ZmPCRjb2ZmPiBzb2ZmPCRvZmY+IGxvZmY8JGxvZmY+XG4iOworCisJcmV0dXJuICgkc3RhdGVtZW50LCAkY29uZGl0aW9uLAorCQkJJGxpbmUsICRyZW1haW4gKyAxLCAkb2ZmIC0gJGxvZmYgKyAxLCAkbGV2ZWwpOworfQorCitzdWIgc3RhdGVtZW50X2xpbmVzIHsKKwlteSAoJHN0bXQpID0gQF87CisKKwkjIFN0cmlwIHRoZSBkaWZmIGxpbmUgcHJlZml4ZXMgYW5kIHJpcCBibGFuayBsaW5lcyBhdCBzdGFydCBhbmQgZW5kLgorCSRzdG10ID1+IHMvKF58XG4pLi8kMS9nOworCSRzdG10ID1+IHMvXlxzKi8vOworCSRzdG10ID1+IHMvXHMqJC8vOworCisJbXkgQHN0bXRfbGluZXMgPSAoJHN0bXQgPX4gL1xuL2cpOworCisJcmV0dXJuICQjc3RtdF9saW5lcyArIDI7Cit9CisKK3N1YiBzdGF0ZW1lbnRfcmF3bGluZXMgeworCW15ICgkc3RtdCkgPSBAXzsKKworCW15IEBzdG10X2xpbmVzID0gKCRzdG10ID1+IC9cbi9nKTsKKworCXJldHVybiAkI3N0bXRfbGluZXMgKyAyOworfQorCitzdWIgc3RhdGVtZW50X2Jsb2NrX3NpemUgeworCW15ICgkc3RtdCkgPSBAXzsKKworCSRzdG10ID1+IHMvKF58XG4pLi8kMS9nOworCSRzdG10ID1+IHMvXlxzKnsvLzsKKwkkc3RtdCA9fiBzL31ccyokLy87CisJJHN0bXQgPX4gcy9eXHMqLy87CisJJHN0bXQgPX4gcy9ccyokLy87CisKKwlteSBAc3RtdF9saW5lcyA9ICgkc3RtdCA9fiAvXG4vZyk7CisJbXkgQHN0bXRfc3RhdGVtZW50cyA9ICgkc3RtdCA9fiAvOy9nKTsKKworCW15ICRzdG10X2xpbmVzID0gJCNzdG10X2xpbmVzICsgMjsKKwlteSAkc3RtdF9zdGF0ZW1lbnRzID0gJCNzdG10X3N0YXRlbWVudHMgKyAxOworCisJaWYgKCRzdG10X2xpbmVzID4gJHN0bXRfc3RhdGVtZW50cykgeworCQlyZXR1cm4gJHN0bXRfbGluZXM7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzdG10X3N0YXRlbWVudHM7CisJfQorfQorCitzdWIgY3R4X3N0YXRlbWVudF9mdWxsIHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbiwgJG9mZikgPSBAXzsKKwlteSAoJHN0YXRlbWVudCwgJGNvbmRpdGlvbiwgJGxldmVsKTsKKworCW15IChAY2h1bmtzKTsKKworCSMgR3JhYiB0aGUgZmlyc3QgY29uZGl0aW9uYWwvYmxvY2sgcGFpci4KKwkoJHN0YXRlbWVudCwgJGNvbmRpdGlvbiwgJGxpbmVuciwgJHJlbWFpbiwgJG9mZiwgJGxldmVsKSA9CisJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVtYWluLCAkb2ZmKTsKKwkjcHJpbnQgIkY6IGM8JGNvbmRpdGlvbj4gczwkc3RhdGVtZW50PiByZW1haW48JHJlbWFpbj5cbiI7CisJcHVzaChAY2h1bmtzLCBbICRjb25kaXRpb24sICRzdGF0ZW1lbnQgXSk7CisJaWYgKCEoJHJlbWFpbiA+IDAgJiYgJGNvbmRpdGlvbiA9fiAvXlxzKig/OlxuWystXSk/XHMqKD86aWZ8ZWxzZXxkbylcYi9zKSkgeworCQlyZXR1cm4gKCRsZXZlbCwgJGxpbmVuciwgQGNodW5rcyk7CisJfQorCisJIyBQdWxsIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uYWwvYmxvY2sgcGFpcnMgYW5kIHNlZSBpZiB0aGV5CisJIyBjb3VsZCBjb250aW51ZSB0aGUgc3RhdGVtZW50LgorCWZvciAoOzspIHsKKwkJKCRzdGF0ZW1lbnQsICRjb25kaXRpb24sICRsaW5lbnIsICRyZW1haW4sICRvZmYsICRsZXZlbCkgPQorCQkJCWN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVuciwgJHJlbWFpbiwgJG9mZik7CisJCSNwcmludCAiQzogYzwkY29uZGl0aW9uPiBzPCRzdGF0ZW1lbnQ+IHJlbWFpbjwkcmVtYWluPlxuIjsKKwkJbGFzdCBpZiAoISgkcmVtYWluID4gMCAmJiAkY29uZGl0aW9uID1+IC9eKD86XHMqXG5bKy1dKSpccyooPzplbHNlfGRvKVxiL3MpKTsKKwkJI3ByaW50ICJDOiBwdXNoXG4iOworCQlwdXNoKEBjaHVua3MsIFsgJGNvbmRpdGlvbiwgJHN0YXRlbWVudCBdKTsKKwl9CisKKwlyZXR1cm4gKCRsZXZlbCwgJGxpbmVuciwgQGNodW5rcyk7Cit9CisKK3N1YiBjdHhfYmxvY2tfZ2V0IHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbiwgJG91dGVyLCAkb3BlbiwgJGNsb3NlLCAkb2ZmKSA9IEBfOworCW15ICRsaW5lOworCW15ICRzdGFydCA9ICRsaW5lbnIgLSAxOworCW15ICRibGsgPSAnJzsKKwlteSBAbzsKKwlteSBAYzsKKwlteSBAcmVzID0gKCk7CisKKwlteSAkbGV2ZWwgPSAwOworCW15IEBzdGFjayA9ICgkbGV2ZWwpOworCWZvciAoJGxpbmUgPSAkc3RhcnQ7ICRyZW1haW4gPiAwOyAkbGluZSsrKSB7CisJCW5leHQgaWYgKCRyYXdsaW5lc1skbGluZV0gPX4gL14tLyk7CisJCSRyZW1haW4tLTsKKworCQkkYmxrIC49ICRyYXdsaW5lc1skbGluZV07CisKKwkJIyBIYW5kbGUgbmVzdGVkICNpZi8jZWxzZS4KKwkJaWYgKCRsaW5lc1skbGluZV0gPX4gL14uXHMqI1xzKig/OmlmbmRlZnxpZmRlZnxpZilccy8pIHsKKwkJCXB1c2goQHN0YWNrLCAkbGV2ZWwpOworCQl9IGVsc2lmICgkbGluZXNbJGxpbmVdID1+IC9eLlxzKiNccyooPzplbHNlfGVsaWYpXGIvKSB7CisJCQkkbGV2ZWwgPSAkc3RhY2tbJCNzdGFjayAtIDFdOworCQl9IGVsc2lmICgkbGluZXNbJGxpbmVdID1+IC9eLlxzKiNccyplbmRpZlxiLykgeworCQkJJGxldmVsID0gcG9wKEBzdGFjayk7CisJCX0KKworCQlmb3JlYWNoIG15ICRjIChzcGxpdCgvLywgJGxpbmVzWyRsaW5lXSkpIHsKKwkJCSMjcHJpbnQgIkM8JGM+TDwkbGV2ZWw+PCRvcGVuJGNsb3NlPk88JG9mZj5cbiI7CisJCQlpZiAoJG9mZiA+IDApIHsKKwkJCQkkb2ZmLS07CisJCQkJbmV4dDsKKwkJCX0KKworCQkJaWYgKCRjIGVxICRjbG9zZSAmJiAkbGV2ZWwgPiAwKSB7CisJCQkJJGxldmVsLS07CisJCQkJbGFzdCBpZiAoJGxldmVsID09IDApOworCQkJfSBlbHNpZiAoJGMgZXEgJG9wZW4pIHsKKwkJCQkkbGV2ZWwrKzsKKwkJCX0KKwkJfQorCisJCWlmICghJG91dGVyIHx8ICRsZXZlbCA8PSAxKSB7CisJCQlwdXNoKEByZXMsICRyYXdsaW5lc1skbGluZV0pOworCQl9CisKKwkJbGFzdCBpZiAoJGxldmVsID09IDApOworCX0KKworCXJldHVybiAoJGxldmVsLCBAcmVzKTsKK30KK3N1YiBjdHhfYmxvY2tfb3V0ZXIgeworCW15ICgkbGluZW5yLCAkcmVtYWluKSA9IEBfOworCisJbXkgKCRsZXZlbCwgQHIpID0gY3R4X2Jsb2NrX2dldCgkbGluZW5yLCAkcmVtYWluLCAxLCAneycsICd9JywgMCk7CisJcmV0dXJuIEByOworfQorc3ViIGN0eF9ibG9jayB7CisJbXkgKCRsaW5lbnIsICRyZW1haW4pID0gQF87CisKKwlteSAoJGxldmVsLCBAcikgPSBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICd7JywgJ30nLCAwKTsKKwlyZXR1cm4gQHI7Cit9CitzdWIgY3R4X3N0YXRlbWVudCB7CisJbXkgKCRsaW5lbnIsICRyZW1haW4sICRvZmYpID0gQF87CisKKwlteSAoJGxldmVsLCBAcikgPSBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICcoJywgJyknLCAkb2ZmKTsKKwlyZXR1cm4gQHI7Cit9CitzdWIgY3R4X2Jsb2NrX2xldmVsIHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbikgPSBAXzsKKworCXJldHVybiBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICd7JywgJ30nLCAwKTsKK30KK3N1YiBjdHhfc3RhdGVtZW50X2xldmVsIHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbiwgJG9mZikgPSBAXzsKKworCXJldHVybiBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICcoJywgJyknLCAkb2ZmKTsKK30KKworc3ViIGN0eF9sb2NhdGVfY29tbWVudCB7CisJbXkgKCRmaXJzdF9saW5lLCAkZW5kX2xpbmUpID0gQF87CisKKwkjIENhdGNoIGEgY29tbWVudCBvbiB0aGUgZW5kIG9mIHRoZSBsaW5lIGl0c2VsZi4KKwlteSAoJGN1cnJlbnRfY29tbWVudCkgPSAoJHJhd2xpbmVzWyRlbmRfbGluZSAtIDFdID1+IG1ALiooL1wqLipcKi8pXHMqKD86XFxccyopPyRAKTsKKwlyZXR1cm4gJGN1cnJlbnRfY29tbWVudCBpZiAoZGVmaW5lZCAkY3VycmVudF9jb21tZW50KTsKKworCSMgTG9vayB0aHJvdWdoIHRoZSBjb250ZXh0IGFuZCB0cnkgYW5kIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYQorCSMgY29tbWVudC4KKwlteSAkaW5fY29tbWVudCA9IDA7CisJJGN1cnJlbnRfY29tbWVudCA9ICcnOworCWZvciAobXkgJGxpbmVuciA9ICRmaXJzdF9saW5lOyAkbGluZW5yIDwgJGVuZF9saW5lOyAkbGluZW5yKyspIHsKKwkJbXkgJGxpbmUgPSAkcmF3bGluZXNbJGxpbmVuciAtIDFdOworCQkjd2FybiAiICAgICAgICAgICAkbGluZVxuIjsKKwkJaWYgKCRsaW5lbnIgPT0gJGZpcnN0X2xpbmUgYW5kICRsaW5lID1+IG1AXi5ccypcKkApIHsKKwkJCSRpbl9jb21tZW50ID0gMTsKKwkJfQorCQlpZiAoJGxpbmUgPX4gbUAvXCpAKSB7CisJCQkkaW5fY29tbWVudCA9IDE7CisJCX0KKwkJaWYgKCEkaW5fY29tbWVudCAmJiAkY3VycmVudF9jb21tZW50IG5lICcnKSB7CisJCQkkY3VycmVudF9jb21tZW50ID0gJyc7CisJCX0KKwkJJGN1cnJlbnRfY29tbWVudCAuPSAkbGluZSAuICJcbiIgaWYgKCRpbl9jb21tZW50KTsKKwkJaWYgKCRsaW5lID1+IG1AXCovQCkgeworCQkJJGluX2NvbW1lbnQgPSAwOworCQl9CisJfQorCisJY2hvbXAoJGN1cnJlbnRfY29tbWVudCk7CisJcmV0dXJuKCRjdXJyZW50X2NvbW1lbnQpOworfQorc3ViIGN0eF9oYXNfY29tbWVudCB7CisJbXkgKCRmaXJzdF9saW5lLCAkZW5kX2xpbmUpID0gQF87CisJbXkgJGNtdCA9IGN0eF9sb2NhdGVfY29tbWVudCgkZmlyc3RfbGluZSwgJGVuZF9saW5lKTsKKworCSMjcHJpbnQgIkxJTkU6ICRyYXdsaW5lc1skZW5kX2xpbmUgLSAxIF1cbiI7CisJIyNwcmludCAiQ01NVDogJGNtdFxuIjsKKworCXJldHVybiAoJGNtdCBuZSAnJyk7Cit9CisKK3N1YiByYXdfbGluZSB7CisJbXkgKCRsaW5lbnIsICRjbnQpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gJGxpbmVuciAtIDE7CisJJGNudCsrOworCisJbXkgJGxpbmU7CisJd2hpbGUgKCRjbnQpIHsKKwkJJGxpbmUgPSAkcmF3bGluZXNbJG9mZnNldCsrXTsKKwkJbmV4dCBpZiAoZGVmaW5lZCgkbGluZSkgJiYgJGxpbmUgPX4gL14tLyk7CisJCSRjbnQtLTsKKwl9CisKKwlyZXR1cm4gJGxpbmU7Cit9CisKK3N1YiBjYXRfdmV0IHsKKwlteSAoJHZldCkgPSBAXzsKKwlteSAoJHJlcywgJGNvZGVkKTsKKworCSRyZXMgPSAnJzsKKwl3aGlsZSAoJHZldCA9fiAvKFteWzpjbnRybDpdXSopKFtbOmNudHJsOl1dfCQpL2cpIHsKKwkJJHJlcyAuPSAkMTsKKwkJaWYgKCQyIG5lICcnKSB7CisJCQkkY29kZWQgPSBzcHJpbnRmKCJeJWMiLCB1bnBhY2soJ0MnLCAkMikgKyA2NCk7CisJCQkkcmVzIC49ICRjb2RlZDsKKwkJfQorCX0KKwkkcmVzID1+IHMvJC9cJC87CisKKwlyZXR1cm4gJHJlczsKK30KKworbXkgJGF2X3ByZXByb2Nlc3NvciA9IDA7CitteSAkYXZfcGVuZGluZzsKK215IEBhdl9wYXJlbl90eXBlOworbXkgJGF2X3BlbmRfY29sb247CisKK3N1YiBhbm5vdGF0ZV9yZXNldCB7CisJJGF2X3ByZXByb2Nlc3NvciA9IDA7CisJJGF2X3BlbmRpbmcgPSAnXyc7CisJQGF2X3BhcmVuX3R5cGUgPSAoJ0UnKTsKKwkkYXZfcGVuZF9jb2xvbiA9ICdPJzsKK30KKworc3ViIGFubm90YXRlX3ZhbHVlcyB7CisJbXkgKCRzdHJlYW0sICR0eXBlKSA9IEBfOworCisJbXkgJHJlczsKKwlteSAkdmFyID0gJ18nIHggbGVuZ3RoKCRzdHJlYW0pOworCW15ICRjdXIgPSAkc3RyZWFtOworCisJcHJpbnQgIiRzdHJlYW1cbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisKKwl3aGlsZSAobGVuZ3RoKCRjdXIpKSB7CisJCUBhdl9wYXJlbl90eXBlID0gKCdFJykgaWYgKCQjYXZfcGFyZW5fdHlwZSA8IDApOworCQlwcmludCAiIDwiIC4gam9pbignJywgQGF2X3BhcmVuX3R5cGUpIC4KKwkJCQkiPiA8JHR5cGU+IDwkYXZfcGVuZGluZz4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQlpZiAoJGN1ciA9fiAvXihccyspL28pIHsKKwkJCXByaW50ICJXUygkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQlpZiAoJDEgPX4gL1xuLyAmJiAkYXZfcHJlcHJvY2Vzc29yKSB7CisJCQkJJHR5cGUgPSBwb3AoQGF2X3BhcmVuX3R5cGUpOworCQkJCSRhdl9wcmVwcm9jZXNzb3IgPSAwOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXChccyokVHlwZVxzKilcKS8gJiYgJGF2X3BlbmRpbmcgZXEgJ18nKSB7CisJCQlwcmludCAiQ0FTVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQlwdXNoKEBhdl9wYXJlbl90eXBlLCAkdHlwZSk7CisJCQkkdHlwZSA9ICdDJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKCRUeXBlKVxzKig/OiRJZGVudHwsfFwpfFwofFxzKiQpLykgeworCQkJcHJpbnQgIkRFQ0xBUkUoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnVCc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkTW9kaWZpZXIpXHMqLykgeworCQkJcHJpbnQgIk1PRElGSUVSKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1QnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXCNccypkZWZpbmVccyokSWRlbnQpKFwoPykvbykgeworCQkJcHJpbnQgIkRFRklORSgkMSwkMilcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKwkJCXB1c2goQGF2X3BhcmVuX3R5cGUsICR0eXBlKTsKKwkJCWlmICgkMiBuZSAnJykgeworCQkJCSRhdl9wZW5kaW5nID0gJ04nOworCQkJfQorCQkJJHR5cGUgPSAnRSc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcI1xzKig/OnVuZGVmXHMqJElkZW50fGluY2x1ZGVcYikpL28pIHsKKwkJCXByaW50ICJVTkRFRigkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKwkJCXB1c2goQGF2X3BhcmVuX3R5cGUsICR0eXBlKTsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKFwjXHMqKD86aWZkZWZ8aWZuZGVmfGlmKSkvbykgeworCQkJcHJpbnQgIlBSRV9TVEFSVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJHR5cGUpOworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJHR5cGUpOworCQkJJHR5cGUgPSAnRSc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcI1xzKig/OmVsc2V8ZWxpZikpL28pIHsKKwkJCXByaW50ICJQUkVfUkVTVEFSVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJGF2X3BhcmVuX3R5cGVbJCNhdl9wYXJlbl90eXBlXSk7CisKKwkJCSR0eXBlID0gJ0UnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXCNccyooPzplbmRpZikpL28pIHsKKwkJCXByaW50ICJQUkVfRU5EKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKworCQkJJGF2X3ByZXByb2Nlc3NvciA9IDE7CisKKwkJCSMgQXNzdW1lIGFsbCBhcm1zIG9mIHRoZSBjb25kaXRpb25hbCBlbmQgYXMgdGhpcworCQkJIyBvbmUgZG9lcywgYW5kIGNvbnRpbnVlIGFzIGlmIHRoZSAjZW5kaWYgd2FzIG5vdCBoZXJlLgorCQkJcG9wKEBhdl9wYXJlbl90eXBlKTsKKwkJCXB1c2goQGF2X3BhcmVuX3R5cGUsICR0eXBlKTsKKwkJCSR0eXBlID0gJ0UnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXFxcbikvbykgeworCQkJcHJpbnQgIlBSRUNPTlQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oX19hdHRyaWJ1dGVfXylccypcKD8vbykgeworCQkJcHJpbnQgIkFUVFIoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJGF2X3BlbmRpbmcgPSAkdHlwZTsKKwkJCSR0eXBlID0gJ04nOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oc2l6ZW9mKVxzKihcKCk/L28pIHsKKwkJCXByaW50ICJTSVpFT0YoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJaWYgKGRlZmluZWQgJDIpIHsKKwkJCQkkYXZfcGVuZGluZyA9ICdWJzsKKwkJCX0KKwkJCSR0eXBlID0gJ04nOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oaWZ8d2hpbGV8Zm9yKVxiL28pIHsKKwkJCXByaW50ICJDT05EKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSRhdl9wZW5kaW5nID0gJ0UnOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKGNhc2UpL28pIHsKKwkJCXByaW50ICJDQVNFKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSRhdl9wZW5kX2NvbG9uID0gJ0MnOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKHJldHVybnxlbHNlfGdvdG98dHlwZW9mfF9fdHlwZW9mX18pXGIvbykgeworCQkJcHJpbnQgIktFWVdPUkQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcKCkvbykgeworCQkJcHJpbnQgIlBBUkVOKCckMScpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJGF2X3BlbmRpbmcpOworCQkJJGF2X3BlbmRpbmcgPSAnXyc7CisJCQkkdHlwZSA9ICdOJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKFwpKS9vKSB7CisJCQlteSAkbmV3X3R5cGUgPSBwb3AoQGF2X3BhcmVuX3R5cGUpOworCQkJaWYgKCRuZXdfdHlwZSBuZSAnXycpIHsKKwkJCQkkdHlwZSA9ICRuZXdfdHlwZTsKKwkJCQlwcmludCAiUEFSRU4oJyQxJykgLT4gJHR5cGVcbiIKKwkJCQkJCQlpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgIlBBUkVOKCckMScpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oJElkZW50KVxzKlwoL28pIHsKKwkJCXByaW50ICJGVU5DKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1YnOworCQkJJGF2X3BlbmRpbmcgPSAnVic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkSWRlbnRccyopOig/OlxzKlxkK1xzKigsfD18OykpPy8pIHsKKwkJCWlmIChkZWZpbmVkICQyICYmICR0eXBlIGVxICdDJyB8fCAkdHlwZSBlcSAnVCcpIHsKKwkJCQkkYXZfcGVuZF9jb2xvbiA9ICdCJzsKKwkJCX0gZWxzaWYgKCR0eXBlIGVxICdFJykgeworCQkJCSRhdl9wZW5kX2NvbG9uID0gJ0wnOworCQkJfQorCQkJcHJpbnQgIklERU5UX0NPTE9OKCQxLCR0eXBlPiRhdl9wZW5kX2NvbG9uKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1YnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oJElkZW50fCRDb25zdGFudCkvbykgeworCQkJcHJpbnQgIklERU5UKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1YnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oJEFzc2lnbm1lbnQpL28pIHsKKwkJCXByaW50ICJBU1NJR04oJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKDt8e3x9KS8pIHsKKwkJCXByaW50ICJFTkQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnRSc7CisJCQkkYXZfcGVuZF9jb2xvbiA9ICdPJzsKKworCQl9IGVsc2lmICgkY3VyID1+L14oLCkvKSB7CisJCQlwcmludCAiQ09NTUEoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnQyc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcPykvbykgeworCQkJcHJpbnQgIlFVRVNUSU9OKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ04nOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oOikvbykgeworCQkJcHJpbnQgIkNPTE9OKCQxLCRhdl9wZW5kX2NvbG9uKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKworCQkJc3Vic3RyKCR2YXIsIGxlbmd0aCgkcmVzKSwgMSwgJGF2X3BlbmRfY29sb24pOworCQkJaWYgKCRhdl9wZW5kX2NvbG9uIGVxICdDJyB8fCAkYXZfcGVuZF9jb2xvbiBlcSAnTCcpIHsKKwkJCQkkdHlwZSA9ICdFJzsKKwkJCX0gZWxzZSB7CisJCQkJJHR5cGUgPSAnTic7CisJCQl9CisJCQkkYXZfcGVuZF9jb2xvbiA9ICdPJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKFxbKS9vKSB7CisJCQlwcmludCAiQ0xPU0UoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigtKD8hWy0+XSl8XCsoPyFcKyl8XCp8XCZcJnxcJikvbykgeworCQkJbXkgJHZhcmlhbnQ7CisKKwkJCXByaW50ICJPUFYoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJaWYgKCR0eXBlIGVxICdWJykgeworCQkJCSR2YXJpYW50ID0gJ0InOworCQkJfSBlbHNlIHsKKwkJCQkkdmFyaWFudCA9ICdVJzsKKwkJCX0KKworCQkJc3Vic3RyKCR2YXIsIGxlbmd0aCgkcmVzKSwgMSwgJHZhcmlhbnQpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkT3BlcmF0b3JzKS9vKSB7CisJCQlwcmludCAiT1AoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJaWYgKCQxIG5lICcrKycgJiYgJDEgbmUgJy0tJykgeworCQkJCSR0eXBlID0gJ04nOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gLyheLikvbykgeworCQkJcHJpbnQgIkMoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQl9CisJCWlmIChkZWZpbmVkICQxKSB7CisJCQkkY3VyID0gc3Vic3RyKCRjdXIsIGxlbmd0aCgkMSkpOworCQkJJHJlcyAuPSAkdHlwZSB4IGxlbmd0aCgkMSk7CisJCX0KKwl9CisKKwlyZXR1cm4gKCRyZXMsICR2YXIpOworfQorCitzdWIgcG9zc2libGUgeworCW15ICgkcG9zc2libGUsICRsaW5lKSA9IEBfOworCW15ICRub3RQZXJtaXR0ZWQgPSBxcnsoPzoKKwkJXig/OgorCQkJJE1vZGlmaWVyfAorCQkJJFN0b3JhZ2V8CisJCQkkVHlwZXwKKwkJCURFRklORV9cUysKKwkJKSR8CisJCV4oPzoKKwkJCWdvdG98CisJCQlyZXR1cm58CisJCQljYXNlfAorCQkJZWxzZXwKKwkJCWFzbXxfX2FzbV9ffAorCQkJZG8KKwkJKSg/OlxzfCQpfAorCQleKD86dHlwZWRlZnxzdHJ1Y3R8ZW51bSlcYgorCSAgICApfXg7CisJd2FybiAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7CisJaWYgKCRwb3NzaWJsZSAhfiAkbm90UGVybWl0dGVkKSB7CisJCSMgQ2hlY2sgZm9yIG1vZGlmaWVycy4KKwkJJHBvc3NpYmxlID1+IHMvXHMqJFN0b3JhZ2VccyovL2c7CisJCSRwb3NzaWJsZSA9fiBzL1xzKiRTcGFyc2VccyovL2c7CisJCWlmICgkcG9zc2libGUgPX4gL15ccyokLykgeworCisJCX0gZWxzaWYgKCRwb3NzaWJsZSA9fiAvXHMvKSB7CisJCQkkcG9zc2libGUgPX4gcy9ccyokVHlwZVxzKi8vZzsKKwkJCWZvciBteSAkbW9kaWZpZXIgKHNwbGl0KCcgJywgJHBvc3NpYmxlKSkgeworCQkJCWlmICgkbW9kaWZpZXIgIX4gJG5vdFBlcm1pdHRlZCkgeworCQkJCQl3YXJuICJNT0RJRklFUjogJG1vZGlmaWVyICgkcG9zc2libGUpICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOworCQkJCQlwdXNoKEBtb2RpZmllckxpc3QsICRtb2RpZmllcik7CisJCQkJfQorCQkJfQorCisJCX0gZWxzZSB7CisJCQl3YXJuICJQT1NTSUJMRTogJHBvc3NpYmxlICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOworCQkJcHVzaChAdHlwZUxpc3QsICRwb3NzaWJsZSk7CisJCX0KKwkJYnVpbGRfdHlwZXMoKTsKKwl9IGVsc2UgeworCQl3YXJuICJOT1RQT1NTOiAkcG9zc2libGUgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDEpOworCX0KK30KKworbXkgJHByZWZpeCA9ICcnOworCitzdWIgc2hvd190eXBlIHsKKyAgICAgICByZXR1cm4gIWRlZmluZWQgJGlnbm9yZV90eXBleyRfWzBdfTsKK30KKworc3ViIHJlcG9ydCB7CisJaWYgKCFzaG93X3R5cGUoJF9bMV0pIHx8CisJICAgIChkZWZpbmVkICR0c3Rfb25seSAmJiAkX1syXSAhfiAvXFEkdHN0X29ubHlcRS8pKSB7CisJCXJldHVybiAwOworCX0KKwlteSAkbGluZTsKKwlpZiAoJHNob3dfdHlwZXMpIHsKKwkJJGxpbmUgPSAiJHByZWZpeCRfWzBdOiRfWzFdOiAkX1syXVxuIjsKKwl9IGVsc2UgeworCQkkbGluZSA9ICIkcHJlZml4JF9bMF06ICRfWzJdXG4iOworCX0KKwkkbGluZSA9IChzcGxpdCgnXG4nLCAkbGluZSkpWzBdIC4gIlxuIiBpZiAoJHRlcnNlKTsKKworCXB1c2gob3VyIEByZXBvcnQsICRsaW5lKTsKKworCXJldHVybiAxOworfQorc3ViIHJlcG9ydF9kdW1wIHsKKwlvdXIgQHJlcG9ydDsKK30KKworc3ViIEVSUk9SIHsKKwlpZiAocmVwb3J0KCJFUlJPUiIsICRfWzBdLCAkX1sxXSkpIHsKKwkJb3VyICRjbGVhbiA9IDA7CisJCW91ciAkY250X2Vycm9yKys7CisJfQorfQorc3ViIFdBUk4geworCWlmIChyZXBvcnQoIldBUk5JTkciLCAkX1swXSwgJF9bMV0pKSB7CisJCW91ciAkY2xlYW4gPSAwOworCQlvdXIgJGNudF93YXJuKys7CisJfQorfQorc3ViIENISyB7CisJaWYgKCRjaGVjayAmJiByZXBvcnQoIkNIRUNLIiwgJF9bMF0sICRfWzFdKSkgeworCQlvdXIgJGNsZWFuID0gMDsKKwkJb3VyICRjbnRfY2hrKys7CisJfQorfQorCitzdWIgY2hlY2tfYWJzb2x1dGVfZmlsZSB7CisJbXkgKCRhYnNvbHV0ZSwgJGhlcmVjdXJyKSA9IEBfOworCW15ICRmaWxlID0gJGFic29sdXRlOworCisJIyNwcmludCAiYWJzb2x1dGU8JGFic29sdXRlPlxuIjsKKworCSMgU2VlIGlmIGFueSBzdWZmaXggb2YgdGhpcyBwYXRoIGlzIGEgcGF0aCB3aXRoaW4gdGhlIHRyZWUuCisJd2hpbGUgKCRmaWxlID1+IHNAXlteL10qL0BAKSB7CisJCWlmICgtZiAiJHJvb3QvJGZpbGUiKSB7CisJCQkjI3ByaW50ICJmaWxlPCRmaWxlPlxuIjsKKwkJCWxhc3Q7CisJCX0KKwl9CisJaWYgKCEgLWYgXykgIHsKKwkJcmV0dXJuIDA7CisJfQorCisJIyBJdCBpcywgc28gc2VlIGlmIHRoZSBwcmVmaXggaXMgYWNjZXB0YWJsZS4KKwlteSAkcHJlZml4ID0gJGFic29sdXRlOworCXN1YnN0cigkcHJlZml4LCAtbGVuZ3RoKCRmaWxlKSkgPSAnJzsKKworCSMjcHJpbnQgInByZWZpeDwkcHJlZml4PlxuIjsKKwlpZiAoJHByZWZpeCBuZSAiLi4uLyIpIHsKKwkJV0FSTigiVVNFX1JFTEFUSVZFX1BBVEgiLAorCQkgICAgICJ1c2UgcmVsYXRpdmUgcGF0aG5hbWUgaW5zdGVhZCBvZiBhYnNvbHV0ZSBpbiBjaGFuZ2Vsb2cgdGV4dFxuIiAuICRoZXJlY3Vycik7CisJfQorfQorCitzdWIgcHJvY2VzcyB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisKKwlteSAkbGluZW5yPTA7CisJbXkgJHByZXZsaW5lPSIiOworCW15ICRwcmV2cmF3bGluZT0iIjsKKwlteSAkc3Rhc2hsaW5lPSIiOworCW15ICRzdGFzaHJhd2xpbmU9IiI7CisKKwlteSAkbGVuZ3RoOworCW15ICRpbmRlbnQ7CisJbXkgJHByZXZpbmRlbnQ9MDsKKwlteSAkc3Rhc2hpbmRlbnQ9MDsKKworCW91ciAkY2xlYW4gPSAxOworCW15ICRzaWdub2ZmID0gMDsKKwlteSAkaXNfcGF0Y2ggPSAwOworCisJb3VyIEByZXBvcnQgPSAoKTsKKwlvdXIgJGNudF9saW5lcyA9IDA7CisJb3VyICRjbnRfZXJyb3IgPSAwOworCW91ciAkY250X3dhcm4gPSAwOworCW91ciAkY250X2NoayA9IDA7CisKKwkjIFRyYWNlIHRoZSByZWFsIGZpbGUvbGluZSBhcyB3ZSBnby4KKwlteSAkcmVhbGZpbGUgPSAnJzsKKwlteSAkcmVhbGxpbmUgPSAwOworCW15ICRyZWFsY250ID0gMDsKKwlteSAkaGVyZSA9ICcnOworCW15ICRpbl9jb21tZW50ID0gMDsKKwlteSAkY29tbWVudF9lZGdlID0gMDsKKwlteSAkZmlyc3RfbGluZSA9IDA7CisJbXkgJHAxX3ByZWZpeCA9ICcnOworCisJbXkgJHByZXZfdmFsdWVzID0gJ0UnOworCisJIyBzdXBwcmVzc2lvbiBmbGFncworCW15ICVzdXBwcmVzc19pZmJyYWNlczsKKwlteSAlc3VwcHJlc3Nfd2hpbGV0cmFpbGVyczsKKwlteSAlc3VwcHJlc3NfZXhwb3J0OworCisJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggc2FuaXRpemluZyB0aGUgbGluZXMuCisJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggbG9va2luZyBmb3IgYW55IF9fc2V0dXAgZG9jdW1lbnRhdGlvbi4KKwkjCisJbXkgQHNldHVwX2RvY3MgPSAoKTsKKwlteSAkc2V0dXBfZG9jcyA9IDA7CisKKwlzYW5pdGlzZV9saW5lX3Jlc2V0KCk7CisJbXkgJGxpbmU7CisJZm9yZWFjaCBteSAkcmF3bGluZSAoQHJhd2xpbmVzKSB7CisJCSRsaW5lbnIrKzsKKwkJJGxpbmUgPSAkcmF3bGluZTsKKworCQlpZiAoJHJhd2xpbmU9fi9eXCtcK1wrXHMrKFxTKykvKSB7CisJCQkkc2V0dXBfZG9jcyA9IDA7CisJCQlpZiAoJDEgPX4gbUBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCRAKSB7CisJCQkJJHNldHVwX2RvY3MgPSAxOworCQkJfQorCQkJI25leHQ7CisJCX0KKwkJaWYgKCRyYXdsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CisJCQkkcmVhbGxpbmU9JDEtMTsKKwkJCWlmIChkZWZpbmVkICQyKSB7CisJCQkJJHJlYWxjbnQ9JDMrMTsKKwkJCX0gZWxzZSB7CisJCQkJJHJlYWxjbnQ9MSsxOworCQkJfQorCQkJJGluX2NvbW1lbnQgPSAwOworCisJCQkjIEd1ZXN0aW1hdGUgaWYgdGhpcyBpcyBhIGNvbnRpbnVpbmcgY29tbWVudC4gIFJ1bgorCQkJIyB0aGUgY29udGV4dCBsb29raW5nIGZvciBhIGNvbW1lbnQgImVkZ2UiLiAgSWYgdGhpcworCQkJIyBlZGdlIGlzIGEgY2xvc2UgY29tbWVudCB0aGVuIHdlIG11c3QgYmUgaW4gYSBjb21tZW50CisJCQkjIGF0IGNvbnRleHQgc3RhcnQuCisJCQlteSAkZWRnZTsKKwkJCW15ICRjbnQgPSAkcmVhbGNudDsKKwkJCWZvciAobXkgJGxuID0gJGxpbmVuciArIDE7ICRjbnQgPiAwOyAkbG4rKykgeworCQkJCW5leHQgaWYgKGRlZmluZWQgJHJhd2xpbmVzWyRsbiAtIDFdICYmCisJCQkJCSAkcmF3bGluZXNbJGxuIC0gMV0gPX4gL14tLyk7CisJCQkJJGNudC0tOworCQkJCSNwcmludCAiUkFXPCRyYXdsaW5lc1skbG4gLSAxXT5cbiI7CisJCQkJbGFzdCBpZiAoIWRlZmluZWQgJHJhd2xpbmVzWyRsbiAtIDFdKTsKKwkJCQlpZiAoJHJhd2xpbmVzWyRsbiAtIDFdID1+IG1AKC9cKnxcKi8pQCAmJgorCQkJCSAgICAkcmF3bGluZXNbJGxuIC0gMV0gIX4gbUAiW14iXSooPzovXCp8XCovKVteIl0qIkApIHsKKwkJCQkJKCRlZGdlKSA9ICQxOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJCWlmIChkZWZpbmVkICRlZGdlICYmICRlZGdlIGVxICcqLycpIHsKKwkJCQkkaW5fY29tbWVudCA9IDE7CisJCQl9CisKKwkJCSMgR3Vlc3RpbWF0ZSBpZiB0aGlzIGlzIGEgY29udGludWluZyBjb21tZW50LiAgSWYgdGhpcworCQkJIyBpcyB0aGUgc3RhcnQgb2YgYSBkaWZmIGJsb2NrIGFuZCB0aGlzIGxpbmUgc3RhcnRzCisJCQkjICcgKicgdGhlbiBpdCBpcyB2ZXJ5IGxpa2VseSBhIGNvbW1lbnQuCisJCQlpZiAoIWRlZmluZWQgJGVkZ2UgJiYKKwkJCSAgICAkcmF3bGluZXNbJGxpbmVucl0gPX4gbUBeLlxzKig/OlwqXCorfCBcKikoPzpcc3wkKUApCisJCQl7CisJCQkJJGluX2NvbW1lbnQgPSAxOworCQkJfQorCisJCQkjI3ByaW50ICJDT01NRU5UOiRpbl9jb21tZW50IGVkZ2U8JGVkZ2U+ICRyYXdsaW5lXG4iOworCQkJc2FuaXRpc2VfbGluZV9yZXNldCgkaW5fY29tbWVudCk7CisKKwkJfSBlbHNpZiAoJHJlYWxjbnQgJiYgJHJhd2xpbmUgPX4gL14oPzpcK3wgfCQpLykgeworCQkJIyBTdGFuZGFyZGlzZSB0aGUgc3RyaW5ncyBhbmQgY2hhcnMgd2l0aGluIHRoZSBpbnB1dCB0bworCQkJIyBzaW1wbGlmeSBtYXRjaGluZyAtLSBvbmx5IGJvdGhlciB3aXRoIHBvc2l0aXZlIGxpbmVzLgorCQkJJGxpbmUgPSBzYW5pdGlzZV9saW5lKCRyYXdsaW5lKTsKKwkJfQorCQlwdXNoKEBsaW5lcywgJGxpbmUpOworCisJCWlmICgkcmVhbGNudCA+IDEpIHsKKwkJCSRyZWFsY250LS0gaWYgKCRsaW5lID1+IC9eKD86XCt8IHwkKS8pOworCQl9IGVsc2UgeworCQkJJHJlYWxjbnQgPSAwOworCQl9CisKKwkJI3ByaW50ICI9PT4kcmF3bGluZVxuIjsKKwkJI3ByaW50ICItLT4kbGluZVxuIjsKKworCQlpZiAoJHNldHVwX2RvY3MgJiYgJGxpbmUgPX4gL15cKy8pIHsKKwkJCXB1c2goQHNldHVwX2RvY3MsICRsaW5lKTsKKwkJfQorCX0KKworCSRwcmVmaXggPSAnJzsKKworCSRyZWFsY250ID0gMDsKKwkkbGluZW5yID0gMDsKKwlmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKKwkJJGxpbmVucisrOworCisJCW15ICRyYXdsaW5lID0gJHJhd2xpbmVzWyRsaW5lbnIgLSAxXTsKKworI2V4dHJhY3QgdGhlIGxpbmUgcmFuZ2UgaW4gdGhlIGZpbGUgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQKKwkJaWYgKCRsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CisJCQkkaXNfcGF0Y2ggPSAxOworCQkJJGZpcnN0X2xpbmUgPSAkbGluZW5yICsgMTsKKwkJCSRyZWFsbGluZT0kMS0xOworCQkJaWYgKGRlZmluZWQgJDIpIHsKKwkJCQkkcmVhbGNudD0kMysxOworCQkJfSBlbHNlIHsKKwkJCQkkcmVhbGNudD0xKzE7CisJCQl9CisJCQlhbm5vdGF0ZV9yZXNldCgpOworCQkJJHByZXZfdmFsdWVzID0gJ0UnOworCisJCQklc3VwcHJlc3NfaWZicmFjZXMgPSAoKTsKKwkJCSVzdXBwcmVzc193aGlsZXRyYWlsZXJzID0gKCk7CisJCQklc3VwcHJlc3NfZXhwb3J0ID0gKCk7CisJCQluZXh0OworCisjIHRyYWNrIHRoZSBsaW5lIG51bWJlciBhcyB3ZSBtb3ZlIHRocm91Z2ggdGhlIGh1bmssIG5vdGUgdGhhdAorIyBuZXcgdmVyc2lvbnMgb2YgR05VIGRpZmYgb21pdCB0aGUgbGVhZGluZyBzcGFjZSBvbiBjb21wbGV0ZWx5CisjIGJsYW5rIGNvbnRleHQgbGluZXMgc28gd2UgbmVlZCB0byBjb3VudCB0aGF0IHRvby4KKwkJfSBlbHNpZiAoJGxpbmUgPX4gL14oIHxcK3wkKS8pIHsKKwkJCSRyZWFsbGluZSsrOworCQkJJHJlYWxjbnQtLSBpZiAoJHJlYWxjbnQgIT0gMCk7CisKKwkJCSMgTWVhc3VyZSB0aGUgbGluZSBsZW5ndGggYW5kIGluZGVudC4KKwkJCSgkbGVuZ3RoLCAkaW5kZW50KSA9IGxpbmVfc3RhdHMoJHJhd2xpbmUpOworCisJCQkjIFRyYWNrIHRoZSBwcmV2aW91cyBsaW5lLgorCQkJKCRwcmV2bGluZSwgJHN0YXNobGluZSkgPSAoJHN0YXNobGluZSwgJGxpbmUpOworCQkJKCRwcmV2aW5kZW50LCAkc3Rhc2hpbmRlbnQpID0gKCRzdGFzaGluZGVudCwgJGluZGVudCk7CisJCQkoJHByZXZyYXdsaW5lLCAkc3Rhc2hyYXdsaW5lKSA9ICgkc3Rhc2hyYXdsaW5lLCAkcmF3bGluZSk7CisKKwkJCSN3YXJuICJsaW5lPCRsaW5lPlxuIjsKKworCQl9IGVsc2lmICgkcmVhbGNudCA9PSAxKSB7CisJCQkkcmVhbGNudC0tOworCQl9CisKKwkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKKworI21ha2UgdXAgdGhlIGhhbmRsZSBmb3IgYW55IGVycm9yIHdlIHJlcG9ydCBvbiB0aGlzIGxpbmUKKwkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JHJlYWxsaW5lOiAiIGlmICgkZW1hY3MgJiYgJGZpbGUpOworCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokbGluZW5yOiAiIGlmICgkZW1hY3MgJiYgISRmaWxlKTsKKworCQkkaGVyZSA9ICIjJGxpbmVucjogIiBpZiAoISRmaWxlKTsKKwkJJGhlcmUgPSAiIyRyZWFsbGluZTogIiBpZiAoJGZpbGUpOworCisJCSMgZXh0cmFjdCB0aGUgZmlsZW5hbWUgYXMgaXQgcGFzc2VzCisJCWlmICgkbGluZSA9fiAvXmRpZmYgLS1naXQuKj8oXFMrKSQvKSB7CisJCQkkcmVhbGZpbGUgPSAkMTsKKwkJCSRyZWFsZmlsZSA9fiBzQF4oW14vXSopL0BAOworCisJCX0gZWxzaWYgKCRsaW5lID1+IC9eXCtcK1wrXHMrKFxTKykvKSB7CisJCQkkcmVhbGZpbGUgPSAkMTsKKwkJCSRyZWFsZmlsZSA9fiBzQF4oW14vXSopL0BAOworCisJCQkkcDFfcHJlZml4ID0gJDE7CisJCQlpZiAoISRmaWxlICYmICR0cmVlICYmICRwMV9wcmVmaXggbmUgJycgJiYKKwkJCSAgICAtZSAiJHJvb3QvJHAxX3ByZWZpeCIpIHsKKwkJCQlXQVJOKCJQQVRDSF9QUkVGSVgiLAorCQkJCSAgICAgInBhdGNoIHByZWZpeCAnJHAxX3ByZWZpeCcgZXhpc3RzLCBhcHBlYXJzIHRvIGJlIGEgLXAwIHBhdGNoXG4iKTsKKwkJCX0KKworCQkJaWYgKCRyZWFsZmlsZSA9fiBtQF5pbmNsdWRlL2FzbS9AKSB7CisJCQkJRVJST1IoIk1PRElGSUVEX0lOQ0xVREVfQVNNIiwKKwkJCQkgICAgICAiZG8gbm90IG1vZGlmeSBmaWxlcyBpbiBpbmNsdWRlL2FzbSwgY2hhbmdlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmaWxlcyBpbiBpbmNsdWRlL2FzbS08YXJjaGl0ZWN0dXJlPlxuIiAuICIkaGVyZSRyYXdsaW5lXG4iKTsKKwkJCX0KKwkJCW5leHQ7CisJCX0KKworCQkkaGVyZSAuPSAiRklMRTogJHJlYWxmaWxlOiRyZWFsbGluZToiIGlmICgkcmVhbGNudCAhPSAwKTsKKworCQlteSAkaGVyZWxpbmUgPSAiJGhlcmVcbiRyYXdsaW5lXG4iOworCQlteSAkaGVyZWN1cnIgPSAiJGhlcmVcbiRyYXdsaW5lXG4iOworCQlteSAkaGVyZXByZXYgPSAiJGhlcmVcbiRwcmV2cmF3bGluZVxuJHJhd2xpbmVcbiI7CisKKwkJJGNudF9saW5lcysrIGlmICgkcmVhbGNudCAhPSAwKTsKKworIyBDaGVjayBmb3IgaW5jb3JyZWN0IGZpbGUgcGVybWlzc2lvbnMKKwkJaWYgKCRsaW5lID1+IC9ebmV3IChmaWxlICk/bW9kZS4qWzc1MzFdXGR7MCwyfSQvKSB7CisJCQlteSAkcGVybWhlcmUgPSAkaGVyZSAuICJGSUxFOiAkcmVhbGZpbGVcbiI7CisJCQlpZiAoJHJlYWxmaWxlID1+IC8oTWFrZWZpbGV8S2NvbmZpZ3xcLmN8XC5ofFwuU3xcLnRtcGwpJC8pIHsKKwkJCQlFUlJPUigiRVhFQ1VURV9QRVJNSVNTSU9OUyIsCisJCQkJICAgICAgImRvIG5vdCBzZXQgZXhlY3V0ZSBwZXJtaXNzaW9ucyBmb3Igc291cmNlIGZpbGVzXG4iIC4gJHBlcm1oZXJlKTsKKwkJCX0KKwkJfQorCisjIENoZWNrIHRoZSBwYXRjaCBmb3IgYSBzaWdub2ZmOgorCQlpZiAoJGxpbmUgPX4gL15ccypzaWduZWQtb2ZmLWJ5Oi9pKSB7CisJCQkkc2lnbm9mZisrOworCQl9CisKKyMgQ2hlY2sgc2lnbmF0dXJlIHN0eWxlcworCQlpZiAoJGxpbmUgPX4gL14oXHMqKSgkc2lnbmF0dXJlX3RhZ3MpKFxzKikoLiopLykgeworCQkJbXkgJHNwYWNlX2JlZm9yZSA9ICQxOworCQkJbXkgJHNpZ25fb2ZmID0gJDI7CisJCQlteSAkc3BhY2VfYWZ0ZXIgPSAkMzsKKwkJCW15ICRlbWFpbCA9ICQ0OworCQkJbXkgJHVjZmlyc3Rfc2lnbl9vZmYgPSB1Y2ZpcnN0KGxjKCRzaWduX29mZikpOworCisJCQlpZiAoZGVmaW5lZCAkc3BhY2VfYmVmb3JlICYmICRzcGFjZV9iZWZvcmUgbmUgIiIpIHsKKwkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCSAgICAgIkRvIG5vdCB1c2Ugd2hpdGVzcGFjZSBiZWZvcmUgJHVjZmlyc3Rfc2lnbl9vZmZcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQkJaWYgKCRzaWduX29mZiA9fiAvLWJ5OiQvaSAmJiAkc2lnbl9vZmYgbmUgJHVjZmlyc3Rfc2lnbl9vZmYpIHsKKwkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCSAgICAgIickdWNmaXJzdF9zaWduX29mZicgaXMgdGhlIHByZWZlcnJlZCBzaWduYXR1cmUgZm9ybVxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCQlpZiAoIWRlZmluZWQgJHNwYWNlX2FmdGVyIHx8ICRzcGFjZV9hZnRlciBuZSAiICIpIHsKKwkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCSAgICAgIlVzZSBhIHNpbmdsZSBzcGFjZSBhZnRlciAkdWNmaXJzdF9zaWduX29mZlxuIiAuICRoZXJlY3Vycik7CisJCQl9CisKKwkJCW15ICgkZW1haWxfbmFtZSwgJGVtYWlsX2FkZHJlc3MsICRjb21tZW50KSA9IHBhcnNlX2VtYWlsKCRlbWFpbCk7CisJCQlteSAkc3VnZ2VzdGVkX2VtYWlsID0gZm9ybWF0X2VtYWlsKCgkZW1haWxfbmFtZSwgJGVtYWlsX2FkZHJlc3MpKTsKKwkJCWlmICgkc3VnZ2VzdGVkX2VtYWlsIGVxICIiKSB7CisJCQkJRVJST1IoIkJBRF9TSUdOX09GRiIsCisJCQkJICAgICAgIlVucmVjb2duaXplZCBlbWFpbCBhZGRyZXNzOiAnJGVtYWlsJ1xuIiAuICRoZXJlY3Vycik7CisJCQl9IGVsc2UgeworCQkJCW15ICRkZXF1b3RlZCA9ICRzdWdnZXN0ZWRfZW1haWw7CisJCQkJJGRlcXVvdGVkID1+IHMvXiIvLzsKKwkJCQkkZGVxdW90ZWQgPX4gcy8iIDwvIDwvOworCQkJCSMgRG9uJ3QgZm9yY2UgZW1haWwgdG8gaGF2ZSBxdW90ZXMKKwkJCQkjIEFsbG93IGp1c3QgYW4gYW5nbGUgYnJhY2tldGVkIGFkZHJlc3MKKwkJCQlpZiAoIiRkZXF1b3RlZCRjb21tZW50IiBuZSAkZW1haWwgJiYKKwkJCQkgICAgIjwkZW1haWxfYWRkcmVzcz4kY29tbWVudCIgbmUgJGVtYWlsICYmCisJCQkJICAgICIkc3VnZ2VzdGVkX2VtYWlsJGNvbW1lbnQiIG5lICRlbWFpbCkgeworCQkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCQkgICAgICJlbWFpbCBhZGRyZXNzICckZW1haWwnIG1pZ2h0IGJlIGJldHRlciBhcyAnJHN1Z2dlc3RlZF9lbWFpbCRjb21tZW50J1xuIiAuICRoZXJlY3Vycik7CisJCQkJfQorCQkJfQorCQl9CisKKyMgQ2hlY2sgZm9yIHdyYXBwYWdlIHdpdGhpbiBhIHZhbGlkIGh1bmsgb2YgdGhlIGZpbGUKKwkJaWYgKCRyZWFsY250ICE9IDAgJiYgJGxpbmUgIX4gbXteKD86XCt8LXwgfFxcIE5vIG5ld2xpbmV8JCl9KSB7CisJCQlFUlJPUigiQ09SUlVQVEVEX1BBVENIIiwKKwkJCSAgICAgICJwYXRjaCBzZWVtcyB0byBiZSBjb3JydXB0IChsaW5lIHdyYXBwZWQ/KVxuIiAuCisJCQkJJGhlcmVjdXJyKSBpZiAoISRlbWl0dGVkX2NvcnJ1cHQrKyk7CisJCX0KKworIyBDaGVjayBmb3IgYWJzb2x1dGUga2VybmVsIHBhdGhzLgorCQlpZiAoJHRyZWUpIHsKKwkJCXdoaWxlICgkbGluZSA9fiBteyg/Ol58XHMpKC9cUyopfWcpIHsKKwkJCQlteSAkZmlsZSA9ICQxOworCisJCQkJaWYgKCRmaWxlID1+IG17XiguKj8pKD86OlxkKykrOj8kfSAmJgorCQkJCSAgICBjaGVja19hYnNvbHV0ZV9maWxlKCQxLCAkaGVyZWN1cnIpKSB7CisJCQkJCSMKKwkJCQl9IGVsc2UgeworCQkJCQljaGVja19hYnNvbHV0ZV9maWxlKCRmaWxlLCAkaGVyZWN1cnIpOworCQkJCX0KKwkJCX0KKwkJfQorCisjIFVURi04IHJlZ2V4IGZvdW5kIGF0IGh0dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvcXVlc3Rpb25zL3FhLWZvcm1zLXV0Zi04LmVuLnBocAorCQlpZiAoKCRyZWFsZmlsZSA9fiAvXiQvIHx8ICRsaW5lID1+IC9eXCsvKSAmJgorCQkgICAgJHJhd2xpbmUgIX4gbS9eJFVURjgqJC8pIHsKKwkJCW15ICgkdXRmOF9wcmVmaXgpID0gKCRyYXdsaW5lID1+IC9eKCRVVEY4KikvKTsKKworCQkJbXkgJGJsYW5rID0gY29weV9zcGFjaW5nKCRyYXdsaW5lKTsKKwkJCW15ICRwdHIgPSBzdWJzdHIoJGJsYW5rLCAwLCBsZW5ndGgoJHV0ZjhfcHJlZml4KSkgLiAiXiI7CisJCQlteSAkaGVyZXB0ciA9ICIkaGVyZWxpbmUkcHRyXG4iOworCisJCQlDSEsoIklOVkFMSURfVVRGOCIsCisJCQkgICAgIkludmFsaWQgVVRGLTgsIHBhdGNoIGFuZCBjb21taXQgbWVzc2FnZSBzaG91bGQgYmUgZW5jb2RlZCBpbiBVVEYtOFxuIiAuICRoZXJlcHRyKTsKKwkJfQorCisjIGlnbm9yZSBub24taHVuayBsaW5lcyBhbmQgbGluZXMgYmVpbmcgcmVtb3ZlZAorCQluZXh0IGlmICghJGh1bmtfbGluZSB8fCAkbGluZSA9fiAvXi0vKTsKKworI3RyYWlsaW5nIHdoaXRlc3BhY2UKKwkJaWYgKCRsaW5lID1+IC9eXCsuKlwwMTUvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJET1NfTElORV9FTkRJTkdTIiwKKwkJCSAgICAgICJET1MgbGluZSBlbmRpbmdzXG4iIC4gJGhlcmV2ZXQpOworCisJCX0gZWxzaWYgKCRyYXdsaW5lID1+IC9eXCsuKlxTXHMrJC8gfHwgJHJhd2xpbmUgPX4gL15cK1xzKyQvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJUUkFJTElOR19XSElURVNQQUNFIiwKKwkJCSAgICAgICJ0cmFpbGluZyB3aGl0ZXNwYWNlXG4iIC4gJGhlcmV2ZXQpOworCQkJJHJwdF9jbGVhbmVycyA9IDE7CisJCX0KKworIyBjaGVjayBmb3IgS2NvbmZpZyBoZWxwIHRleHQgaGF2aW5nIGEgcmVhbCBkZXNjcmlwdGlvbgorIyBPbmx5IGFwcGxpZXMgd2hlbiBhZGRpbmcgdGhlIGVudHJ5IG9yaWdpbmFsbHksIGFmdGVyIHRoYXQgd2UgZG8gbm90IGhhdmUKKyMgc3VmZmljaWVudCBjb250ZXh0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGluZGVlZCBsb25nIGVub3VnaC4KKwkJaWYgKCRyZWFsZmlsZSA9fiAvS2NvbmZpZy8gJiYKKwkJICAgICRsaW5lID1+IC9cK1xzKig/Oi0tLSk/aGVscCg/Oi0tLSk/JC8pIHsKKwkJCW15ICRsZW5ndGggPSAwOworCQkJbXkgJGNudCA9ICRyZWFsY250OworCQkJbXkgJGxuID0gJGxpbmVuciArIDE7CisJCQlteSAkZjsKKwkJCW15ICRpc19lbmQgPSAwOworCQkJd2hpbGUgKCRjbnQgPiAwICYmIGRlZmluZWQgJGxpbmVzWyRsbiAtIDFdKSB7CisJCQkJJGYgPSAkbGluZXNbJGxuIC0gMV07CisJCQkJJGNudC0tIGlmICgkbGluZXNbJGxuIC0gMV0gIX4gL14tLyk7CisJCQkJJGlzX2VuZCA9ICRsaW5lc1skbG4gLSAxXSA9fiAvXlwrLzsKKwkJCQkkbG4rKzsKKworCQkJCW5leHQgaWYgKCRmID1+IC9eLS8pOworCQkJCSRmID1+IHMvXi4vLzsKKwkJCQkkZiA9fiBzLyMuKi8vOworCQkJCSRmID1+IHMvXlxzKy8vOworCQkJCW5leHQgaWYgKCRmID1+IC9eJC8pOworCQkJCWlmICgkZiA9fiAvXlxzKmNvbmZpZ1xzLykgeworCQkJCQkkaXNfZW5kID0gMTsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQkJJGxlbmd0aCsrOworCQkJfQorCQkJV0FSTigiQ09ORklHX0RFU0NSSVBUSU9OIiwKKwkJCSAgICAgInBsZWFzZSB3cml0ZSBhIHBhcmFncmFwaCB0aGF0IGRlc2NyaWJlcyB0aGUgY29uZmlnIHN5bWJvbCBmdWxseVxuIiAuICRoZXJlY3VycikgaWYgKCRpc19lbmQgJiYgJGxlbmd0aCA8IDQpOworCQkJI3ByaW50ICJpc19lbmQ8JGlzX2VuZD4gbGVuZ3RoPCRsZW5ndGg+XG4iOworCQl9CisKKyMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xzfFN8cGx8c2gpJC8pOworCisjODAgY29sdW1uIGxpbWl0CisJCWlmICgkbGluZSA9fiAvXlwrLyAmJiAkcHJldnJhd2xpbmUgIX4gL1wvXCpcKi8gJiYKKwkJICAgICRyYXdsaW5lICF+IC9eLlxzKlwqXHMqXEAkSWRlbnRccy8gJiYKKwkJICAgICEoJGxpbmUgPX4gL15cK1xzKiRsb2dGdW5jdGlvbnNccypcKFxzKig/OihLRVJOX1xTK1xzKnxbXiJdKikpPyJbWFx0XSoiXHMqKD86fCx8XClccyo7KVxzKiQvIHx8CisJCSAgICAkbGluZSA9fiAvXlwrXHMqIlteIl0qIlxzKig/OlxzKnwsfFwpXHMqOylccyokLykgJiYKKwkJICAgICRsZW5ndGggPiA4MCkKKwkJeworCQkJV0FSTigiTE9OR19MSU5FIiwKKwkJCSAgICAgImxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBzcGFjZXMgYmVmb3JlIGEgcXVvdGVkIG5ld2xpbmUKKwkJaWYgKCRyYXdsaW5lID1+IC9eLipcIi4qXHNcXG4vKSB7CisJCQlXQVJOKCJRVU9URURfV0hJVEVTUEFDRV9CRUZPUkVfTkVXTElORSIsCisJCQkgICAgICJ1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIGJlZm9yZSBhIHF1b3RlZCBuZXdsaW5lXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBhZGRpbmcgbGluZXMgd2l0aG91dCBhIG5ld2xpbmUuCisJCWlmICgkbGluZSA9fiAvXlwrLyAmJiBkZWZpbmVkICRsaW5lc1skbGluZW5yXSAmJiAkbGluZXNbJGxpbmVucl0gPX4gL15cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlLykgeworCQkJV0FSTigiTUlTU0lOR19FT0ZfTkVXTElORSIsCisJCQkgICAgICJhZGRpbmcgYSBsaW5lIHdpdGhvdXQgbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBCbGFja2ZpbjogdXNlIGhpL2xvIG1hY3JvcworCQlpZiAoJHJlYWxmaWxlID1+IG1AYXJjaC9ibGFja2Zpbi8uKlwuUyRAKSB7CisJCQlpZiAoJGxpbmUgPX4gL1wuW2xMXVtbOnNwYWNlOl1dKj0uKiZbWzpzcGFjZTpdXSoweFtmRl1bZkZdW2ZGXVtmRl0vKSB7CisJCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRsaW5lKSAuICJcbiI7CisJCQkJRVJST1IoIkxPX01BQ1JPIiwKKwkJCQkgICAgICAidXNlIHRoZSBMTygpIG1hY3JvLCBub3QgKC4uLiAmIDB4RkZGRilcbiIgLiAkaGVyZXZldCk7CisJCQl9CisJCQlpZiAoJGxpbmUgPX4gL1wuW2hIXVtbOnNwYWNlOl1dKj0uKj4+W1s6c3BhY2U6XV0qMTYvKSB7CisJCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRsaW5lKSAuICJcbiI7CisJCQkJRVJST1IoIkhJX01BQ1JPIiwKKwkJCQkgICAgICAidXNlIHRoZSBISSgpIG1hY3JvLCBub3QgKC4uLiA+PiAxNilcbiIgLiAkaGVyZXZldCk7CisJCQl9CisJCX0KKworIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBzb3VyY2UgZmlsZSBDIG9yIHBlcmwgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xwbCkkLyk7CisKKyMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgYW55IHRhYnMgbXVzdCBjb21lIGZpcnN0IGFuZCBhbnl0aGluZworIyBtb3JlIHRoYW4gOCBtdXN0IHVzZSB0YWJzLgorCQlpZiAoJHJhd2xpbmUgPX4gL15cK1xzKiBcdFxzKlxTLyB8fAorCQkgICAgJHJhd2xpbmUgPX4gL15cK1xzKiAgICAgICAgXHMqLykgeworCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRyYXdsaW5lKSAuICJcbiI7CisJCQlFUlJPUigiQ09ERV9JTkRFTlQiLAorCQkJICAgICAgImNvZGUgaW5kZW50IHNob3VsZCB1c2UgdGFicyB3aGVyZSBwb3NzaWJsZVxuIiAuICRoZXJldmV0KTsKKwkJCSRycHRfY2xlYW5lcnMgPSAxOworCQl9CisKKyMgY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSB0YWJzLgorCQlpZiAoJHJhd2xpbmUgPX4gL15cKy8gJiYgJHJhd2xpbmUgPX4gLyBcdC8pIHsKKwkJCW15ICRoZXJldmV0ID0gIiRoZXJlXG4iIC4gY2F0X3ZldCgkcmF3bGluZSkgLiAiXG4iOworCQkJV0FSTigiU1BBQ0VfQkVGT1JFX1RBQiIsCisJCQkgICAgICJwbGVhc2UsIG5vIHNwYWNlIGJlZm9yZSB0YWJzXG4iIC4gJGhlcmV2ZXQpOworCQl9CisKKyMgY2hlY2sgZm9yIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKyMgRXhjZXB0aW9uczoKKyMgIDEpIHdpdGhpbiBjb21tZW50cworIyAgMikgaW5kZW50ZWQgcHJlcHJvY2Vzc29yIGNvbW1hbmRzCisjICAzKSBoYW5naW5nIGxhYmVscworCQlpZiAoJHJhd2xpbmUgPX4gL15cKyAvICYmICRsaW5lICF+IC9cKyAqKD86JDt8I3wkSWRlbnQ6KS8pICB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKKwkJCVdBUk4oIkxFQURJTkdfU1BBQ0UiLAorCQkJICAgICAicGxlYXNlLCBubyBzcGFjZXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZVxuIiAuICRoZXJldmV0KTsKKwkJfQorCisjIGNoZWNrIHdlIGFyZSBpbiBhIHZhbGlkIEMgc291cmNlIGZpbGUgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8YykkLyk7CisKKyMgY2hlY2sgZm9yIFJDUy9DVlMgcmV2aXNpb24gbWFya2VycworCQlpZiAoJHJhd2xpbmUgPX4gL15cKy4qXCQoUmV2aXNpb258TG9nfElkKSg/OlwkfCkvKSB7CisJCQlXQVJOKCJDVlNfS0VZV09SRCIsCisJCQkgICAgICJDVlMgc3R5bGUga2V5d29yZCBtYXJrZXJzLCB0aGVzZSB3aWxsIF9ub3RfIGJlIHVwZGF0ZWRcbiIuICRoZXJlY3Vycik7CisJCX0KKworIyBCbGFja2ZpbjogZG9uJ3QgdXNlIF9fYnVpbHRpbl9iZmluX1tjc11zeW5jCisJCWlmICgkbGluZSA9fiAvX19idWlsdGluX2JmaW5fY3N5bmMvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJDU1lOQyIsCisJCQkgICAgICAidXNlIHRoZSBDU1lOQygpIG1hY3JvIGluIGFzbS9ibGFja2Zpbi5oXG4iIC4gJGhlcmV2ZXQpOworCQl9CisJCWlmICgkbGluZSA9fiAvX19idWlsdGluX2JmaW5fc3N5bmMvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJTU1lOQyIsCisJCQkgICAgICAidXNlIHRoZSBTU1lOQygpIG1hY3JvIGluIGFzbS9ibGFja2Zpbi5oXG4iIC4gJGhlcmV2ZXQpOworCQl9CisKKyMgQ2hlY2sgZm9yIHBvdGVudGlhbCAnYmFyZScgdHlwZXMKKwkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQsCisJCSAgICAkcmVhbGxpbmVfbmV4dCk7CisJCWlmICgkcmVhbGNudCAmJiAkbGluZSA9fiAvLlxzKlxTLykgeworCQkJKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpID0KKwkJCQljdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZWFsY250LCAwKTsKKwkJCSRzdGF0ID1+IHMvXG4uL1xuIC9nOworCQkJJGNvbmQgPX4gcy9cbi4vXG4gL2c7CisKKwkJCSMgRmluZCB0aGUgcmVhbCBuZXh0IGxpbmUuCisJCQkkcmVhbGxpbmVfbmV4dCA9ICRsaW5lX25yX25leHQ7CisJCQlpZiAoZGVmaW5lZCAkcmVhbGxpbmVfbmV4dCAmJgorCQkJICAgICghZGVmaW5lZCAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSB8fAorCQkJICAgICBzdWJzdHIoJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0sICRvZmZfbmV4dCkgPX4gL15ccyokLykpIHsKKwkJCQkkcmVhbGxpbmVfbmV4dCsrOworCQkJfQorCisJCQlteSAkcyA9ICRzdGF0OworCQkJJHMgPX4gcy97LiokLy9zOworCisJCQkjIElnbm9yZSBnb3RvIGxhYmVscy4KKwkJCWlmICgkcyA9fiAvJElkZW50OlwqJC9zKSB7CisKKwkJCSMgSWdub3JlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQKKwkJCX0gZWxzaWYgKCRzID1+IC9eLlxzKiRJZGVudFxzKlwoL3MpIHsKKworCQkJfSBlbHNpZiAoJHMgPX4gL14uXHMqZWxzZVxiL3MpIHsKKworCQkJIyBkZWNsYXJhdGlvbnMgYWx3YXlzIHN0YXJ0IHdpdGggdHlwZXMKKwkJCX0gZWxzaWYgKCRwcmV2X3ZhbHVlcyBlcSAnRScgJiYgJHMgPX4gL14uXHMqKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPyg/OmNvbnN0XHMrKT8oKD86XHMqJElkZW50KSs/KVxiKD86XHMrJFNwYXJzZSk/XHMqXCoqXHMqKD86JElkZW50fFwoXCpbXlwpXSpcKSkoPzpccyokTW9kaWZpZXIpP1xzKig/Ojt8PXwsfFwoKS9zKSB7CisJCQkJbXkgJHR5cGUgPSAkMTsKKwkJCQkkdHlwZSA9fiBzL1xzKy8gL2c7CisJCQkJcG9zc2libGUoJHR5cGUsICJBOiIgLiAkcyk7CisKKwkJCSMgZGVmaW5pdGlvbnMgaW4gZ2xvYmFsIHNjb3BlIGNhbiBvbmx5IHN0YXJ0IHdpdGggdHlwZXMKKwkJCX0gZWxzaWYgKCRzID1+IC9eLig/OiRTdG9yYWdlXHMrKT8oPzokSW5saW5lXHMrKT8oPzpjb25zdFxzKyk/KCRJZGVudClcYlxzKig/ITopL3MpIHsKKwkJCQlwb3NzaWJsZSgkMSwgIkI6IiAuICRzKTsKKwkJCX0KKworCQkJIyBhbnkgKGZvbyAuLi4gKikgaXMgYSBwb2ludGVyIGNhc3QsIGFuZCBmb28gaXMgYSB0eXBlCisJCQl3aGlsZSAoJHMgPX4gL1woKCRJZGVudCkoPzpccyskU3BhcnNlKSpbXHNcKl0rXHMqXCkvc2cpIHsKKwkJCQlwb3NzaWJsZSgkMSwgIkM6IiAuICRzKTsKKwkJCX0KKworCQkJIyBDaGVjayBmb3IgYW55IHNvcnQgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisJCQkjIGludCBmb28oc29tZXRoaW5nIGJhciwgb3RoZXIgYmF6KTsKKwkJCSMgdm9pZCAoKnN0b3JlX2dkdCkoeDg2X2Rlc2NyX3B0ciAqKTsKKwkJCWlmICgkcHJldl92YWx1ZXMgZXEgJ0UnICYmICRzID1+IC9eKC4oPzp0eXBlZGVmXHMqKT8oPzooPzokU3RvcmFnZXwkSW5saW5lKVxzKikqXHMqJFR5cGVccyooPzpcYiRJZGVudHxcKFwqXHMqJElkZW50XCkpXHMqKVwoL3MpIHsKKwkJCQlteSAoJG5hbWVfbGVuKSA9IGxlbmd0aCgkMSk7CisKKwkJCQlteSAkY3R4ID0gJHM7CisJCQkJc3Vic3RyKCRjdHgsIDAsICRuYW1lX2xlbiArIDEsICcnKTsKKwkJCQkkY3R4ID1+IHMvXClbXlwpXSokLy87CisKKwkJCQlmb3IgbXkgJGFyZyAoc3BsaXQoL1xzKixccyovLCAkY3R4KSkgeworCQkJCQlpZiAoJGFyZyA9fiAvXig/OmNvbnN0XHMrKT8oJElkZW50KSg/OlxzKyRTcGFyc2UpKlxzKlwqKlxzKig6P1xiJElkZW50KT8kL3MgfHwgJGFyZyA9fiAvXigkSWRlbnQpJC9zKSB7CisKKwkJCQkJCXBvc3NpYmxlKCQxLCAiRDoiIC4gJHMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0KKworIworIyBDaGVja3Mgd2hpY2ggbWF5IGJlIGFuY2hvcmVkIGluIHRoZSBjb250ZXh0LgorIworCisjIENoZWNrIGZvciBzd2l0Y2ggKCkgYW5kIGFzc29jaWF0ZWQgY2FzZSBhbmQgZGVmYXVsdAorIyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBhdCB0aGUgc2FtZSBpbmRlbnQuCisJCWlmICgkbGluZT1+L1xic3dpdGNoXHMqXCguKlwpLykgeworCQkJbXkgJGVyciA9ICcnOworCQkJbXkgJHNlcCA9ICcnOworCQkJbXkgQGN0eCA9IGN0eF9ibG9ja19vdXRlcigkbGluZW5yLCAkcmVhbGNudCk7CisJCQlzaGlmdChAY3R4KTsKKwkJCWZvciBteSAkY3R4IChAY3R4KSB7CisJCQkJbXkgKCRjbGVuLCAkY2luZGVudCkgPSBsaW5lX3N0YXRzKCRjdHgpOworCQkJCWlmICgkY3R4ID1+IC9eXCtccyooY2FzZVxzK3xkZWZhdWx0OikvICYmCisJCQkJCQkJJGluZGVudCAhPSAkY2luZGVudCkgeworCQkJCQkkZXJyIC49ICIkc2VwJGN0eFxuIjsKKwkJCQkJJHNlcCA9ICcnOworCQkJCX0gZWxzZSB7CisJCQkJCSRzZXAgPSAiWy4uLl1cbiI7CisJCQkJfQorCQkJfQorCQkJaWYgKCRlcnIgbmUgJycpIHsKKwkJCQlFUlJPUigiU1dJVENIX0NBU0VfSU5ERU5UX0xFVkVMIiwKKwkJCQkgICAgICAic3dpdGNoIGFuZCBjYXNlIHNob3VsZCBiZSBhdCB0aGUgc2FtZSBpbmRlbnRcbiRoZXJlbGluZSRlcnIiKTsKKwkJCX0KKwkJfQorCisjIGlmL3doaWxlL2V0YyBicmFjZSBkbyBub3QgZ28gb24gbmV4dCBsaW5lLCB1bmxlc3MgZGVmaW5pbmcgYSBkbyB3aGlsZSBsb29wLAorIyBvciBpZiB0aGF0IGJyYWNlIG9uIHRoZSBuZXh0IGxpbmUgaXMgZm9yIHNvbWV0aGluZyBlbHNlCisJCWlmICgkbGluZSA9fiAvKC4qKVxiKCg/OmlmfHdoaWxlfGZvcnxzd2l0Y2gpXHMqXCh8ZG9cYnxlbHNlXGIpLyAmJiAkbGluZSAhfiAvXi5ccypcIy8pIHsKKwkJCW15ICRwcmVfY3R4ID0gIiQxJDIiOworCisJCQlteSAoJGxldmVsLCBAY3R4KSA9IGN0eF9zdGF0ZW1lbnRfbGV2ZWwoJGxpbmVuciwgJHJlYWxjbnQsIDApOworCQkJbXkgJGN0eF9jbnQgPSAkcmVhbGNudCAtICQjY3R4IC0gMTsKKwkJCW15ICRjdHggPSBqb2luKCJcbiIsIEBjdHgpOworCisJCQlteSAkY3R4X2xuID0gJGxpbmVucjsKKwkJCW15ICRjdHhfc2tpcCA9ICRyZWFsY250OworCisJCQl3aGlsZSAoJGN0eF9za2lwID4gJGN0eF9jbnQgfHwgKCRjdHhfc2tpcCA9PSAkY3R4X2NudCAmJgorCQkJCQlkZWZpbmVkICRsaW5lc1skY3R4X2xuIC0gMV0gJiYKKwkJCQkJJGxpbmVzWyRjdHhfbG4gLSAxXSA9fiAvXi0vKSkgeworCQkJCSMjcHJpbnQgIlNLSVA8JGN0eF9za2lwPiBDTlQ8JGN0eF9jbnQ+XG4iOworCQkJCSRjdHhfc2tpcC0tIGlmICghZGVmaW5lZCAkbGluZXNbJGN0eF9sbiAtIDFdIHx8ICRsaW5lc1skY3R4X2xuIC0gMV0gIX4gL14tLyk7CisJCQkJJGN0eF9sbisrOworCQkJfQorCisJCQkjcHJpbnQgInJlYWxjbnQ8JHJlYWxjbnQ+IGN0eF9jbnQ8JGN0eF9jbnQ+XG4iOworCQkJI3ByaW50ICJwcmU8JHByZV9jdHg+XG5saW5lPCRsaW5lPlxuY3R4PCRjdHg+XG5uZXh0PCRsaW5lc1skY3R4X2xuIC0gMV0+XG4iOworCisJCQlpZiAoJGN0eCAhfiAve1xzKi8gJiYgZGVmaW5lZCgkbGluZXNbJGN0eF9sbiAtMV0pICYmICRsaW5lc1skY3R4X2xuIC0gMV0gPX4gL15cK1xzKnsvKSB7CisJCQkJRVJST1IoIk9QRU5fQlJBQ0UiLAorCQkJCSAgICAgICJ0aGF0IG9wZW4gYnJhY2UgeyBzaG91bGQgYmUgb24gdGhlIHByZXZpb3VzIGxpbmVcbiIgLgorCQkJCQkiJGhlcmVcbiRjdHhcbiRyYXdsaW5lc1skY3R4X2xuIC0gMV1cbiIpOworCQkJfQorCQkJaWYgKCRsZXZlbCA9PSAwICYmICRwcmVfY3R4ICF+IC99XHMqd2hpbGVccypcKCQvICYmCisJCQkgICAgJGN0eCA9fiAvXClccypcO1xzKiQvICYmCisJCQkgICAgZGVmaW5lZCAkbGluZXNbJGN0eF9sbiAtIDFdKQorCQkJeworCQkJCW15ICgkbmxlbmd0aCwgJG5pbmRlbnQpID0gbGluZV9zdGF0cygkbGluZXNbJGN0eF9sbiAtIDFdKTsKKwkJCQlpZiAoJG5pbmRlbnQgPiAkaW5kZW50KSB7CisJCQkJCVdBUk4oIlRSQUlMSU5HX1NFTUlDT0xPTiIsCisJCQkJCSAgICAgInRyYWlsaW5nIHNlbWljb2xvbiBpbmRpY2F0ZXMgbm8gc3RhdGVtZW50cywgaW5kZW50IGltcGxpZXMgb3RoZXJ3aXNlXG4iIC4KKwkJCQkJCSIkaGVyZVxuJGN0eFxuJHJhd2xpbmVzWyRjdHhfbG4gLSAxXVxuIik7CisJCQkJfQorCQkJfQorCQl9CisKKyMgQ2hlY2sgcmVsYXRpdmUgaW5kZW50IGZvciBjb25kaXRpb25hbHMgYW5kIGJsb2Nrcy4KKwkJaWYgKCRsaW5lID1+IC9cYig/Oig/OmlmfHdoaWxlfGZvcilccypcKHxkb1xiKS8gJiYgJGxpbmUgIX4gL14uXHMqIy8gJiYgJGxpbmUgIX4gL1x9XHMqd2hpbGVccyovKSB7CisJCQlteSAoJHMsICRjKSA9ICgkc3RhdCwgJGNvbmQpOworCisJCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYyksICcnKTsKKworCQkJIyBNYWtlIHN1cmUgd2UgcmVtb3ZlIHRoZSBsaW5lIHByZWZpeGVzIGFzIHdlIGhhdmUKKwkJCSMgbm9uZSBvbiB0aGUgZmlyc3QgbGluZSwgYW5kIGFyZSBnb2luZyB0byByZWFkZCB0aGVtCisJCQkjIHdoZXJlIG5lY2Vzc2FyeS4KKwkJCSRzID1+IHMvXG4uL1xuL2dzOworCisJCQkjIEZpbmQgb3V0IGhvdyBsb25nIHRoZSBjb25kaXRpb25hbCBhY3R1YWxseSBpcy4KKwkJCW15IEBuZXdsaW5lcyA9ICgkYyA9fiAvXG4vZ3MpOworCQkJbXkgJGNvbmRfbGluZXMgPSAxICsgJCNuZXdsaW5lczsKKworCQkJIyBXZSB3YW50IHRvIGNoZWNrIHRoZSBmaXJzdCBsaW5lIGluc2lkZSB0aGUgYmxvY2sKKwkJCSMgc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgY29uZGl0aW9uYWwsIHNvIHJlbW92ZToKKwkJCSMgIDEpIGFueSBibGFuayBsaW5lIHRlcm1pbmF0aW9uCisJCQkjICAyKSBhbnkgb3BlbmluZyBicmFjZSB7IG9uIGVuZCBvZiB0aGUgbGluZQorCQkJIyAgMykgYW55IGRvICguLi4pIHsKKwkJCW15ICRjb250aW51YXRpb24gPSAwOworCQkJbXkgJGNoZWNrID0gMDsKKwkJCSRzID1+IHMvXi4qXGJkb1xiLy87CisJCQkkcyA9fiBzL15ccyp7Ly87CisJCQlpZiAoJHMgPX4gcy9eXHMqXFwvLykgeworCQkJCSRjb250aW51YXRpb24gPSAxOworCQkJfQorCQkJaWYgKCRzID1+IHMvXlxzKj9cbi8vKSB7CisJCQkJJGNoZWNrID0gMTsKKwkJCQkkY29uZF9saW5lcysrOworCQkJfQorCisJCQkjIEFsc28gaWdub3JlIGEgbG9vcCBjb25zdHJ1Y3QgYXQgdGhlIGVuZCBvZiBhCisJCQkjIHByZXByb2Nlc3NvciBzdGF0ZW1lbnQuCisJCQlpZiAoKCRwcmV2bGluZSA9fiAvXi5ccyojXHMqZGVmaW5lXHMvIHx8CisJCQkgICAgJHByZXZsaW5lID1+IC9cXFxzKiQvKSAmJiAkY29udGludWF0aW9uID09IDApIHsKKwkJCQkkY2hlY2sgPSAwOworCQkJfQorCisJCQlteSAkY29uZF9wdHIgPSAtMTsKKwkJCSRjb250aW51YXRpb24gPSAwOworCQkJd2hpbGUgKCRjb25kX3B0ciAhPSAkY29uZF9saW5lcykgeworCQkJCSRjb25kX3B0ciA9ICRjb25kX2xpbmVzOworCisJCQkJIyBJZiB3ZSBzZWUgYW4gI2Vsc2UvI2VsaWYgdGhlbiB0aGUgY29kZQorCQkJCSMgaXMgbm90IGxpbmVhci4KKwkJCQlpZiAoJHMgPX4gL15ccypcI1xzKig/OmVsc2V8ZWxpZikvKSB7CisJCQkJCSRjaGVjayA9IDA7CisJCQkJfQorCisJCQkJIyBJZ25vcmU6CisJCQkJIyAgMSkgYmxhbmsgbGluZXMsIHRoZXkgc2hvdWxkIGJlIGF0IDAsCisJCQkJIyAgMikgcHJlcHJvY2Vzc29yIGxpbmVzLCBhbmQKKwkJCQkjICAzKSBsYWJlbHMuCisJCQkJaWYgKCRjb250aW51YXRpb24gfHwKKwkJCQkgICAgJHMgPX4gL15ccyo/XG4vIHx8CisJCQkJICAgICRzID1+IC9eXHMqI1xzKj8vIHx8CisJCQkJICAgICRzID1+IC9eXHMqJElkZW50XHMqOi8pIHsKKwkJCQkJJGNvbnRpbnVhdGlvbiA9ICgkcyA9fiAvXi4qP1xcXG4vKSA/IDEgOiAwOworCQkJCQlpZiAoJHMgPX4gcy9eLio/XG4vLykgeworCQkJCQkJJGNvbmRfbGluZXMrKzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJbXkgKHVuZGVmLCAkc2luZGVudCkgPSBsaW5lX3N0YXRzKCIrIiAuICRzKTsKKwkJCW15ICRzdGF0X3JlYWwgPSByYXdfbGluZSgkbGluZW5yLCAkY29uZF9saW5lcyk7CisKKwkJCSMgQ2hlY2sgaWYgZWl0aGVyIG9mIHRoZXNlIGxpbmVzIGFyZSBtb2RpZmllZCwgZWxzZQorCQkJIyB0aGlzIGlzIG5vdCB0aGlzIHBhdGNoJ3MgZmF1bHQuCisJCQlpZiAoIWRlZmluZWQoJHN0YXRfcmVhbCkgfHwKKwkJCSAgICAkc3RhdCAhfiAvXlwrLyAmJiAkc3RhdF9yZWFsICF+IC9eXCsvKSB7CisJCQkJJGNoZWNrID0gMDsKKwkJCX0KKwkJCWlmIChkZWZpbmVkKCRzdGF0X3JlYWwpICYmICRjb25kX2xpbmVzID4gMSkgeworCQkJCSRzdGF0X3JlYWwgPSAiWy4uLl1cbiRzdGF0X3JlYWwiOworCQkJfQorCisJCQkjcHJpbnQgImxpbmU8JGxpbmU+IHByZXZsaW5lPCRwcmV2bGluZT4gaW5kZW50PCRpbmRlbnQ+IHNpbmRlbnQ8JHNpbmRlbnQ+IGNoZWNrPCRjaGVjaz4gY29udGludWF0aW9uPCRjb250aW51YXRpb24+IHM8JHM+IGNvbmRfbGluZXM8JGNvbmRfbGluZXM+IHN0YXRfcmVhbDwkc3RhdF9yZWFsPiBzdGF0PCRzdGF0PlxuIjsKKworCQkJaWYgKCRjaGVjayAmJiAoKCRzaW5kZW50ICUgOCkgIT0gMCB8fAorCQkJICAgICgkc2luZGVudCA8PSAkaW5kZW50ICYmICRzIG5lICcnKSkpIHsKKwkJCQlXQVJOKCJTVVNQRUNUX0NPREVfSU5ERU5UIiwKKwkJCQkgICAgICJzdXNwZWN0IGNvZGUgaW5kZW50IGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzICgkaW5kZW50LCAkc2luZGVudClcbiIgLiAkaGVyZWN1cnIgLiAiJHN0YXRfcmVhbFxuIik7CisJCQl9CisJCX0KKworCQkjIFRyYWNrIHRoZSAndmFsdWVzJyBhY3Jvc3MgY29udGV4dCBhbmQgYWRkZWQgbGluZXMuCisJCW15ICRvcGxpbmUgPSAkbGluZTsgJG9wbGluZSA9fiBzL14uLyAvOworCQlteSAoJGN1cnJfdmFsdWVzLCAkY3Vycl92YXJzKSA9CisJCQkJYW5ub3RhdGVfdmFsdWVzKCRvcGxpbmUgLiAiXG4iLCAkcHJldl92YWx1ZXMpOworCQkkY3Vycl92YWx1ZXMgPSAkcHJldl92YWx1ZXMgLiAkY3Vycl92YWx1ZXM7CisJCWlmICgkZGJnX3ZhbHVlcykgeworCQkJbXkgJG91dGxpbmUgPSAkb3BsaW5lOyAkb3V0bGluZSA9fiBzL1x0LyAvZzsKKwkJCXByaW50ICIkbGluZW5yID4gLiRvdXRsaW5lXG4iOworCQkJcHJpbnQgIiRsaW5lbnIgPiAkY3Vycl92YWx1ZXNcbiI7CisJCQlwcmludCAiJGxpbmVuciA+ICAkY3Vycl92YXJzXG4iOworCQl9CisJCSRwcmV2X3ZhbHVlcyA9IHN1YnN0cigkY3Vycl92YWx1ZXMsIC0xKTsKKworI2lnbm9yZSBsaW5lcyBub3QgYmVpbmcgYWRkZWQKKwkJaWYgKCRsaW5lPX4vXlteXCtdLykge25leHQ7fQorCisjIFRFU1Q6IGFsbG93IGRpcmVjdCB0ZXN0aW5nIG9mIHRoZSB0eXBlIG1hdGNoZXIuCisJCWlmICgkZGJnX3R5cGUpIHsKKwkJCWlmICgkbGluZSA9fiAvXi5ccyokRGVjbGFyZVxzKiQvKSB7CisJCQkJRVJST1IoIlRFU1RfVFlQRSIsCisJCQkJICAgICAgIlRFU1Q6IGlzIHR5cGVcbiIgLiAkaGVyZWN1cnIpOworCQkJfSBlbHNpZiAoJGRiZ190eXBlID4gMSAmJiAkbGluZSA9fiAvXi4rKCREZWNsYXJlKS8pIHsKKwkJCQlFUlJPUigiVEVTVF9OT1RfVFlQRSIsCisJCQkJICAgICAgIlRFU1Q6IGlzIG5vdCB0eXBlICgkMSBpcylcbiIuICRoZXJlY3Vycik7CisJCQl9CisJCQluZXh0OworCQl9CisjIFRFU1Q6IGFsbG93IGRpcmVjdCB0ZXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgbWF0Y2hlci4KKwkJaWYgKCRkYmdfYXR0cikgeworCQkJaWYgKCRsaW5lID1+IC9eLlxzKiRNb2RpZmllclxzKiQvKSB7CisJCQkJRVJST1IoIlRFU1RfQVRUUiIsCisJCQkJICAgICAgIlRFU1Q6IGlzIGF0dHJcbiIgLiAkaGVyZWN1cnIpOworCQkJfSBlbHNpZiAoJGRiZ19hdHRyID4gMSAmJiAkbGluZSA9fiAvXi4rKCRNb2RpZmllcikvKSB7CisJCQkJRVJST1IoIlRFU1RfTk9UX0FUVFIiLAorCQkJCSAgICAgICJURVNUOiBpcyBub3QgYXR0ciAoJDEgaXMpXG4iLiAkaGVyZWN1cnIpOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisjIGNoZWNrIGZvciBpbml0aWFsaXNhdGlvbiB0byBhZ2dyZWdhdGVzIG9wZW4gYnJhY2Ugb24gdGhlIG5leHQgbGluZQorCQlpZiAoJGxpbmUgPX4gL14uXHMqey8gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvKD86XnxbXj1dKT1ccyokLykgeworCQkJRVJST1IoIk9QRU5fQlJBQ0UiLAorCQkJICAgICAgInRoYXQgb3BlbiBicmFjZSB7IHNob3VsZCBiZSBvbiB0aGUgcHJldmlvdXMgbGluZVxuIiAuICRoZXJlcHJldik7CisJCX0KKworIworIyBDaGVja3Mgd2hpY2ggYXJlIGFuY2hvcmVkIG9uIHRoZSBhZGRlZCBsaW5lLgorIworCisjIGNoZWNrIGZvciBtYWxmb3JtZWQgcGF0aHMgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyAodXNlcyBSQVcgbGluZSkKKwkJaWYgKCRyYXdsaW5lID1+IG17Xi5ccypcI1xzKmluY2x1ZGVccytbPCJdKC4qKVsiPl19KSB7CisJCQlteSAkcGF0aCA9ICQxOworCQkJaWYgKCRwYXRoID1+IG17Ly99KSB7CisJCQkJRVJST1IoIk1BTEZPUk1FRF9JTkNMVURFIiwKKwkJCQkgICAgICAibWFsZm9ybWVkICNpbmNsdWRlIGZpbGVuYW1lXG4iIC4KKwkJCQkJJGhlcmVjdXJyKTsKKwkJCX0KKwkJfQorCisjIG5vIEM5OSAvLyBjb21tZW50cworCQlpZiAoJGxpbmUgPX4gbXsvL30pIHsKKwkJCUVSUk9SKCJDOTlfQ09NTUVOVFMiLAorCQkJICAgICAgImRvIG5vdCB1c2UgQzk5IC8vIGNvbW1lbnRzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCQkjIFJlbW92ZSBDOTkgY29tbWVudHMuCisJCSRsaW5lID1+IHNALy8uKkBAOworCQkkb3BsaW5lID1+IHNALy8uKkBAOworCisjIEVYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgdGhpbmcgaXQgaXMgZXhwb3J0aW5nLCBjb25zaWRlcgorIyB0aGUgd2hvbGUgc3RhdGVtZW50LgorI3ByaW50ICJBUFcgPCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdPlxuIjsKKwkJaWYgKGRlZmluZWQgJHJlYWxsaW5lX25leHQgJiYKKwkJICAgIGV4aXN0cyAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSAmJgorCQkgICAgIWRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gJiYKKwkJICAgICgkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisJCQkjIEhhbmRsZSBkZWZpbml0aW9ucyB3aGljaCBwcm9kdWNlIGlkZW50aWZpZXJzIHdpdGgKKwkJCSMgYSBwcmVmaXg6CisJCQkjICAgWFhYKGZvbyk7CisJCQkjICAgRVhQT1JUX1NZTUJPTChzb21ldGhpbmdfZm9vKTsKKwkJCW15ICRuYW1lID0gJDE7CisJCQlpZiAoJHN0YXQgPX4gL14uKFtBLVpfXSspXHMqXChccyooJElkZW50KS8gJiYKKwkJCSAgICAkbmFtZSA9fiAvXiR7SWRlbnR9XyQyLykgeworI3ByaW50ICJGT08gQyBuYW1lPCRuYW1lPlxuIjsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDE7CisKKwkJCX0gZWxzaWYgKCRzdGF0ICF+IC8oPzoKKwkJCQlcbi59XHMqJHwKKwkJCQleLkRFRklORV8kSWRlbnRcKFxRJG5hbWVcRVwpfAorCQkJCV4uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpfAorCQkJCV4uTElTVF9IRUFEXChcUSRuYW1lXEVcKXwKKwkJCQleLig/OiRTdG9yYWdlXHMrKT8kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwofAorCQkJCVxiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSkqXHMqKD86O3w9fFxbfFwoKQorCQkJICAgICkveCkgeworI3ByaW50ICJGT08gQTwkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXT4gc3RhdDwkc3RhdD4gbmFtZTwkbmFtZT5cbiI7CisJCQkJJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gPSAyOworCQkJfSBlbHNlIHsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDE7CisJCQl9CisJCX0KKwkJaWYgKCFkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvXi5ccyokLyAmJgorCQkgICAgKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8gfHwKKwkJICAgICAkbGluZSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKKyNwcmludCAiRk9PIEIgPCRsaW5lc1skbGluZW5yIC0gMV0+XG4iOworCQkJJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9IDI7CisJCX0KKwkJaWYgKGRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSAmJgorCQkgICAgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9PSAyKSB7CisJCQlXQVJOKCJFWFBPUlRfU1lNQk9MIiwKKwkJCSAgICAgIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIGdsb2JhbCBpbml0aWFsaXNlcnMuCisJCWlmICgkbGluZSA9fiAvXi4kVHlwZVxzKiRJZGVudFxzKig/OlxzKyRNb2RpZmllcikqXHMqPVxzKigwfE5VTEx8ZmFsc2UpXHMqOy8pIHsKKwkJCUVSUk9SKCJHTE9CQUxfSU5JVElBTElTRVJTIiwKKwkJCSAgICAgICJkbyBub3QgaW5pdGlhbGlzZSBnbG9iYWxzIHRvIDAgb3IgTlVMTFxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKwkJfQorIyBjaGVjayBmb3Igc3RhdGljIGluaXRpYWxpc2Vycy4KKwkJaWYgKCRsaW5lID1+IC9cYnN0YXRpY1xzLio9XHMqKDB8TlVMTHxmYWxzZSlccyo7LykgeworCQkJRVJST1IoIklOSVRJQUxJU0VEX1NUQVRJQyIsCisJCQkgICAgICAiZG8gbm90IGluaXRpYWxpc2Ugc3RhdGljcyB0byAwIG9yIE5VTExcbiIgLgorCQkJCSRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBmb3Igc3RhdGljIGNvbnN0IGNoYXIgKiBhcnJheXMuCisJCWlmICgkbGluZSA9fiAvXGJzdGF0aWNccytjb25zdFxzK2NoYXJccypcKlxzKihcdyspXHMqXFtccypcXVxzKj1ccyovKSB7CisJCQlXQVJOKCJTVEFUSUNfQ09OU1RfQ0hBUl9BUlJBWSIsCisJCQkgICAgICJzdGF0aWMgY29uc3QgY2hhciAqIGFycmF5IHNob3VsZCBwcm9iYWJseSBiZSBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0XG4iIC4KKwkJCQkkaGVyZWN1cnIpOworICAgICAgICAgICAgICAgfQorCisjIGNoZWNrIGZvciBzdGF0aWMgY2hhciBmb29bXSA9ICJiYXIiIGRlY2xhcmF0aW9ucy4KKwkJaWYgKCRsaW5lID1+IC9cYnN0YXRpY1xzK2NoYXJccysoXHcrKVxzKlxbXHMqXF1ccyo9XHMqIi8pIHsKKwkJCVdBUk4oIlNUQVRJQ19DT05TVF9DSEFSX0FSUkFZIiwKKwkJCSAgICAgInN0YXRpYyBjaGFyIGFycmF5IGRlY2xhcmF0aW9uIHNob3VsZCBwcm9iYWJseSBiZSBzdGF0aWMgY29uc3QgY2hhclxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKyAgICAgICAgICAgICAgIH0KKworIyBjaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCWlmICgkbGluZSA9fiAvXGJzdHJ1Y3RccytwY2lfZGV2aWNlX2lkXHMrXHcrXHMqXFtccypcXVxzKlw9XHMqXHsvKSB7CisJCQlXQVJOKCJERUZJTkVfUENJX0RFVklDRV9UQUJMRSIsCisJCQkgICAgICJVc2UgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUgZm9yIHN0cnVjdCBwY2lfZGV2aWNlX2lkXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBuZXcgdHlwZWRlZnMsIG9ubHkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgc3BhcnNlIGFubm90YXRpb25zCisjIG1ha2Ugc2Vuc2UuCisJCWlmICgkbGluZSA9fiAvXGJ0eXBlZGVmXHMvICYmCisJCSAgICAkbGluZSAhfiAvXGJ0eXBlZGVmXHMrJFR5cGVccypcKFxzKlwqPyRJZGVudFxzKlwpXHMqXCgvICYmCisJCSAgICAkbGluZSAhfiAvXGJ0eXBlZGVmXHMrJFR5cGVccyskSWRlbnRccypcKC8gJiYKKwkJICAgICRsaW5lICF+IC9cYiR0eXBlVHlwZWRlZnNcYi8gJiYKKwkJICAgICRsaW5lICF+IC9cYl9fYml0d2lzZSg/Ol9ffClcYi8pIHsKKwkJCVdBUk4oIk5FV19UWVBFREVGUyIsCisJCQkgICAgICJkbyBub3QgYWRkIG5ldyB0eXBlZGVmc1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyAqIGdvZXMgb24gdmFyaWFibGUgbm90IG9uIHR5cGUKKwkJIyAoY2hhcipbIGNvbnN0XSkKKwkJaWYgKCRsaW5lID1+IG17XCgkTm9ucHRyVHlwZShccyooPzokTW9kaWZpZXJcYlxzKnxcKlxzKikrKVwpfSkgeworCQkJbXkgKCRmcm9tLCAkdG8pID0gKCQxLCAkMSk7CisKKwkJCSMgU2hvdWxkIHN0YXJ0IHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL14oXFMpLyAkMS87CisJCQkjIFNob3VsZCBub3QgZW5kIHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL1xzKyQvLzsKKwkJCSMgJyoncyBzaG91bGQgbm90IGhhdmUgc3BhY2VzIGJldHdlZW4uCisJCQl3aGlsZSAoJHRvID1+IHMvXCpccytcKi9cKlwqLykgeworCQkJfQorCisJCQkjcHJpbnQgImZyb208JGZyb20+IHRvPCR0bz5cbiI7CisJCQlpZiAoJGZyb20gbmUgJHRvKSB7CisJCQkJRVJST1IoIlBPSU5URVJfTE9DQVRJT04iLAorCQkJCSAgICAgICJcIihmb28kZnJvbSlcIiBzaG91bGQgYmUgXCIoZm9vJHRvKVwiXG4iIC4gICRoZXJlY3Vycik7CisJCQl9CisJCX0gZWxzaWYgKCRsaW5lID1+IG17XGIkTm9ucHRyVHlwZShccyooPzokTW9kaWZpZXJcYlxzKnxcKlxzKikrKSgkSWRlbnQpfSkgeworCQkJbXkgKCRmcm9tLCAkdG8sICRpZGVudCkgPSAoJDEsICQxLCAkMik7CisKKwkJCSMgU2hvdWxkIHN0YXJ0IHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL14oXFMpLyAkMS87CisJCQkjIFNob3VsZCBub3QgZW5kIHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL1xzKyQvLzsKKwkJCSMgJyoncyBzaG91bGQgbm90IGhhdmUgc3BhY2VzIGJldHdlZW4uCisJCQl3aGlsZSAoJHRvID1+IHMvXCpccytcKi9cKlwqLykgeworCQkJfQorCQkJIyBNb2RpZmllcnMgc2hvdWxkIGhhdmUgc3BhY2VzLgorCQkJJHRvID1+IHMvKFxiJE1vZGlmaWVyJCkvJDEgLzsKKworCQkJI3ByaW50ICJmcm9tPCRmcm9tPiB0bzwkdG8+IGlkZW50PCRpZGVudD5cbiI7CisJCQlpZiAoJGZyb20gbmUgJHRvICYmICRpZGVudCAhfiAvXiRNb2RpZmllciQvKSB7CisJCQkJRVJST1IoIlBPSU5URVJfTE9DQVRJT04iLAorCQkJCSAgICAgICJcImZvbyR7ZnJvbX1iYXJcIiBzaG91bGQgYmUgXCJmb28ke3RvfWJhclwiXG4iIC4gICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworIyAjIG5vIEJVRygpIG9yIEJVR19PTigpCisjIAkJaWYgKCRsaW5lID1+IC9cYihCVUd8QlVHX09OKVxiLykgeworIyAJCQlwcmludCAiVHJ5IHRvIHVzZSBXQVJOX09OICYgUmVjb3ZlcnkgY29kZSByYXRoZXIgdGhhbiBCVUcoKSBvciBCVUdfT04oKVxuIjsKKyMgCQkJcHJpbnQgIiRoZXJlY3VyciI7CisjIAkJCSRjbGVhbiA9IDA7CisjIAkJfQorCisJCWlmICgkbGluZSA9fiAvXGJMSU5VWF9WRVJTSU9OX0NPREVcYi8pIHsKKwkJCVdBUk4oIkxJTlVYX1ZFUlNJT05fQ09ERSIsCisJCQkgICAgICJMSU5VWF9WRVJTSU9OX0NPREUgc2hvdWxkIGJlIGF2b2lkZWQsIGNvZGUgc2hvdWxkIGJlIGZvciB0aGUgdmVyc2lvbiB0byB3aGljaCBpdCBpcyBtZXJnZWRcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHVzZXMgb2YgcHJpbnRrX3JhdGVsaW1pdAorCQlpZiAoJGxpbmUgPX4gL1xicHJpbnRrX3JhdGVsaW1pdFxzKlwoLykgeworCQkJV0FSTigiUFJJTlRLX1JBVEVMSU1JVEVEIiwKKyJQcmVmZXIgcHJpbnRrX3JhdGVsaW1pdGVkIG9yIHByXzxsZXZlbD5fcmF0ZWxpbWl0ZWQgdG8gcHJpbnRrX3JhdGVsaW1pdFxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBwcmludGsgc2hvdWxkIHVzZSBLRVJOXyogbGV2ZWxzLiAgTm90ZSB0aGF0IGZvbGxvdyBvbiBwcmludGsncyBvbiB0aGUKKyMgc2FtZSBsaW5lIGRvIG5vdCBuZWVkIGEgbGV2ZWwsIHNvIHdlIHVzZSB0aGUgY3VycmVudCBibG9jayBjb250ZXh0CisjIHRvIHRyeSBhbmQgZmluZCBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgcHJpbnRrLiAgSW4gc3VtbWFyeSB0aGUgY3VycmVudAorIyBwcmludGsgaW5jbHVkZXMgYWxsIHByZWNlZGluZyBwcmludGsncyB3aGljaCBoYXZlIG5vIG5ld2xpbmUgb24gdGhlIGVuZC4KKyMgd2UgYXNzdW1lIHRoZSBmaXJzdCBiYWQgcHJpbnRrIGlzIHRoZSBvbmUgdG8gcmVwb3J0LgorCQlpZiAoJGxpbmUgPX4gL1xicHJpbnRrXCgoPyFLRVJOXylccyoiLykgeworCQkJbXkgJG9rID0gMDsKKwkJCWZvciAobXkgJGxuID0gJGxpbmVuciAtIDE7ICRsbiA+PSAkZmlyc3RfbGluZTsgJGxuLS0pIHsKKwkJCQkjcHJpbnQgIkNIRUNLPCRsaW5lc1skbG4gLSAxXVxuIjsKKwkJCQkjIHdlIGhhdmUgYSBwcmVjZWRpbmcgcHJpbnRrIGlmIGl0IGVuZHMKKwkJCQkjIHdpdGggIlxuIiBpZ25vcmUgaXQsIGVsc2UgaXQgaXMgdG8gYmxhbWUKKwkJCQlpZiAoJGxpbmVzWyRsbiAtIDFdID1+IG17XGJwcmludGtcKH0pIHsKKwkJCQkJaWYgKCRyYXdsaW5lc1skbG4gLSAxXSAhfiBte1xcbiJ9KSB7CisJCQkJCQkkb2sgPSAxOworCQkJCQl9CisJCQkJCWxhc3Q7CisJCQkJfQorCQkJfQorCQkJaWYgKCRvayA9PSAwKSB7CisJCQkJV0FSTigiUFJJTlRLX1dJVEhPVVRfS0VSTl9MRVZFTCIsCisJCQkJICAgICAicHJpbnRrKCkgc2hvdWxkIGluY2x1ZGUgS0VSTl8gZmFjaWxpdHkgbGV2ZWxcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgZnVuY3Rpb24gYnJhY2UgY2FuJ3QgYmUgb24gc2FtZSBsaW5lLCBleGNlcHQgZm9yICNkZWZpbmVzIG9mIGRvIHdoaWxlLAorIyBvciBpZiBjbG9zZWQgb24gc2FtZSBsaW5lCisJCWlmICgoJGxpbmU9fi8kVHlwZVxzKiRJZGVudFwoLipcKS4qXHN7LykgYW5kCisJCSAgICAhKCRsaW5lPX4vXCNccypkZWZpbmUuKmRvXHN7LykgYW5kICEoJGxpbmU9fi99LykpIHsKKwkJCUVSUk9SKCJPUEVOX0JSQUNFIiwKKwkJCSAgICAgICJvcGVuIGJyYWNlICd7JyBmb2xsb3dpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGdvIG9uIHRoZSBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgb3BlbiBicmFjZXMgZm9yIGVudW0sIHVuaW9uIGFuZCBzdHJ1Y3QgZ28gb24gdGhlIHNhbWUgbGluZS4KKwkJaWYgKCRsaW5lID1+IC9eLlxzKnsvICYmCisJCSAgICAkcHJldmxpbmUgPX4gL14uXHMqKD86dHlwZWRlZlxzKyk/KGVudW18dW5pb258c3RydWN0KSg/OlxzKyRJZGVudCk/XHMqJC8pIHsKKwkJCUVSUk9SKCJPUEVOX0JSQUNFIiwKKwkJCSAgICAgICJvcGVuIGJyYWNlICd7JyBmb2xsb3dpbmcgJDEgZ28gb24gdGhlIHNhbWUgbGluZVxuIiAuICRoZXJlcHJldik7CisJCX0KKworIyBtaXNzaW5nIHNwYWNlIGFmdGVyIHVuaW9uLCBzdHJ1Y3Qgb3IgZW51bSBkZWZpbml0aW9uCisJCWlmICgkbGluZSA9fiAvXi5ccyooPzp0eXBlZGVmXHMrKT8oZW51bXx1bmlvbnxzdHJ1Y3QpKD86XHMrJElkZW50KT8oPzpccyskSWRlbnQpP1s9XHtdLykgeworCQkgICAgV0FSTigiU1BBQ0lORyIsCisJCQkgIm1pc3Npbmcgc3BhY2UgYWZ0ZXIgJDEgZGVmaW5pdGlvblxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBmb3Igc3BhY2luZyByb3VuZCBzcXVhcmUgYnJhY2tldHM7IGFsbG93ZWQ6CisjICAxLiB3aXRoIGEgdHlwZSBvbiB0aGUgbGVmdCAtLSBpbnQgW10gYTsKKyMgIDIuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGZvciBzbGljZSBpbml0aWFsaXNlcnMgLS0gWzAuLi4xMF0gPSA1LAorIyAgMy4gaW5zaWRlIGEgY3VybHkgYnJhY2UgLS0gPSB7IFswLi4uMTBdID0gNSB9CisJCXdoaWxlICgkbGluZSA9fiAvKC4qP1xzKVxbL2cpIHsKKwkJCW15ICgkd2hlcmUsICRwcmVmaXgpID0gKCQtWzFdLCAkMSk7CisJCQlpZiAoJHByZWZpeCAhfiAvJFR5cGVccyskLyAmJgorCQkJICAgICgkd2hlcmUgIT0gMCB8fCAkcHJlZml4ICF+IC9eLlxzKyQvKSAmJgorCQkJICAgICRwcmVmaXggIX4gL3tccyskLykgeworCQkJCUVSUk9SKCJCUkFDS0VUX1NQQUNFIiwKKwkJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgb3BlbiBzcXVhcmUgYnJhY2tldCAnWydcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgY2hlY2sgZm9yIHNwYWNlcyBiZXR3ZWVuIGZ1bmN0aW9ucyBhbmQgdGhlaXIgcGFyZW50aGVzZXMuCisJCXdoaWxlICgkbGluZSA9fiAvKCRJZGVudClccytcKC9nKSB7CisJCQlteSAkbmFtZSA9ICQxOworCQkJbXkgJGN0eF9iZWZvcmUgPSBzdWJzdHIoJGxpbmUsIDAsICQtWzFdKTsKKwkJCW15ICRjdHggPSAiJGN0eF9iZWZvcmUkbmFtZSI7CisKKwkJCSMgSWdub3JlIHRob3NlIGRpcmVjdGl2ZXMgd2hlcmUgc3BhY2VzIF9hcmVfIHBlcm1pdHRlZC4KKwkJCWlmICgkbmFtZSA9fiAvXig/OgorCQkJCWlmfGZvcnx3aGlsZXxzd2l0Y2h8cmV0dXJufGNhc2V8CisJCQkJdm9sYXRpbGV8X192b2xhdGlsZV9ffAorCQkJCV9fYXR0cmlidXRlX198Zm9ybWF0fF9fZXh0ZW5zaW9uX198CisJCQkJYXNtfF9fYXNtX18pJC94KQorCQkJeworCisJCQkjIGNwcCAjZGVmaW5lIHN0YXRlbWVudHMgaGF2ZSBub24tb3B0aW9uYWwgc3BhY2VzLCBpZQorCQkJIyBpZiB0aGVyZSBpcyBhIHNwYWNlIGJldHdlZW4gdGhlIG5hbWUgYW5kIHRoZSBvcGVuCisJCQkjIHBhcmVudGhlc2lzIGl0IGlzIHNpbXBseSBub3QgYSBwYXJhbWV0ZXIgZ3JvdXAuCisJCQl9IGVsc2lmICgkY3R4X2JlZm9yZSA9fiAvXi5ccypcI1xzKmRlZmluZVxzKiQvKSB7CisKKwkJCSMgY3BwICNlbGlmIHN0YXRlbWVudCBjb25kaXRpb24gbWF5IHN0YXJ0IHdpdGggYSAoCisJCQl9IGVsc2lmICgkY3R4ID1+IC9eLlxzKlwjXHMqZWxpZlxzKiQvKSB7CisKKwkJCSMgSWYgdGhpcyB3aG9sZSB0aGluZ3MgZW5kcyB3aXRoIGEgdHlwZSBpdHMgbW9zdAorCQkJIyBsaWtlbHkgYSB0eXBlZGVmIGZvciBhIGZ1bmN0aW9uLgorCQkJfSBlbHNpZiAoJGN0eCA9fiAvJFR5cGUkLykgeworCisJCQl9IGVsc2UgeworCQkJCVdBUk4oIlNQQUNJTkciLAorCQkJCSAgICAgInNwYWNlIHByb2hpYml0ZWQgYmV0d2VlbiBmdW5jdGlvbiBuYW1lIGFuZCBvcGVuIHBhcmVudGhlc2lzICcoJ1xuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKyMgQ2hlY2sgb3BlcmF0b3Igc3BhY2luZy4KKwkJaWYgKCEoJGxpbmU9fi9cI1xzKmluY2x1ZGUvKSkgeworCQkJbXkgJG9wcyA9IHFyeworCQkJCTw8PXw+Pj18PD18Pj18PT18IT18CisJCQkJXCs9fC09fFwqPXxcLz18JT18XF49fFx8PXwmPXwKKwkJCQk9PnwtPnw8PHw+Pnw8fD58PXwhfH58CisJCQkJJiZ8XHxcfHwsfFxefFwrXCt8LS18JnxcfHxcK3wtfFwqfFwvfCV8CisJCQkJXD98OgorCQkJfXg7CisJCQlteSBAZWxlbWVudHMgPSBzcGxpdCgvKCRvcHN8OykvLCAkb3BsaW5lKTsKKwkJCW15ICRvZmYgPSAwOworCisJCQlteSAkYmxhbmsgPSBjb3B5X3NwYWNpbmcoJG9wbGluZSk7CisKKwkJCWZvciAobXkgJG4gPSAwOyAkbiA8ICQjZWxlbWVudHM7ICRuICs9IDIpIHsKKwkJCQkkb2ZmICs9IGxlbmd0aCgkZWxlbWVudHNbJG5dKTsKKworCQkJCSMgUGljayB1cCB0aGUgcHJlY2VkaW5nIGFuZCBzdWNjZWVkaW5nIGNoYXJhY3RlcnMuCisJCQkJbXkgJGNhID0gc3Vic3RyKCRvcGxpbmUsIDAsICRvZmYpOworCQkJCW15ICRjYyA9ICcnOworCQkJCWlmIChsZW5ndGgoJG9wbGluZSkgPj0gKCRvZmYgKyBsZW5ndGgoJGVsZW1lbnRzWyRuICsgMV0pKSkgeworCQkJCQkkY2MgPSBzdWJzdHIoJG9wbGluZSwgJG9mZiArIGxlbmd0aCgkZWxlbWVudHNbJG4gKyAxXSkpOworCQkJCX0KKwkJCQlteSAkY2IgPSAiJGNhJDskY2MiOworCisJCQkJbXkgJGEgPSAnJzsKKwkJCQkkYSA9ICdWJyBpZiAoJGVsZW1lbnRzWyRuXSBuZSAnJyk7CisJCQkJJGEgPSAnVycgaWYgKCRlbGVtZW50c1skbl0gPX4gL1xzJC8pOworCQkJCSRhID0gJ0MnIGlmICgkZWxlbWVudHNbJG5dID1+IC8kOyQvKTsKKwkJCQkkYSA9ICdCJyBpZiAoJGVsZW1lbnRzWyRuXSA9fiAvKFxbfFwoKSQvKTsKKwkJCQkkYSA9ICdPJyBpZiAoJGVsZW1lbnRzWyRuXSBlcSAnJyk7CisJCQkJJGEgPSAnRScgaWYgKCRjYSA9fiAvXlxzKiQvKTsKKworCQkJCW15ICRvcCA9ICRlbGVtZW50c1skbiArIDFdOworCisJCQkJbXkgJGMgPSAnJzsKKwkJCQlpZiAoZGVmaW5lZCAkZWxlbWVudHNbJG4gKyAyXSkgeworCQkJCQkkYyA9ICdWJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gbmUgJycpOworCQkJCQkkYyA9ICdXJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gPX4gL15ccy8pOworCQkJCQkkYyA9ICdDJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gPX4gL14kOy8pOworCQkJCQkkYyA9ICdCJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gPX4gL14oXCl8XF18OykvKTsKKwkJCQkJJGMgPSAnTycgaWYgKCRlbGVtZW50c1skbiArIDJdIGVxICcnKTsKKwkJCQkJJGMgPSAnRScgaWYgKCRlbGVtZW50c1skbiArIDJdID1+IC9eXHMqXFwkLyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGMgPSAnRSc7CisJCQkJfQorCisJCQkJbXkgJGN0eCA9ICIke2F9eCR7Y30iOworCisJCQkJbXkgJGF0ID0gIihjdHg6JGN0eCkiOworCisJCQkJbXkgJHB0ciA9IHN1YnN0cigkYmxhbmssIDAsICRvZmYpIC4gIl4iOworCQkJCW15ICRoZXJlcHRyID0gIiRoZXJlbGluZSRwdHJcbiI7CisKKwkJCQkjIFB1bGwgb3V0IHRoZSB2YWx1ZSBvZiB0aGlzIG9wZXJhdG9yLgorCQkJCW15ICRvcF90eXBlID0gc3Vic3RyKCRjdXJyX3ZhbHVlcywgJG9mZiArIDEsIDEpOworCisJCQkJIyBHZXQgdGhlIGZ1bGwgb3BlcmF0b3IgdmFyaWFudC4KKwkJCQlteSAkb3B2ID0gJG9wIC4gc3Vic3RyKCRjdXJyX3ZhcnMsICRvZmYsIDEpOworCisJCQkJIyBJZ25vcmUgb3BlcmF0b3JzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgorCQkJCWlmICgkb3BfdHlwZSBuZSAnVicgJiYKKwkJCQkgICAgJGNhID1+IC9ccyQvICYmICRjYyA9fiAvXlxzKiwvKSB7CisKKyMJCQkJIyBJZ25vcmUgY29tbWVudHMKKyMJCQkJfSBlbHNpZiAoJG9wID1+IC9eJDsrJC8pIHsKKworCQkJCSMgOyBzaG91bGQgaGF2ZSBlaXRoZXIgdGhlIGVuZCBvZiBsaW5lIG9yIGEgc3BhY2Ugb3IgXCBhZnRlciBpdAorCQkJCX0gZWxzaWYgKCRvcCBlcSAnOycpIHsKKwkJCQkJaWYgKCRjdHggIX4gLy54W1dFQkNdLyAmJgorCQkJCQkgICAgJGNjICF+IC9eXFwvICYmICRjYyAhfiAvXjsvKSB7CisJCQkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJCQkgICAgICAic3BhY2UgcmVxdWlyZWQgYWZ0ZXIgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCX0KKworCQkJCSMgLy8gaXMgYSBjb21tZW50CisJCQkJfSBlbHNpZiAoJG9wIGVxICcvLycpIHsKKworCQkJCSMgTm8gc3BhY2VzIGZvcjoKKwkJCQkjICAgLT4KKwkJCQkjICAgOiAgIHdoZW4gcGFydCBvZiBhIGJpdGZpZWxkCisJCQkJfSBlbHNpZiAoJG9wIGVxICctPicgfHwgJG9wdiBlcSAnOkInKSB7CisJCQkJCWlmICgkY3R4ID1+IC9XeC58LnhXLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlcyBwcm9oaWJpdGVkIGFyb3VuZCB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJfQorCisJCQkJIyAsIG11c3QgaGF2ZSBhIHNwYWNlIG9uIHRoZSByaWdodC4KKwkJCQl9IGVsc2lmICgkb3AgZXEgJywnKSB7CisJCQkJCWlmICgkY3R4ICF+IC8ueFtXRUNdLyAmJiAkY2MgIX4gL159LykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHJlcXVpcmVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisKKwkJCQkjICcqJyBhcyBwYXJ0IG9mIGEgdHlwZSBkZWZpbml0aW9uIC0tIHJlcG9ydGVkIGFscmVhZHkuCisJCQkJfSBlbHNpZiAoJG9wdiBlcSAnKl8nKSB7CisJCQkJCSN3YXJuICInKicgaXMgcGFydCBvZiB0eXBlXG4iOworCisJCQkJIyB1bmFyeSBvcGVyYXRvcnMgc2hvdWxkIGhhdmUgYSBzcGFjZSBiZWZvcmUgYW5kCisJCQkJIyBub25lIGFmdGVyLiAgTWF5IGJlIGxlZnQgYWRqYWNlbnQgdG8gYW5vdGhlcgorCQkJCSMgdW5hcnkgb3BlcmF0b3IsIG9yIGEgY2FzdAorCQkJCX0gZWxzaWYgKCRvcCBlcSAnIScgfHwgJG9wIGVxICd+JyB8fAorCQkJCQkgJG9wdiBlcSAnKlUnIHx8ICRvcHYgZXEgJy1VJyB8fAorCQkJCQkgJG9wdiBlcSAnJlUnIHx8ICRvcHYgZXEgJyYmVScpIHsKKwkJCQkJaWYgKCRjdHggIX4gL1tXRUJDXXguLyAmJiAkY2EgIX4gLyg/OlwpfCF8fnxcKnwtfFwmfFx8fFwrXCt8XC1cLXxceykkLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHJlcXVpcmVkIGJlZm9yZSB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJfQorCQkJCQlpZiAoJG9wIGVxICcqJyAmJiAkY2MgPX4vXHMqJE1vZGlmaWVyXGIvKSB7CisJCQkJCQkjIEEgdW5hcnkgJyonIG1heSBiZSBjb25zdAorCisJCQkJCX0gZWxzaWYgKCRjdHggPX4gLy54Vy8pIHsKKwkJCQkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCQkJCSAgICAgICJzcGFjZSBwcm9oaWJpdGVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisKKwkJCQkjIHVuYXJ5ICsrIGFuZCB1bmFyeSAtLSBhcmUgYWxsb3dlZCBubyBzcGFjZSBvbiBvbmUgc2lkZS4KKwkJCQl9IGVsc2lmICgkb3AgZXEgJysrJyBvciAkb3AgZXEgJy0tJykgeworCQkJCQlpZiAoJGN0eCAhfiAvW1dFT0JDXXhbXlddLyAmJiAkY3R4ICF+IC9bXlddeFtXT0JFQ10vKSB7CisJCQkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJCQkgICAgICAic3BhY2UgcmVxdWlyZWQgb25lIHNpZGUgb2YgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCX0KKwkJCQkJaWYgKCRjdHggPX4gL1d4W0JFXS8gfHwKKwkJCQkJICAgICgkY3R4ID1+IC9XeC4vICYmICRjYyA9fiAvXjsvKSkgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHByb2hpYml0ZWQgYmVmb3JlIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisJCQkJCWlmICgkY3R4ID1+IC9FeFcvKSB7CisJCQkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBhZnRlciB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJfQorCisKKwkJCQkjIDw8IGFuZCA+PiBtYXkgZWl0aGVyIGhhdmUgb3Igbm90IGhhdmUgc3BhY2VzIGJvdGggc2lkZXMKKwkJCQl9IGVsc2lmICgkb3AgZXEgJzw8JyBvciAkb3AgZXEgJz4+JyBvcgorCQkJCQkgJG9wIGVxICcmJyBvciAkb3AgZXEgJ14nIG9yICRvcCBlcSAnfCcgb3IKKwkJCQkJICRvcCBlcSAnKycgb3IgJG9wIGVxICctJyBvcgorCQkJCQkgJG9wIGVxICcqJyBvciAkb3AgZXEgJy8nIG9yCisJCQkJCSAkb3AgZXEgJyUnKQorCQkJCXsKKwkJCQkJaWYgKCRjdHggPX4gL1d4W15XQ0VdfFteV0NFXXhXLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgIm5lZWQgY29uc2lzdGVudCBzcGFjaW5nIGFyb3VuZCAnJG9wJyAkYXRcbiIgLgorCQkJCQkJCSRoZXJlcHRyKTsKKwkJCQkJfQorCisJCQkJIyBBIGNvbG9uIG5lZWRzIG5vIHNwYWNlcyBiZWZvcmUgd2hlbiBpdCBpcworCQkJCSMgdGVybWluYXRpbmcgYSBjYXNlIHZhbHVlIG9yIGEgbGFiZWwuCisJCQkJfSBlbHNpZiAoJG9wdiBlcSAnOkMnIHx8ICRvcHYgZXEgJzpMJykgeworCQkJCQlpZiAoJGN0eCA9fiAvV3guLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHByb2hpYml0ZWQgYmVmb3JlIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisKKwkJCQkjIEFsbCB0aGUgb3RoZXJzIG5lZWQgc3BhY2VzIGJvdGggc2lkZXMuCisJCQkJfSBlbHNpZiAoJGN0eCAhfiAvW0VXQ114W0NXRV0vKSB7CisJCQkJCW15ICRvayA9IDA7CisKKwkJCQkJIyBJZ25vcmUgZW1haWwgYWRkcmVzc2VzIDxmb29AYmFyPgorCQkJCQlpZiAoKCRvcCBlcSAnPCcgJiYKKwkJCQkJICAgICAkY2MgPX4gL15cUytcQFxTKz4vKSB8fAorCQkJCQkgICAgKCRvcCBlcSAnPicgJiYKKwkJCQkJICAgICAkY2EgPX4gLzxcUytcQFxTKyQvKSkKKwkJCQkJeworCQkJCQkJJG9rID0gMTsKKwkJCQkJfQorCisJCQkJCSMgSWdub3JlID86CisJCQkJCWlmICgoJG9wdiBlcSAnOk8nICYmICRjYSA9fiAvXD8kLykgfHwKKwkJCQkJICAgICgkb3AgZXEgJz8nICYmICRjYyA9fiAvXjovKSkgeworCQkJCQkJJG9rID0gMTsKKwkJCQkJfQorCisJCQkJCWlmICgkb2sgPT0gMCkgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlcyByZXF1aXJlZCBhcm91bmQgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCX0KKwkJCQl9CisJCQkJJG9mZiArPSBsZW5ndGgoJGVsZW1lbnRzWyRuICsgMV0pOworCQkJfQorCQl9CisKKyMgY2hlY2sgZm9yIG11bHRpcGxlIGFzc2lnbm1lbnRzCisJCWlmICgkbGluZSA9fiAvXi5ccyokTHZhbFxzKj1ccyokTHZhbFxzKj0oPyE9KS8pIHsKKwkJCUNISygiTVVMVElQTEVfQVNTSUdOTUVOVFMiLAorCQkJICAgICJtdWx0aXBsZSBhc3NpZ25tZW50cyBzaG91bGQgYmUgYXZvaWRlZFxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyMgIyBjaGVjayBmb3IgbXVsdGlwbGUgZGVjbGFyYXRpb25zLCBhbGxvd2luZyBmb3IgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbgorIyMgIyBjb250aW51YXRpb24uCisjIyAJCWlmICgkbGluZSA9fiAvXi5ccyokVHlwZVxzKyRJZGVudCg/OlxzKj1bXix7XSopP1xzKixccyokSWRlbnQuKi8gJiYKKyMjIAkJICAgICRsaW5lICF+IC9eLlxzKiRUeXBlXHMrJElkZW50KD86XHMqPVteLHtdKik/XHMqLFxzKiRUeXBlXHMqJElkZW50LiovKSB7CisjIworIyMgCQkJIyBSZW1vdmUgYW55IGJyYWNrZXRlZCBzZWN0aW9ucyB0byBlbnN1cmUgd2UgZG8gbm90CisjIyAJCQkjIGZhbHNseSByZXBvcnQgdGhlIHBhcmFtZXRlcnMgb2YgZnVuY3Rpb25zLgorIyMgCQkJbXkgJGxuID0gJGxpbmU7CisjIyAJCQl3aGlsZSAoJGxuID1+IHMvXChbXlwoXCldKlwpLy9nKSB7CisjIyAJCQl9CisjIyAJCQlpZiAoJGxuID1+IC8sLykgeworIyMgCQkJCVdBUk4oIk1VTFRJUExFX0RFQ0xBUkFUSU9OIiwKKyMjCQkJCSAgICAgImRlY2xhcmluZyBtdWx0aXBsZSB2YXJpYWJsZXMgdG9nZXRoZXIgc2hvdWxkIGJlIGF2b2lkZWRcbiIgLiAkaGVyZWN1cnIpOworIyMgCQkJfQorIyMgCQl9CisKKyNuZWVkIHNwYWNlIGJlZm9yZSBicmFjZSBmb2xsb3dpbmcgaWYsIHdoaWxlLCBldGMKKwkJaWYgKCgkbGluZSA9fiAvXCguKlwpey8gJiYgJGxpbmUgIX4gL1woJFR5cGVcKXsvKSB8fAorCQkgICAgJGxpbmUgPX4gL2Rvey8pIHsKKwkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCSAgICAgICJzcGFjZSByZXF1aXJlZCBiZWZvcmUgdGhlIG9wZW4gYnJhY2UgJ3snXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNsb3NpbmcgYnJhY2Ugc2hvdWxkIGhhdmUgYSBzcGFjZSBmb2xsb3dpbmcgaXQgd2hlbiBpdCBoYXMgYW55dGhpbmcKKyMgb24gdGhlIGxpbmUKKwkJaWYgKCRsaW5lID1+IC99KD8hKD86LHw7fFwpKSlcUy8pIHsKKwkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCSAgICAgICJzcGFjZSByZXF1aXJlZCBhZnRlciB0aGF0IGNsb3NlIGJyYWNlICd9J1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBzcGFjaW5nIG9uIHNxdWFyZSBicmFja2V0cworCQlpZiAoJGxpbmUgPX4gL1xbXHMvICYmICRsaW5lICF+IC9cW1xzKiQvKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBhZnRlciB0aGF0IG9wZW4gc3F1YXJlIGJyYWNrZXQgJ1snXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCQlpZiAoJGxpbmUgPX4gL1xzXF0vKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgdGhhdCBjbG9zZSBzcXVhcmUgYnJhY2tldCAnXSdcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgc3BhY2luZyBvbiBwYXJlbnRoZXNlcworCQlpZiAoJGxpbmUgPX4gL1woXHMvICYmICRsaW5lICF+IC9cKFxzKig/OlxcKT8kLyAmJgorCQkgICAgJGxpbmUgIX4gL2ZvclxzKlwoXHMrOy8pIHsKKwkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCSAgICAgICJzcGFjZSBwcm9oaWJpdGVkIGFmdGVyIHRoYXQgb3BlbiBwYXJlbnRoZXNpcyAnKCdcbiIgLiAkaGVyZWN1cnIpOworCQl9CisJCWlmICgkbGluZSA9fiAvKFxzKylcKS8gJiYgJGxpbmUgIX4gL14uXHMqXCkvICYmCisJCSAgICAkbGluZSAhfiAvZm9yXHMqXCguKjtccytcKS8gJiYKKwkJICAgICRsaW5lICF+IC86XHMrXCkvKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgdGhhdCBjbG9zZSBwYXJlbnRoZXNpcyAnKSdcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyNnb3RvIGxhYmVscyBhcmVuJ3QgaW5kZW50ZWQsIGFsbG93IGEgc2luZ2xlIHNwYWNlIGhvd2V2ZXIKKwkJaWYgKCRsaW5lPX4vXi5ccytbQS1aYS16XGRfXSs6KD8hWzAtOV0rKS8gYW5kCisJCSAgICEoJGxpbmU9fi9eLiBbQS1aYS16XGRfXSs6LykgYW5kICEoJGxpbmU9fi9eLlxzK2RlZmF1bHQ6LykpIHsKKwkJCVdBUk4oIklOREVOVEVEX0xBQkVMIiwKKwkJCSAgICAgImxhYmVscyBzaG91bGQgbm90IGJlIGluZGVudGVkXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIFJldHVybiBpcyBub3QgYSBmdW5jdGlvbi4KKwkJaWYgKGRlZmluZWQoJHN0YXQpICYmICRzdGF0ID1+IC9eLlxzKnJldHVybihccyopKFwoLiopOy9zKSB7CisJCQlteSAkc3BhY2luZyA9ICQxOworCQkJbXkgJHZhbHVlID0gJDI7CisKKwkJCSMgRmxhdHRlbiBhbnkgcGFyZW50aGVzZXMKKwkJCSR2YWx1ZSA9fiBzL1woLyBcKC9nOworCQkJJHZhbHVlID1+IHMvXCkvXCkgL2c7CisJCQl3aGlsZSAoJHZhbHVlID1+IHMvXFtbXlx7XH1dKlxdLzEvIHx8CisJCQkgICAgICAgJHZhbHVlICF+IC8oPzokSWRlbnR8LT8kQ29uc3RhbnQpXHMqCisJCQkJCSAgICAgJENvbXBhcmVccyoKKwkJCQkJICAgICAoPzokSWRlbnR8LT8kQ29uc3RhbnQpL3ggJiYKKwkJCSAgICAgICAkdmFsdWUgPX4gcy9cKFteXChcKV0qXCkvMS8pIHsKKwkJCX0KKyNwcmludCAidmFsdWU8JHZhbHVlPlxuIjsKKwkJCWlmICgkdmFsdWUgPX4gL15ccyooPzokSWRlbnR8LT8kQ29uc3RhbnQpXHMqJC8pIHsKKwkJCQlFUlJPUigiUkVUVVJOX1BBUkVOVEhFU0VTIiwKKwkJCQkgICAgICAicmV0dXJuIGlzIG5vdCBhIGZ1bmN0aW9uLCBwYXJlbnRoZXNlcyBhcmUgbm90IHJlcXVpcmVkXG4iIC4gJGhlcmVjdXJyKTsKKworCQkJfSBlbHNpZiAoJHNwYWNpbmcgIX4gL1xzKy8pIHsKKwkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJICAgICAgInNwYWNlIHJlcXVpcmVkIGJlZm9yZSB0aGUgb3BlbiBwYXJlbnRoZXNpcyAnKCdcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisjIFJldHVybiBvZiB3aGF0IGFwcGVhcnMgdG8gYmUgYW4gZXJybm8gc2hvdWxkIG5vcm1hbGx5IGJlIC0ndmUKKwkJaWYgKCRsaW5lID1+IC9eLlxzKnJldHVyblxzKihFW0EtWl0qKVxzKjsvKSB7CisJCQlteSAkbmFtZSA9ICQxOworCQkJaWYgKCRuYW1lIG5lICdFT0YnICYmICRuYW1lIG5lICdFUlJPUicpIHsKKwkJCQlXQVJOKCJVU0VfTkVHQVRJVkVfRVJSTk8iLAorCQkJCSAgICAgInJldHVybiBvZiBhbiBlcnJubyBzaG91bGQgdHlwaWNhbGx5IGJlIC12ZSAocmV0dXJuIC0kMSlcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgdHlwZWNhc3RzIG9uIG1pbi9tYXggY291bGQgYmUgbWluX3QvbWF4X3QKKwkJaWYgKCRsaW5lID1+IC9eXCsoPzouKj8pXGIobWlufG1heClccypcKCRUeXBlY2FzdHswLDF9KCRMdmFsT3JGdW5jKVxzKixccyokVHlwZWNhc3R7MCwxfSgkTHZhbE9yRnVuYylccypcKS8pIHsKKwkJCWlmIChkZWZpbmVkICQyIHx8IGRlZmluZWQgJDgpIHsKKwkJCQlteSAkY2FsbCA9ICQxOworCQkJCW15ICRjYXN0MSA9IGRlcGFyZW50aGVzaXplKCQyKTsKKwkJCQlteSAkYXJnMSA9ICQzOworCQkJCW15ICRjYXN0MiA9IGRlcGFyZW50aGVzaXplKCQ4KTsKKwkJCQlteSAkYXJnMiA9ICQ5OworCQkJCW15ICRjYXN0OworCisJCQkJaWYgKCRjYXN0MSBuZSAiIiAmJiAkY2FzdDIgbmUgIiIpIHsKKwkJCQkJJGNhc3QgPSAiJGNhc3QxIG9yICRjYXN0MiI7CisJCQkJfSBlbHNpZiAoJGNhc3QxIG5lICIiKSB7CisJCQkJCSRjYXN0ID0gJGNhc3QxOworCQkJCX0gZWxzZSB7CisJCQkJCSRjYXN0ID0gJGNhc3QyOworCQkJCX0KKwkJCQlXQVJOKCJNSU5NQVgiLAorCQkJCSAgICAgIiRjYWxsKCkgc2hvdWxkIHByb2JhYmx5IGJlICR7Y2FsbH1fdCgkY2FzdCwgJGFyZzEsICRhcmcyKVxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworIyBOZWVkIGEgc3BhY2UgYmVmb3JlIG9wZW4gcGFyZW50aGVzaXMgYWZ0ZXIgaWYsIHdoaWxlIGV0YworCQlpZiAoJGxpbmU9fi9cYihpZnx3aGlsZXxmb3J8c3dpdGNoKVwoLykgeworCQkJRVJST1IoIlNQQUNJTkciLCAic3BhY2UgcmVxdWlyZWQgYmVmb3JlIHRoZSBvcGVuIHBhcmVudGhlc2lzICcoJ1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBDaGVjayBmb3IgaWxsZWdhbCBhc3NpZ25tZW50IGluIGlmIGNvbmRpdGlvbmFsIC0tIGFuZCBjaGVjayBmb3IgdHJhaWxpbmcKKyMgc3RhdGVtZW50cyBhZnRlciB0aGUgY29uZGl0aW9uYWwuCisJCWlmICgkbGluZSA9fiAvZG9ccyooPyF7KS8pIHsKKwkJCW15ICgkc3RhdF9uZXh0KSA9IGN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVfbnJfbmV4dCwKKwkJCQkJCSRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KTsKKwkJCSRzdGF0X25leHQgPX4gcy9cbi4vXG4gL2c7CisJCQkjI3ByaW50ICJzdGF0PCRzdGF0PiBzdGF0X25leHQ8JHN0YXRfbmV4dD5cbiI7CisKKwkJCWlmICgkc3RhdF9uZXh0ID1+IC9eXHMqd2hpbGVcYi8pIHsKKwkJCQkjIElmIHRoZSBzdGF0ZW1lbnQgY2FycmllcyBsZWFkaW5nIG5ld2xpbmVzLAorCQkJCSMgdGhlbiBjb3VudCB0aG9zZSBhcyBvZmZzZXRzLgorCQkJCW15ICgkd2hpdGVzcGFjZSkgPQorCQkJCQkoJHN0YXRfbmV4dCA9fiAvXigoPzpccypcblsrLV0pKlxzKikvcyk7CisJCQkJbXkgJG9mZnNldCA9CisJCQkJCXN0YXRlbWVudF9yYXdsaW5lcygkd2hpdGVzcGFjZSkgLSAxOworCisJCQkJJHN1cHByZXNzX3doaWxldHJhaWxlcnN7JGxpbmVfbnJfbmV4dCArCisJCQkJCQkJCSRvZmZzZXR9ID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoIWRlZmluZWQgJHN1cHByZXNzX3doaWxldHJhaWxlcnN7JGxpbmVucn0gJiYKKwkJICAgICRsaW5lID1+IC9cYig/OmlmfHdoaWxlfGZvcilccypcKC8gJiYgJGxpbmUgIX4gL14uXHMqIy8pIHsKKwkJCW15ICgkcywgJGMpID0gKCRzdGF0LCAkY29uZCk7CisKKwkJCWlmICgkYyA9fiAvXGJpZlxzKlwoLipbXjw+IT1dPVtePV0uKi9zKSB7CisJCQkJRVJST1IoIkFTU0lHTl9JTl9JRiIsCisJCQkJICAgICAgImRvIG5vdCB1c2UgYXNzaWdubWVudCBpbiBpZiBjb25kaXRpb25cbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCisJCQkjIEZpbmQgb3V0IHdoYXQgaXMgb24gdGhlIGVuZCBvZiB0aGUgbGluZSBhZnRlciB0aGUKKwkJCSMgY29uZGl0aW9uYWwuCisJCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYyksICcnKTsKKwkJCSRzID1+IHMvXG4uKi8vZzsKKwkJCSRzID1+IHMvJDsvL2c7IAkjIFJlbW92ZSBhbnkgY29tbWVudHMKKwkJCWlmIChsZW5ndGgoJGMpICYmICRzICF+IC9eXHMqez9ccypcXCpccyokLyAmJgorCQkJICAgICRjICF+IC99XHMqd2hpbGVccyovKQorCQkJeworCQkJCSMgRmluZCBvdXQgaG93IGxvbmcgdGhlIGNvbmRpdGlvbmFsIGFjdHVhbGx5IGlzLgorCQkJCW15IEBuZXdsaW5lcyA9ICgkYyA9fiAvXG4vZ3MpOworCQkJCW15ICRjb25kX2xpbmVzID0gMSArICQjbmV3bGluZXM7CisJCQkJbXkgJHN0YXRfcmVhbCA9ICcnOworCisJCQkJJHN0YXRfcmVhbCA9IHJhd19saW5lKCRsaW5lbnIsICRjb25kX2xpbmVzKQorCQkJCQkJCS4gIlxuIiBpZiAoJGNvbmRfbGluZXMpOworCQkJCWlmIChkZWZpbmVkKCRzdGF0X3JlYWwpICYmICRjb25kX2xpbmVzID4gMSkgeworCQkJCQkkc3RhdF9yZWFsID0gIlsuLi5dXG4kc3RhdF9yZWFsIjsKKwkJCQl9CisKKwkJCQlFUlJPUigiVFJBSUxJTkdfU1RBVEVNRU5UUyIsCisJCQkJICAgICAgInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuICRoZXJlY3VyciAuICRzdGF0X3JlYWwpOworCQkJfQorCQl9CisKKyMgQ2hlY2sgZm9yIGJpdHdpc2UgdGVzdHMgd3JpdHRlbiBhcyBib29sZWFuCisJCWlmICgkbGluZSA9fiAvCisJCQkoPzoKKwkJCQkoPzpcW3xcKHxcJlwmfFx8XHwpCisJCQkJXHMqMFt4WF1bMC05XStccyoKKwkJCQkoPzpcJlwmfFx8XHwpCisJCQl8CisJCQkJKD86XCZcJnxcfFx8KQorCQkJCVxzKjBbeFhdWzAtOV0rXHMqCisJCQkJKD86XCZcJnxcfFx8fFwpfFxdKQorCQkJKS94KQorCQl7CisJCQlXQVJOKCJIRVhBREVDSU1BTF9CT09MRUFOX1RFU1QiLAorCQkJICAgICAiYm9vbGVhbiB0ZXN0IHdpdGggaGV4YWRlY2ltYWwsIHBlcmhhcHMganVzdCAxIFwmIG9yIFx8P1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBpZiBhbmQgZWxzZSBzaG91bGQgbm90IGhhdmUgZ2VuZXJhbCBzdGF0ZW1lbnRzIGFmdGVyIGl0CisJCWlmICgkbGluZSA9fiAvXi5ccyooPzp9XHMqKT9lbHNlXGIoLiopLykgeworCQkJbXkgJHMgPSAkMTsKKwkJCSRzID1+IHMvJDsvL2c7IAkjIFJlbW92ZSBhbnkgY29tbWVudHMKKwkJCWlmICgkcyAhfiAvXlxzKig/OlxzaWZ8KD86e3wpXHMqXFw/XHMqJCkvKSB7CisJCQkJRVJST1IoIlRSQUlMSU5HX1NUQVRFTUVOVFMiLAorCQkJCSAgICAgICJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisjIGlmIHNob3VsZCBub3QgY29udGludWUgYSBicmFjZQorCQlpZiAoJGxpbmUgPX4gL31ccyppZlxiLykgeworCQkJRVJST1IoIlRSQUlMSU5HX1NUQVRFTUVOVFMiLAorCQkJICAgICAgInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKwkJfQorIyBjYXNlIGFuZCBkZWZhdWx0IHNob3VsZCBub3QgaGF2ZSBnZW5lcmFsIHN0YXRlbWVudHMgYWZ0ZXIgdGhlbQorCQlpZiAoJGxpbmUgPX4gL14uXHMqKD86Y2FzZVxzKi4qfGRlZmF1bHRccyopOi9nICYmCisJCSAgICAkbGluZSAhfiAvXEcoPzoKKwkJCSg/OlxzKiQ7KikoPzpccyp7KT8oPzpccyokOyopKD86XHMqXFwpP1xzKiR8CisJCQlccypyZXR1cm5ccysKKwkJICAgICkveGcpCisJCXsKKwkJCUVSUk9SKCJUUkFJTElOR19TVEFURU1FTlRTIiwKKwkJCSAgICAgICJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKwkJIyBDaGVjayBmb3IgfTxubD5lbHNlIHssIHRoZXNlIG11c3QgYmUgYXQgdGhlIHNhbWUKKwkJIyBpbmRlbnQgbGV2ZWwgdG8gYmUgcmVsZXZhbnQgdG8gZWFjaCBvdGhlci4KKwkJaWYgKCRwcmV2bGluZT1+L31ccyokLyBhbmQgJGxpbmU9fi9eLlxzKmVsc2VccyovIGFuZAorCQkJCQkJJHByZXZpbmRlbnQgPT0gJGluZGVudCkgeworCQkJRVJST1IoIkVMU0VfQUZURVJfQlJBQ0UiLAorCQkJICAgICAgImVsc2Ugc2hvdWxkIGZvbGxvdyBjbG9zZSBicmFjZSAnfSdcbiIgLiAkaGVyZXByZXYpOworCQl9CisKKwkJaWYgKCRwcmV2bGluZT1+L31ccyokLyBhbmQgJGxpbmU9fi9eLlxzKndoaWxlXHMqLyBhbmQKKwkJCQkJCSRwcmV2aW5kZW50ID09ICRpbmRlbnQpIHsKKwkJCW15ICgkcywgJGMpID0gY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVhbGNudCwgMCk7CisKKwkJCSMgRmluZCBvdXQgd2hhdCBpcyBvbiB0aGUgZW5kIG9mIHRoZSBsaW5lIGFmdGVyIHRoZQorCQkJIyBjb25kaXRpb25hbC4KKwkJCXN1YnN0cigkcywgMCwgbGVuZ3RoKCRjKSwgJycpOworCQkJJHMgPX4gcy9cbi4qLy9nOworCisJCQlpZiAoJHMgPX4gL15ccyo7LykgeworCQkJCUVSUk9SKCJXSElMRV9BRlRFUl9CUkFDRSIsCisJCQkJICAgICAgIndoaWxlIHNob3VsZCBmb2xsb3cgY2xvc2UgYnJhY2UgJ30nXG4iIC4gJGhlcmVwcmV2KTsKKwkJCX0KKwkJfQorCisjc3R1ZGx5IGNhcHMsIGNvbW1lbnRlZCBvdXQgdW50aWwgZmlndXJlIG91dCBob3cgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1c2Ugb2YgZXhpc3RpbmcgYW5kIGFkZGluZyBuZXcKKyMJCWlmICgoJGxpbmU9fi9bXHdfXVthLXpcZF0rW0EtWl0vKSBhbmQgISgkbGluZT1+L3ByaW50LykpIHsKKyMJCSAgICBwcmludCAiTm8gc3R1ZGx5IGNhcHMsIHVzZSBfXG4iOworIwkJICAgIHByaW50ICIkaGVyZWN1cnIiOworIwkJICAgICRjbGVhbiA9IDA7CisjCQl9CisKKyNubyBzcGFjZXMgYWxsb3dlZCBhZnRlciBcIGluIGRlZmluZQorCQlpZiAoJGxpbmU9fi9cI1xzKmRlZmluZS4qXFxccyQvKSB7CisJCQlXQVJOKCJXSElURVNQQUNFX0FGVEVSX0xJTkVfQ09OVElOVUFUSU9OIiwKKwkJCSAgICAgIldoaXRlcHNwYWNlIGFmdGVyIFxcIG1ha2VzIG5leHQgbGluZXMgdXNlbGVzc1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworI3dhcm4gaWYgPGFzbS9mb28uaD4gaXMgI2luY2x1ZGVkIGFuZCA8bGludXgvZm9vLmg+IGlzIGF2YWlsYWJsZSAodXNlcyBSQVcgbGluZSkKKwkJaWYgKCR0cmVlICYmICRyYXdsaW5lID1+IG17Xi5ccypcI1xzKmluY2x1ZGVccypcPGFzbVwvKC4qKVwuaFw+fSkgeworCQkJbXkgJGZpbGUgPSAiJDEuaCI7CisJCQlteSAkY2hlY2tmaWxlID0gImluY2x1ZGUvbGludXgvJGZpbGUiOworCQkJaWYgKC1mICIkcm9vdC8kY2hlY2tmaWxlIiAmJgorCQkJICAgICRyZWFsZmlsZSBuZSAkY2hlY2tmaWxlICYmCisJCQkgICAgJDEgIX4gLyRhbGxvd2VkX2FzbV9pbmNsdWRlcy8pCisJCQl7CisJCQkJaWYgKCRyZWFsZmlsZSA9fiBte15hcmNoL30pIHsKKwkJCQkJQ0hLKCJBUkNIX0lOQ0xVREVfTElOVVgiLAorCQkJCQkgICAgIkNvbnNpZGVyIHVzaW5nICNpbmNsdWRlIDxsaW51eC8kZmlsZT4gaW5zdGVhZCBvZiA8YXNtLyRmaWxlPlxuIiAuICRoZXJlY3Vycik7CisJCQkJfSBlbHNlIHsKKwkJCQkJV0FSTigiSU5DTFVERV9MSU5VWCIsCisJCQkJCSAgICAgIlVzZSAjaW5jbHVkZSA8bGludXgvJGZpbGU+IGluc3RlYWQgb2YgPGFzbS8kZmlsZT5cbiIgLiAkaGVyZWN1cnIpOworCQkJCX0KKwkJCX0KKwkJfQorCisjIG11bHRpLXN0YXRlbWVudCBtYWNyb3Mgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGEgZG8gd2hpbGUgbG9vcCwgZ3JhYiB0aGUKKyMgZmlyc3Qgc3RhdGVtZW50IGFuZCBlbnN1cmUgaXRzIHRoZSB3aG9sZSBtYWNybyBpZiBpdHMgbm90IGVuY2xvc2VkCisjIGluIGEga25vd24gZ29vZCBjb250YWluZXIKKwkJaWYgKCRyZWFsZmlsZSAhfiBtQC92bWxpbnV4Lmxkcy5oJEAgJiYKKwkJICAgICRsaW5lID1+IC9eLlxzKlwjXHMqZGVmaW5lXHMqJElkZW50KFwoKT8vKSB7CisJCQlteSAkbG4gPSAkbGluZW5yOworCQkJbXkgJGNudCA9ICRyZWFsY250OworCQkJbXkgKCRvZmYsICRkc3RhdCwgJGRjb25kLCAkcmVzdCk7CisJCQlteSAkY3R4ID0gJyc7CisKKwkJCW15ICRhcmdzID0gZGVmaW5lZCgkMSk7CisKKwkJCSMgRmluZCB0aGUgZW5kIG9mIHRoZSBtYWNybyBhbmQgbGltaXQgb3VyIHN0YXRlbWVudAorCQkJIyBzZWFyY2ggdG8gdGhhdC4KKwkJCXdoaWxlICgkY250ID4gMCAmJiBkZWZpbmVkICRsaW5lc1skbG4gLSAxXSAmJgorCQkJCSRsaW5lc1skbG4gLSAxXSA9fiAvXig/Oi18Li4qXFwkKS8pCisJCQl7CisJCQkJJGN0eCAuPSAkcmF3bGluZXNbJGxuIC0gMV0gLiAiXG4iOworCQkJCSRjbnQtLSBpZiAoJGxpbmVzWyRsbiAtIDFdICF+IC9eLS8pOworCQkJCSRsbisrOworCQkJfQorCQkJJGN0eCAuPSAkcmF3bGluZXNbJGxuIC0gMV07CisKKwkJCSgkZHN0YXQsICRkY29uZCwgJGxuLCAkY250LCAkb2ZmKSA9CisJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkbG4gLSAkbGluZW5yICsgMSwgMCk7CisJCQkjcHJpbnQgImRzdGF0PCRkc3RhdD4gZGNvbmQ8JGRjb25kPiBjbnQ8JGNudD4gb2ZmPCRvZmY+XG4iOworCQkJI3ByaW50ICJMSU5FPCRsaW5lc1skbG4tMV0+IGxlbjwiIC4gbGVuZ3RoKCRsaW5lc1skbG4tMV0pIC4gIlxuIjsKKworCQkJIyBFeHRyYWN0IHRoZSByZW1haW5kZXIgb2YgdGhlIGRlZmluZSAoaWYgYW55KSBhbmQKKwkJCSMgcmlwIG9mZiBzdXJyb3VuZGluZyBzcGFjZXMsIGFuZCB0cmFpbGluZyBcJ3MuCisJCQkkcmVzdCA9ICcnOworCQkJd2hpbGUgKCRvZmYgIT0gMCB8fCAoJGNudCA+IDAgJiYgJHJlc3QgPX4gL1xcXHMqJC8pKSB7CisJCQkJI3ByaW50ICJBRERJTkcgY250PCRjbnQ+ICRvZmYgPCIgLiBzdWJzdHIoJGxpbmVzWyRsbiAtIDFdLCAkb2ZmKSAuICI+IHJlc3Q8JHJlc3Q+XG4iOworCQkJCWlmICgkb2ZmICE9IDAgfHwgJGxpbmVzWyRsbiAtIDFdICF+IC9eLS8pIHsKKwkJCQkJJHJlc3QgLj0gc3Vic3RyKCRsaW5lc1skbG4gLSAxXSwgJG9mZikgLiAiXG4iOworCQkJCQkkY250LS07CisJCQkJfQorCQkJCSRsbisrOworCQkJCSRvZmYgPSAwOworCQkJfQorCQkJJHJlc3QgPX4gcy9cXFxuLi8vZzsKKwkJCSRyZXN0ID1+IHMvXlxzKi8vczsKKwkJCSRyZXN0ID1+IHMvXHMqJC8vczsKKworCQkJIyBDbGVhbiB1cCB0aGUgb3JpZ2luYWwgc3RhdGVtZW50LgorCQkJaWYgKCRhcmdzKSB7CisJCQkJc3Vic3RyKCRkc3RhdCwgMCwgbGVuZ3RoKCRkY29uZCksICcnKTsKKwkJCX0gZWxzZSB7CisJCQkJJGRzdGF0ID1+IHMvXi5ccypcI1xzKmRlZmluZVxzKyRJZGVudFxzKi8vOworCQkJfQorCQkJJGRzdGF0ID1+IHMvJDsvL2c7CisJCQkkZHN0YXQgPX4gcy9cXFxuLi8vZzsKKwkJCSRkc3RhdCA9fiBzL15ccyovL3M7CisJCQkkZHN0YXQgPX4gcy9ccyokLy9zOworCisJCQkjIEZsYXR0ZW4gYW55IHBhcmVudGhlc2VzIGFuZCBicmFjZXMKKwkJCXdoaWxlICgkZHN0YXQgPX4gcy9cKFteXChcKV0qXCkvMS8gfHwKKwkJCSAgICAgICAkZHN0YXQgPX4gcy9ce1teXHtcfV0qXH0vMS8gfHwKKwkJCSAgICAgICAkZHN0YXQgPX4gcy9cW1teXHtcfV0qXF0vMS8pCisJCQl7CisJCQl9CisKKwkJCW15ICRleGNlcHRpb25zID0gcXJ7CisJCQkJJERlY2xhcmV8CisJCQkJbW9kdWxlX3BhcmFtX25hbWVkfAorCQkJCU1PRFVMRV9QQVJBTV9ERVNDfAorCQkJCURFQ0xBUkVfUEVSX0NQVXwKKwkJCQlERUZJTkVfUEVSX0NQVXwKKwkJCQlfX3R5cGVvZl9fXCh8CisJCQkJdW5pb258CisJCQkJc3RydWN0fAorCQkJCVwuJElkZW50XHMqPVxzKnwKKwkJCQleXCJ8XCIkCisJCQl9eDsKKwkJCSNwcmludCAiUkVTVDwkcmVzdD4gZHN0YXQ8JGRzdGF0PiBjdHg8JGN0eD5cbiI7CisJCQlpZiAoJHJlc3QgbmUgJycgJiYgJHJlc3QgbmUgJywnKSB7CisJCQkJaWYgKCRyZXN0ICF+IC93aGlsZVxzKlwoLyAmJgorCQkJCSAgICAkZHN0YXQgIX4gLyRleGNlcHRpb25zLykKKwkJCQl7CisJCQkJCUVSUk9SKCJNVUxUSVNUQVRFTUVOVF9NQUNST19VU0VfRE9fV0hJTEUiLAorCQkJCQkgICAgICAiTWFjcm9zIHdpdGggbXVsdGlwbGUgc3RhdGVtZW50cyBzaG91bGQgYmUgZW5jbG9zZWQgaW4gYSBkbyAtIHdoaWxlIGxvb3BcbiIgLiAiJGhlcmVcbiRjdHhcbiIpOworCQkJCX0KKworCQkJfSBlbHNpZiAoJGN0eCAhfiAvOy8pIHsKKwkJCQlpZiAoJGRzdGF0IG5lICcnICYmCisJCQkJICAgICRkc3RhdCAhfiAvXig/OiRJZGVudHwtPyRDb25zdGFudCkkLyAmJgorCQkJCSAgICAkZHN0YXQgIX4gLyRleGNlcHRpb25zLyAmJgorCQkJCSAgICAkZHN0YXQgIX4gL15cLiRJZGVudFxzKj0vICYmCisJCQkJICAgICRkc3RhdCA9fiAvJE9wZXJhdG9ycy8pCisJCQkJeworCQkJCQlFUlJPUigiQ09NUExFWF9NQUNSTyIsCisJCQkJCSAgICAgICJNYWNyb3Mgd2l0aCBjb21wbGV4IHZhbHVlcyBzaG91bGQgYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzaXNcbiIgLiAiJGhlcmVcbiRjdHhcbiIpOworCQkJCX0KKwkJCX0KKwkJfQorCisjIG1ha2Ugc3VyZSBzeW1ib2xzIGFyZSBhbHdheXMgd3JhcHBlZCB3aXRoIFZNTElOVVhfU1lNQk9MKCkgLi4uCisjIGFsbCBhc3NpZ25tZW50cyBtYXkgaGF2ZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggYW4gYXNzaWdubWVudDoKKyMJLgorIwlBTElHTiguLi4pCisjCVZNTElOVVhfU1lNQk9MKC4uLikKKwkJaWYgKCRyZWFsZmlsZSBlcSAndm1saW51eC5sZHMuaCcgJiYgJGxpbmUgPX4gLyg/Oig/Ol58XHMpJElkZW50XHMqPXw9XHMqJElkZW50KD86XHN8JCkpLykgeworCQkJV0FSTigiTUlTU0lOR19WTUxJTlVYX1NZTUJPTCIsCisJCQkgICAgICJ2bWxpbnV4Lmxkcy5oIG5lZWRzIFZNTElOVVhfU1lNQk9MKCkgYXJvdW5kIEMtdmlzaWJsZSBzeW1ib2xzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciByZWR1bmRhbnQgYnJhY2luZyByb3VuZCBpZiBldGMKKwkJaWYgKCRsaW5lID1+IC8oXi4qKVxiaWZcYi8gJiYgJDEgIX4gL2Vsc2VccyokLykgeworCQkJbXkgKCRsZXZlbCwgJGVuZGxuLCBAY2h1bmtzKSA9CisJCQkJY3R4X3N0YXRlbWVudF9mdWxsKCRsaW5lbnIsICRyZWFsY250LCAxKTsKKwkJCSNwcmludCAiY2h1bmtzPCQjY2h1bmtzPiBsaW5lbnI8JGxpbmVucj4gZW5kbG48JGVuZGxuPiBsZXZlbDwkbGV2ZWw+XG4iOworCQkJI3ByaW50ICJBUFc6IDw8JGNodW5rc1sxXVswXT4+PDwkY2h1bmtzWzFdWzFdPj5cbiI7CisJCQlpZiAoJCNjaHVua3MgPiAwICYmICRsZXZlbCA9PSAwKSB7CisJCQkJbXkgJGFsbG93ZWQgPSAwOworCQkJCW15ICRzZWVuID0gMDsKKwkJCQlteSAkaGVyZWN0eCA9ICRoZXJlIC4gIlxuIjsKKwkJCQlteSAkbG4gPSAkbGluZW5yIC0gMTsKKwkJCQlmb3IgbXkgJGNodW5rIChAY2h1bmtzKSB7CisJCQkJCW15ICgkY29uZCwgJGJsb2NrKSA9IEB7JGNodW5rfTsKKworCQkJCQkjIElmIHRoZSBjb25kaXRpb24gY2FycmllcyBsZWFkaW5nIG5ld2xpbmVzLCB0aGVuIGNvdW50IHRob3NlIGFzIG9mZnNldHMuCisJCQkJCW15ICgkd2hpdGVzcGFjZSkgPSAoJGNvbmQgPX4gL14oKD86XHMqXG5bKy1dKSpccyopL3MpOworCQkJCQlteSAkb2Zmc2V0ID0gc3RhdGVtZW50X3Jhd2xpbmVzKCR3aGl0ZXNwYWNlKSAtIDE7CisKKwkJCQkJI3ByaW50ICJDT05EPCRjb25kPiB3aGl0ZXNwYWNlPCR3aGl0ZXNwYWNlPiBvZmZzZXQ8JG9mZnNldD5cbiI7CisKKwkJCQkJIyBXZSBoYXZlIGxvb2tlZCBhdCBhbmQgYWxsb3dlZCB0aGlzIHNwZWNpZmljIGxpbmUuCisJCQkJCSRzdXBwcmVzc19pZmJyYWNlc3skbG4gKyAkb2Zmc2V0fSA9IDE7CisKKwkJCQkJJGhlcmVjdHggLj0gIiRyYXdsaW5lc1skbG4gKyAkb2Zmc2V0XVxuWy4uLl1cbiI7CisJCQkJCSRsbiArPSBzdGF0ZW1lbnRfcmF3bGluZXMoJGJsb2NrKSAtIDE7CisKKwkJCQkJc3Vic3RyKCRibG9jaywgMCwgbGVuZ3RoKCRjb25kKSwgJycpOworCisJCQkJCSRzZWVuKysgaWYgKCRibG9jayA9fiAvXlxzKnsvKTsKKworCQkJCQkjcHJpbnQgImNvbmQ8JGNvbmQ+IGJsb2NrPCRibG9jaz4gYWxsb3dlZDwkYWxsb3dlZD5cbiI7CisJCQkJCWlmIChzdGF0ZW1lbnRfbGluZXMoJGNvbmQpID4gMSkgeworCQkJCQkJI3ByaW50ICJBUFc6IEFMTE9XRUQ6IGNvbmQ8JGNvbmQ+XG4iOworCQkJCQkJJGFsbG93ZWQgPSAxOworCQkJCQl9CisJCQkJCWlmICgkYmxvY2sgPX4vXGIoPzppZnxmb3J8d2hpbGUpXGIvKSB7CisJCQkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkJCSRhbGxvd2VkID0gMTsKKwkJCQkJfQorCQkJCQlpZiAoc3RhdGVtZW50X2Jsb2NrX3NpemUoJGJsb2NrKSA+IDEpIHsKKwkJCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBsaW5lcyBibG9jazwkYmxvY2s+XG4iOworCQkJCQkJJGFsbG93ZWQgPSAxOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgkc2VlbiAmJiAhJGFsbG93ZWQpIHsKKwkJCQkJV0FSTigiQlJBQ0VTIiwKKwkJCQkJICAgICAiYnJhY2VzIHt9IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbnkgYXJtIG9mIHRoaXMgc3RhdGVtZW50XG4iIC4gJGhlcmVjdHgpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoIWRlZmluZWQgJHN1cHByZXNzX2lmYnJhY2VzeyRsaW5lbnIgLSAxfSAmJgorCQkJCQkkbGluZSA9fiAvXGIoaWZ8d2hpbGV8Zm9yfGVsc2UpXGIvKSB7CisJCQlteSAkYWxsb3dlZCA9IDA7CisKKwkJCSMgQ2hlY2sgdGhlIHByZS1jb250ZXh0LgorCQkJaWYgKHN1YnN0cigkbGluZSwgMCwgJC1bMF0pID1+IC8oXH1ccyopJC8pIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogcHJlPCQxPlxuIjsKKwkJCQkkYWxsb3dlZCA9IDE7CisJCQl9CisKKwkJCW15ICgkbGV2ZWwsICRlbmRsbiwgQGNodW5rcykgPQorCQkJCWN0eF9zdGF0ZW1lbnRfZnVsbCgkbGluZW5yLCAkcmVhbGNudCwgJC1bMF0pOworCisJCQkjIENoZWNrIHRoZSBjb25kaXRpb24uCisJCQlteSAoJGNvbmQsICRibG9jaykgPSBAeyRjaHVua3NbMF19OworCQkJI3ByaW50ICJDSEVDS0lORzwkbGluZW5yPiBjb25kPCRjb25kPiBibG9jazwkYmxvY2s+XG4iOworCQkJaWYgKGRlZmluZWQgJGNvbmQpIHsKKwkJCQlzdWJzdHIoJGJsb2NrLCAwLCBsZW5ndGgoJGNvbmQpLCAnJyk7CisJCQl9CisJCQlpZiAoc3RhdGVtZW50X2xpbmVzKCRjb25kKSA+IDEpIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogY29uZDwkY29uZD5cbiI7CisJCQkJJGFsbG93ZWQgPSAxOworCQkJfQorCQkJaWYgKCRibG9jayA9fi9cYig/OmlmfGZvcnx3aGlsZSlcYi8pIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkkYWxsb3dlZCA9IDE7CisJCQl9CisJCQlpZiAoc3RhdGVtZW50X2Jsb2NrX3NpemUoJGJsb2NrKSA+IDEpIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogbGluZXMgYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkkYWxsb3dlZCA9IDE7CisJCQl9CisJCQkjIENoZWNrIHRoZSBwb3N0LWNvbnRleHQuCisJCQlpZiAoZGVmaW5lZCAkY2h1bmtzWzFdKSB7CisJCQkJbXkgKCRjb25kLCAkYmxvY2spID0gQHskY2h1bmtzWzFdfTsKKwkJCQlpZiAoZGVmaW5lZCAkY29uZCkgeworCQkJCQlzdWJzdHIoJGJsb2NrLCAwLCBsZW5ndGgoJGNvbmQpLCAnJyk7CisJCQkJfQorCQkJCWlmICgkYmxvY2sgPX4gL15ccypcey8pIHsKKwkJCQkJI3ByaW50ICJBUFc6IEFMTE9XRUQ6IGNodW5rLTEgYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkJJGFsbG93ZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJCWlmICgkbGV2ZWwgPT0gMCAmJiAkYmxvY2sgPX4gL15ccypcey8gJiYgISRhbGxvd2VkKSB7CisJCQkJbXkgJGhlcmVjdHggPSAkaGVyZSAuICJcbiI7OworCQkJCW15ICRjbnQgPSBzdGF0ZW1lbnRfcmF3bGluZXMoJGJsb2NrKTsKKworCQkJCWZvciAobXkgJG4gPSAwOyAkbiA8ICRjbnQ7ICRuKyspIHsKKwkJCQkJJGhlcmVjdHggLj0gcmF3X2xpbmUoJGxpbmVuciwgJG4pIC4gIlxuIjs7CisJCQkJfQorCisJCQkJV0FSTigiQlJBQ0VTIiwKKwkJCQkgICAgICJicmFjZXMge30gYXJlIG5vdCBuZWNlc3NhcnkgZm9yIHNpbmdsZSBzdGF0ZW1lbnQgYmxvY2tzXG4iIC4gJGhlcmVjdHgpOworCQkJfQorCQl9CisKKyMgZG9uJ3QgaW5jbHVkZSBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMgKHVzZXMgUkFXIGxpbmUpCisJCWZvciBteSAkaW5jIChAZGVwX2luY2x1ZGVzKSB7CisJCQlpZiAoJHJhd2xpbmUgPX4gbUBeLlxzKlwjXHMqaW5jbHVkZVxzKlw8JGluYz5AKSB7CisJCQkJRVJST1IoIkRFUFJFQ0FURURfSU5DTFVERSIsCisJCQkJICAgICAgIkRvbid0IHVzZSA8JGluYz46IHNlZSBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHRcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgZG9uJ3QgdXNlIGRlcHJlY2F0ZWQgZnVuY3Rpb25zCisJCWZvciBteSAkZnVuYyAoQGRlcF9mdW5jdGlvbnMpIHsKKwkJCWlmICgkbGluZSA9fiAvXGIkZnVuY1xiLykgeworCQkJCUVSUk9SKCJERVBSRUNBVEVEX0ZVTkNUSU9OIiwKKwkJCQkgICAgICAiRG9uJ3QgdXNlICRmdW5jKCk6IHNlZSBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHRcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgbm8gdm9sYXRpbGVzIHBsZWFzZQorCQlteSAkYXNtX3ZvbGF0aWxlID0gcXJ7XGIoX19hc21fX3xhc20pXHMrKF9fdm9sYXRpbGVfX3x2b2xhdGlsZSlcYn07CisJCWlmICgkbGluZSA9fiAvXGJ2b2xhdGlsZVxiLyAmJiAkbGluZSAhfiAvJGFzbV92b2xhdGlsZS8pIHsKKwkJCVdBUk4oIlZPTEFUSUxFIiwKKwkJCSAgICAgIlVzZSBvZiB2b2xhdGlsZSBpcyB1c3VhbGx5IHdyb25nOiBzZWUgRG9jdW1lbnRhdGlvbi92b2xhdGlsZS1jb25zaWRlcmVkLWhhcm1mdWwudHh0XG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIHdhcm4gYWJvdXQgI2lmIDAKKwkJaWYgKCRsaW5lID1+IC9eLlxzKlwjXHMqaWZccyswXGIvKSB7CisJCQlDSEsoIlJFRFVOREFOVF9DT0RFIiwKKwkJCSAgICAiaWYgdGhpcyBjb2RlIGlzIHJlZHVuZGFudCBjb25zaWRlciByZW1vdmluZyBpdFxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBuZWVkbGVzcyBrZnJlZSgpIGNoZWNrcworCQlpZiAoJHByZXZsaW5lID1+IC9cYmlmXHMqXCgoW15cKV0qKVwpLykgeworCQkJbXkgJGV4cHIgPSAkMTsKKwkJCWlmICgkbGluZSA9fiAvXGJrZnJlZVwoXFEkZXhwclxFXCk7LykgeworCQkJCVdBUk4oIk5FRURMRVNTX0tGUkVFIiwKKwkJCQkgICAgICJrZnJlZShOVUxMKSBpcyBzYWZlIHRoaXMgY2hlY2sgaXMgcHJvYmFibHkgbm90IHJlcXVpcmVkXG4iIC4gJGhlcmVwcmV2KTsKKwkJCX0KKwkJfQorIyBjaGVjayBmb3IgbmVlZGxlc3MgdXNiX2ZyZWVfdXJiKCkgY2hlY2tzCisJCWlmICgkcHJldmxpbmUgPX4gL1xiaWZccypcKChbXlwpXSopXCkvKSB7CisJCQlteSAkZXhwciA9ICQxOworCQkJaWYgKCRsaW5lID1+IC9cYnVzYl9mcmVlX3VyYlwoXFEkZXhwclxFXCk7LykgeworCQkJCVdBUk4oIk5FRURMRVNTX1VTQl9GUkVFX1VSQiIsCisJCQkJICAgICAidXNiX2ZyZWVfdXJiKE5VTEwpIGlzIHNhZmUgdGhpcyBjaGVjayBpcyBwcm9iYWJseSBub3QgcmVxdWlyZWRcbiIgLiAkaGVyZXByZXYpOworCQkJfQorCQl9CisKKyMgcHJlZmVyIHVzbGVlcF9yYW5nZSBvdmVyIHVkZWxheQorCQlpZiAoJGxpbmUgPX4gL1xidWRlbGF5XHMqXChccyooXHcrKVxzKlwpLykgeworCQkJIyBpZ25vcmUgdWRlbGF5J3MgPCAxMCwgaG93ZXZlcgorCQkJaWYgKCEgKCgkMSA9fiAvKFxkKykvKSAmJiAoJDEgPCAxMCkpICkgeworCQkJCUNISygiVVNMRUVQX1JBTkdFIiwKKwkJCQkgICAgInVzbGVlcF9yYW5nZSBpcyBwcmVmZXJyZWQgb3ZlciB1ZGVsYXk7IHNlZSBEb2N1bWVudGF0aW9uL3RpbWVycy90aW1lcnMtaG93dG8udHh0XG4iIC4gJGxpbmUpOworCQkJfQorCQl9CisKKyMgd2FybiBhYm91dCB1bmV4cGVjdGVkbHkgbG9uZyBtc2xlZXAncworCQlpZiAoJGxpbmUgPX4gL1xibXNsZWVwXHMqXCgoXGQrKVwpOy8pIHsKKwkJCWlmICgkMSA8IDIwKSB7CisJCQkJV0FSTigiTVNMRUVQIiwKKwkJCQkgICAgICJtc2xlZXAgPCAyMG1zIGNhbiBzbGVlcCBmb3IgdXAgdG8gMjBtczsgc2VlIERvY3VtZW50YXRpb24vdGltZXJzL3RpbWVycy1ob3d0by50eHRcbiIgLiAkbGluZSk7CisJCQl9CisJCX0KKworIyB3YXJuIGFib3V0ICNpZmRlZnMgaW4gQyBmaWxlcworIwkJaWYgKCRsaW5lID1+IC9eLlxzKlwjXHMqaWYofG4pZGVmLyAmJiAoJHJlYWxmaWxlID1+IC9cLmMkLykpIHsKKyMJCQlwcmludCAiI2lmZGVmIGluIEMgZmlsZXMgc2hvdWxkIGJlIGF2b2lkZWRcbiI7CisjCQkJcHJpbnQgIiRoZXJlY3VyciI7CisjCQkJJGNsZWFuID0gMDsKKyMJCX0KKworIyB3YXJuIGFib3V0IHNwYWNpbmcgaW4gI2lmZGVmcworCQlpZiAoJGxpbmUgPX4gL14uXHMqXCNccyooaWZkZWZ8aWZuZGVmfGVsaWYpXHNccysvKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAiZXhhY3RseSBvbmUgc3BhY2UgcmVxdWlyZWQgYWZ0ZXIgdGhhdCAjJDFcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHNwaW5sb2NrX3QgZGVmaW5pdGlvbnMgd2l0aG91dCBhIGNvbW1lbnQuCisJCWlmICgkbGluZSA9fiAvXi5ccyooc3RydWN0XHMrbXV0ZXh8c3BpbmxvY2tfdClccytcUys7LyB8fAorCQkgICAgJGxpbmUgPX4gL14uXHMqKERFRklORV9NVVRFWClccypcKC8pIHsKKwkJCW15ICR3aGljaCA9ICQxOworCQkJaWYgKCFjdHhfaGFzX2NvbW1lbnQoJGZpcnN0X2xpbmUsICRsaW5lbnIpKSB7CisJCQkJQ0hLKCJVTkNPTU1FTlRFRF9ERUZJTklUSU9OIiwKKwkJCQkgICAgIiQxIGRlZmluaXRpb24gd2l0aG91dCBjb21tZW50XG4iIC4gJGhlcmVjdXJyKTsKKwkJCX0KKwkJfQorIyBjaGVjayBmb3IgbWVtb3J5IGJhcnJpZXJzIHdpdGhvdXQgYSBjb21tZW50LgorCQlpZiAoJGxpbmUgPX4gL1xiKG1ifHJtYnx3bWJ8cmVhZF9iYXJyaWVyX2RlcGVuZHN8c21wX21ifHNtcF9ybWJ8c21wX3dtYnxzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMpXCgvKSB7CisJCQlpZiAoIWN0eF9oYXNfY29tbWVudCgkZmlyc3RfbGluZSwgJGxpbmVucikpIHsKKwkJCQlDSEsoIk1FTU9SWV9CQVJSSUVSIiwKKwkJCQkgICAgIm1lbW9yeSBiYXJyaWVyIHdpdGhvdXQgY29tbWVudFxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKyMgY2hlY2sgb2YgaGFyZHdhcmUgc3BlY2lmaWMgZGVmaW5lcworCQlpZiAoJGxpbmUgPX4gbUBeLlxzKlwjXHMqaWYuKlxiKF9faTM4Nl9ffF9fcG93ZXJwYzY0X198X19zdW5fX3xfX3MzOTB4X18pXGJAICYmICRyZWFsZmlsZSAhfiBtQGluY2x1ZGUvYXNtLUApIHsKKwkJCUNISygiQVJDSF9ERUZJTkVTIiwKKwkJCSAgICAiYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRlZmluZXMgc2hvdWxkIGJlIGF2b2lkZWRcbiIgLiAgJGhlcmVjdXJyKTsKKwkJfQorCisjIENoZWNrIHRoYXQgdGhlIHN0b3JhZ2UgY2xhc3MgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGRlY2xhcmF0aW9uCisJCWlmICgkbGluZSA9fiAvXGIkU3RvcmFnZVxiLyAmJiAkbGluZSAhfiAvXi5ccyokU3RvcmFnZVxiLykgeworCQkJV0FSTigiU1RPUkFHRV9DTEFTUyIsCisJCQkgICAgICJzdG9yYWdlIGNsYXNzIHNob3VsZCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZWNsYXJhdGlvblxuIiAuICRoZXJlY3VycikKKwkJfQorCisjIGNoZWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5saW5lIGF0dHJpYnV0ZSwgdGhhdCBpdCBpcyBiZXR3ZWVuCisjIHN0b3JhZ2UgY2xhc3MgYW5kIHR5cGUuCisJCWlmICgkbGluZSA9fiAvXGIkVHlwZVxzKyRJbmxpbmVcYi8gfHwKKwkJICAgICRsaW5lID1+IC9cYiRJbmxpbmVccyskU3RvcmFnZVxiLykgeworCQkJRVJST1IoIklOTElORV9MT0NBVElPTiIsCisJCQkgICAgICAiaW5saW5lIGtleXdvcmQgc2hvdWxkIHNpdCBiZXR3ZWVuIHN0b3JhZ2UgY2xhc3MgYW5kIHR5cGVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgQ2hlY2sgZm9yIF9faW5saW5lX18gYW5kIF9faW5saW5lLCBwcmVmZXIgaW5saW5lCisJCWlmICgkbGluZSA9fiAvXGIoX19pbmxpbmVfX3xfX2lubGluZSlcYi8pIHsKKwkJCVdBUk4oIklOTElORSIsCisJCQkgICAgICJwbGFpbiBpbmxpbmUgaXMgcHJlZmVycmVkIG92ZXIgJDFcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgQ2hlY2sgZm9yIF9fYXR0cmlidXRlX18gcGFja2VkLCBwcmVmZXIgX19wYWNrZWQKKwkJaWYgKCRsaW5lID1+IC9cYl9fYXR0cmlidXRlX19ccypcKFxzKlwoLipcYnBhY2tlZFxiLykgeworCQkJV0FSTigiUFJFRkVSX1BBQ0tFRCIsCisJCQkgICAgICJfX3BhY2tlZCBpcyBwcmVmZXJyZWQgb3ZlciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKVxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBDaGVjayBmb3IgX19hdHRyaWJ1dGVfXyBhbGlnbmVkLCBwcmVmZXIgX19hbGlnbmVkCisJCWlmICgkbGluZSA9fiAvXGJfX2F0dHJpYnV0ZV9fXHMqXChccypcKC4qYWxpZ25lZC8pIHsKKwkJCVdBUk4oIlBSRUZFUl9BTElHTkVEIiwKKwkJCSAgICAgIl9fYWxpZ25lZChzaXplKSBpcyBwcmVmZXJyZWQgb3ZlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemUpKSlcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHNpemVvZigmKQorCQlpZiAoJGxpbmUgPX4gL1xic2l6ZW9mXHMqXChccypcJi8pIHsKKwkJCVdBUk4oIlNJWkVPRl9BRERSRVNTIiwKKwkJCSAgICAgInNpemVvZigmIHNob3VsZCBiZSBhdm9pZGVkXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBsaW5lIGNvbnRpbnVhdGlvbnMgaW4gcXVvdGVkIHN0cmluZ3Mgd2l0aCBvZGQgY291bnRzIG9mICIKKwkJaWYgKCRyYXdsaW5lID1+IC9cXCQvICYmICRyYXdsaW5lID1+IHRyLyIvIi8gJSAyKSB7CisJCQlXQVJOKCJMSU5FX0NPTlRJTlVBVElPTlMiLAorCQkJICAgICAiQXZvaWQgbGluZSBjb250aW51YXRpb25zIGluIHF1b3RlZCBzdHJpbmdzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBuZXcgZXh0ZXJucyBpbiAuYyBmaWxlcy4KKwkJaWYgKCRyZWFsZmlsZSA9fiAvXC5jJC8gJiYgZGVmaW5lZCAkc3RhdCAmJgorCQkgICAgJHN0YXQgPX4gL14uXHMqKD86ZXh0ZXJuXHMrKT8kVHlwZVxzKygkSWRlbnQpKFxzKilcKC9zKQorCQl7CisJCQlteSAkZnVuY3Rpb25fbmFtZSA9ICQxOworCQkJbXkgJHBhcmVuX3NwYWNlID0gJDI7CisKKwkJCW15ICRzID0gJHN0YXQ7CisJCQlpZiAoZGVmaW5lZCAkY29uZCkgeworCQkJCXN1YnN0cigkcywgMCwgbGVuZ3RoKCRjb25kKSwgJycpOworCQkJfQorCQkJaWYgKCRzID1+IC9eXHMqOy8gJiYKKwkJCSAgICAkZnVuY3Rpb25fbmFtZSBuZSAndW5pbml0aWFsaXplZF92YXInKQorCQkJeworCQkJCVdBUk4oIkFWT0lEX0VYVEVSTlMiLAorCQkJCSAgICAgImV4dGVybnMgc2hvdWxkIGJlIGF2b2lkZWQgaW4gLmMgZmlsZXNcbiIgLiAgJGhlcmVjdXJyKTsKKwkJCX0KKworCQkJaWYgKCRwYXJlbl9zcGFjZSA9fiAvXG4vKSB7CisJCQkJV0FSTigiRlVOQ1RJT05fQVJHVU1FTlRTIiwKKwkJCQkgICAgICJhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBzaG91bGQgZm9sbG93IGlkZW50aWZpZXJcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCisJCX0gZWxzaWYgKCRyZWFsZmlsZSA9fiAvXC5jJC8gJiYgZGVmaW5lZCAkc3RhdCAmJgorCQkgICAgJHN0YXQgPX4gL14uXHMqZXh0ZXJuXHMrLykKKwkJeworCQkJV0FSTigiQVZPSURfRVhURVJOUyIsCisJCQkgICAgICJleHRlcm5zIHNob3VsZCBiZSBhdm9pZGVkIGluIC5jIGZpbGVzXG4iIC4gICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVja3MgZm9yIG5ldyBfX3NldHVwJ3MKKwkJaWYgKCRyYXdsaW5lID1+IC9cYl9fc2V0dXBcKCIoW14iXSopIi8pIHsKKwkJCW15ICRuYW1lID0gJDE7CisKKwkJCWlmICghZ3JlcCgvJG5hbWUvLCBAc2V0dXBfZG9jcykpIHsKKwkJCQlDSEsoIlVORE9DVU1FTlRFRF9TRVRVUCIsCisJCQkJICAgICJfX3NldHVwIGFwcGVhcnMgdW4tZG9jdW1lbnRlZCAtLSBjaGVjayBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworIyBjaGVjayBmb3IgcG9pbnRsZXNzIGNhc3Rpbmcgb2Yga21hbGxvYyByZXR1cm4KKwkJaWYgKCRsaW5lID1+IC9cKlxzKlwpXHMqW2t2XVtjem1dYWxsb2MoX25vZGUpezAsMX1cYi8pIHsKKwkJCVdBUk4oIlVOTkVDRVNTQVJZX0NBU1RTIiwKKwkJCSAgICAgInVubmVjZXNzYXJ5IGNhc3QgbWF5IGhpZGUgYnVncywgc2VlIGh0dHA6Ly9jLWZhcS5jb20vbWFsbG9jL21hbGxvY25vY2FzdC5odG1sXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBtdWx0aXBsZSBzZW1pY29sb25zCisJCWlmICgkbGluZSA9fiAvO1xzKjtccyokLykgeworCQkgICAgV0FSTigiT05FX1NFTUlDT0xPTiIsCisJCQkgIlN0YXRlbWVudHMgdGVybWluYXRpb25zIHVzZSAxIHNlbWljb2xvblxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBmb3IgZ2NjIHNwZWNpZmljIF9fRlVOQ1RJT05fXworCQlpZiAoJGxpbmUgPX4gL19fRlVOQ1RJT05fXy8pIHsKKwkJCVdBUk4oIlVTRV9GVU5DIiwKKwkJCSAgICAgIl9fZnVuY19fIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgZ2NjIHNwZWNpZmljIF9fRlVOQ1RJT05fX1xuIiAgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHNlbWFwaG9yZXMgaW5pdGlhbGl6ZWQgbG9ja2VkCisJCWlmICgkbGluZSA9fiAvXi5ccypzZW1hX2luaXQuKyxcVz8wXFc/XCkvKSB7CisJCQlXQVJOKCJDT05TSURFUl9DT01QTEVUSU9OIiwKKwkJCSAgICAgImNvbnNpZGVyIHVzaW5nIGEgY29tcGxldGlvblxuIiAuICRoZXJlY3Vycik7CisKKwkJfQorIyByZWNvbW1lbmQga3N0cnRvKiBvdmVyIHNpbXBsZV9zdHJ0byoKKwkJaWYgKCRsaW5lID1+IC9cYnNpbXBsZV8oc3RydG8uKj8pXHMqXCgvKSB7CisJCQlXQVJOKCJDT05TSURFUl9LU1RSVE8iLAorCQkJICAgICAiY29uc2lkZXIgdXNpbmcga3N0cnRvKiBpbiBwcmVmZXJlbmNlIHRvIHNpbXBsZV8kMVxuIiAuICRoZXJlY3Vycik7CisJCX0KKyMgY2hlY2sgZm9yIF9faW5pdGNhbGwoKSwgdXNlIGRldmljZV9pbml0Y2FsbCgpIGV4cGxpY2l0bHkgcGxlYXNlCisJCWlmICgkbGluZSA9fiAvXi5ccypfX2luaXRjYWxsXHMqXCgvKSB7CisJCQlXQVJOKCJVU0VfREVWSUNFX0lOSVRDQUxMIiwKKwkJCSAgICAgInBsZWFzZSB1c2UgZGV2aWNlX2luaXRjYWxsKCkgaW5zdGVhZCBvZiBfX2luaXRjYWxsKClcbiIgLiAkaGVyZWN1cnIpOworCQl9CisjIGNoZWNrIGZvciB2YXJpb3VzIG9wcyBzdHJ1Y3RzLCBlbnN1cmUgdGhleSBhcmUgY29uc3QuCisJCW15ICRzdHJ1Y3Rfb3BzID0gcXJ7YWNwaV9kb2NrX29wc3wKKwkJCQlhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnN8CisJCQkJYmFja2xpZ2h0X29wc3wKKwkJCQlibG9ja19kZXZpY2Vfb3BlcmF0aW9uc3wKKwkJCQlkZW50cnlfb3BlcmF0aW9uc3wKKwkJCQlkZXZfcG1fb3BzfAorCQkJCWRtYV9tYXBfb3BzfAorCQkJCWV4dGVudF9pb19vcHN8CisJCQkJZmlsZV9sb2NrX29wZXJhdGlvbnN8CisJCQkJZmlsZV9vcGVyYXRpb25zfAorCQkJCWh2X29wc3wKKwkJCQlpZGVfZG1hX29wc3wKKwkJCQlpbnRlbF9kdm9fZGV2X29wc3wKKwkJCQlpdGVtX29wZXJhdGlvbnN8CisJCQkJaXdsX29wc3wKKwkJCQlrZ2RiX2FyY2h8CisJCQkJa2dkYl9pb3wKKwkJCQlrc2V0X3VldmVudF9vcHN8CisJCQkJbG9ja19tYW5hZ2VyX29wZXJhdGlvbnN8CisJCQkJbWljcm9jb2RlX29wc3wKKwkJCQltdHJyX29wc3wKKwkJCQluZWlnaF9vcHN8CisJCQkJbmxtc3ZjX2JpbmRpbmd8CisJCQkJcGNpX3Jhd19vcHN8CisJCQkJcGlwZV9idWZfb3BlcmF0aW9uc3wKKwkJCQlwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHN8CisJCQkJcGxhdGZvcm1fc3VzcGVuZF9vcHN8CisJCQkJcHJvdG9fb3BzfAorCQkJCXJwY19waXBlX29wc3wKKwkJCQlzZXFfb3BlcmF0aW9uc3wKKwkJCQlzbmRfYWM5N19idWlsZF9vcHN8CisJCQkJc29jX3BjbWNpYV9zb2NrZXRfb3BzfAorCQkJCXN0YWNrdHJhY2Vfb3BzfAorCQkJCXN5c2ZzX29wc3wKKwkJCQl0dHlfb3BlcmF0aW9uc3wKKwkJCQl1c2JfbW9uX29wZXJhdGlvbnN8CisJCQkJd2Rfb3BzfXg7CisJCWlmICgkbGluZSAhfiAvXGJjb25zdFxiLyAmJgorCQkgICAgJGxpbmUgPX4gL1xic3RydWN0XHMrKCRzdHJ1Y3Rfb3BzKVxiLykgeworCQkJV0FSTigiQ09OU1RfU1RSVUNUIiwKKwkJCSAgICAgInN0cnVjdCAkMSBzaG91bGQgbm9ybWFsbHkgYmUgY29uc3RcbiIgLgorCQkJCSRoZXJlY3Vycik7CisJCX0KKworIyB1c2Ugb2YgTlJfQ1BVUyBpcyB1c3VhbGx5IHdyb25nCisjIGlnbm9yZSBkZWZpbml0aW9ucyBvZiBOUl9DUFVTIGFuZCB1c2FnZSB0byBkZWZpbmUgYXJyYXlzIGFzIGxpa2VseSByaWdodAorCQlpZiAoJGxpbmUgPX4gL1xiTlJfQ1BVU1xiLyAmJgorCQkgICAgJGxpbmUgIX4gL14uXHMqXHMqI1xzKmlmXGIuKlxiTlJfQ1BVU1xiLyAmJgorCQkgICAgJGxpbmUgIX4gL14uXHMqXHMqI1xzKmRlZmluZVxiLipcYk5SX0NQVVNcYi8gJiYKKwkJICAgICRsaW5lICF+IC9eLlxzKiREZWNsYXJlXHMuKlxbW15cXV0qTlJfQ1BVU1teXF1dKlxdLyAmJgorCQkgICAgJGxpbmUgIX4gL1xbW15cXV0qXC5cLlwuW15cXV0qTlJfQ1BVU1teXF1dKlxdLyAmJgorCQkgICAgJGxpbmUgIX4gL1xbW15cXV0qTlJfQ1BVU1teXF1dKlwuXC5cLlteXF1dKlxdLykKKwkJeworCQkJV0FSTigiTlJfQ1BVUyIsCisJCQkgICAgICJ1c2FnZSBvZiBOUl9DUFVTIGlzIG9mdGVuIHdyb25nIC0gY29uc2lkZXIgdXNpbmcgY3B1X3Bvc3NpYmxlKCksIG51bV9wb3NzaWJsZV9jcHVzKCksIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdSgpLCBldGNcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yICVMe3UsZCxpfSBpbiBzdHJpbmdzCisJCW15ICRzdHJpbmc7CisJCXdoaWxlICgkbGluZSA9fiAvKD86XnwiKShbWFx0XSopKD86InwkKS9nKSB7CisJCQkkc3RyaW5nID0gc3Vic3RyKCRyYXdsaW5lLCAkLVsxXSwgJCtbMV0gLSAkLVsxXSk7CisJCQkkc3RyaW5nID1+IHMvJSUvX18vZzsKKwkJCWlmICgkc3RyaW5nID1+IC8oPzwhJSklTFt1ZGldLykgeworCQkJCVdBUk4oIlBSSU5URl9MIiwKKwkJCQkgICAgICJcJUxkLyVMdSBhcmUgbm90LXN0YW5kYXJkIEMsIHVzZSAlbGxkLyVsbHVcbiIgLiAkaGVyZWN1cnIpOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKworIyB3aGluZSBtaWdodGx5IGFib3V0IGluX2F0b21pYworCQlpZiAoJGxpbmUgPX4gL1xiaW5fYXRvbWljXHMqXCgvKSB7CisJCQlpZiAoJHJlYWxmaWxlID1+IG1AXmRyaXZlcnMvQCkgeworCQkJCUVSUk9SKCJJTl9BVE9NSUMiLAorCQkJCSAgICAgICJkbyBub3QgdXNlIGluX2F0b21pYyBpbiBkcml2ZXJzXG4iIC4gJGhlcmVjdXJyKTsKKwkJCX0gZWxzaWYgKCRyZWFsZmlsZSAhfiBtQF5rZXJuZWwvQCkgeworCQkJCVdBUk4oIklOX0FUT01JQyIsCisJCQkJICAgICAidXNlIG9mIGluX2F0b21pYygpIGlzIGluY29ycmVjdCBvdXRzaWRlIGNvcmUga2VybmVsIGNvZGVcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgY2hlY2sgZm9yIGxvY2tkZXBfc2V0X25vdmFsaWRhdGVfY2xhc3MKKwkJaWYgKCRsaW5lID1+IC9eLlxzKmxvY2tkZXBfc2V0X25vdmFsaWRhdGVfY2xhc3NccypcKC8gfHwKKwkJICAgICRsaW5lID1+IC9fX2xvY2tkZXBfbm9fdmFsaWRhdGVfX1xzKlwpLyApIHsKKwkJCWlmICgkcmVhbGZpbGUgIX4gbUBea2VybmVsL2xvY2tkZXBAICYmCisJCQkgICAgJHJlYWxmaWxlICF+IG1AXmluY2x1ZGUvbGludXgvbG9ja2RlcEAgJiYKKwkJCSAgICAkcmVhbGZpbGUgIX4gbUBeZHJpdmVycy9iYXNlL2NvcmVAKSB7CisJCQkJRVJST1IoIkxPQ0tERVAiLAorCQkJCSAgICAgICJsb2NrZGVwX25vX3ZhbGlkYXRlIGNsYXNzIGlzIHJlc2VydmVkIGZvciBkZXZpY2UtPm11dGV4LlxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworCQlpZiAoJGxpbmUgPX4gL2RlYnVnZnNfY3JlYXRlX2ZpbGUuKlNfSVdVR08vIHx8CisJCSAgICAkbGluZSA9fiAvREVWSUNFX0FUVFIuKlNfSVdVR08vICkgeworCQkJV0FSTigiRVhQT1JURURfV09STERfV1JJVEFCTEUiLAorCQkJICAgICAiRXhwb3J0aW5nIHdvcmxkIHdyaXRhYmxlIGZpbGVzIGlzIHVzdWFsbHkgYW4gZXJyb3IuIENvbnNpZGVyIG1vcmUgcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMuXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisJCSMgQ2hlY2sgZm9yIG1lbXNldCB3aXRoIHN3YXBwZWQgYXJndW1lbnRzCisJCWlmICgkbGluZSA9fiAvbWVtc2V0LipcLChcIHwpKDB4fCkwKFwgfDB8KVwpOy8pIHsKKwkJCUVSUk9SKCJNRU1TRVQiLAorCQkJICAgICAgIm1lbXNldCBzaXplIGlzIDNyZCBhcmd1bWVudCwgbm90IHRoZSBzZWNvbmQuXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCX0KKworCSMgSWYgd2UgaGF2ZSBubyBpbnB1dCBhdCBhbGwsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byByZXBvcnQgb24KKwkjIHNvIGp1c3Qga2VlcCBxdWlldC4KKwlpZiAoJCNyYXdsaW5lcyA9PSAtMSkgeworCQlleGl0KDApOworCX0KKworCSMgSW4gbWFpbGJhY2sgbW9kZSBvbmx5IHByb2R1Y2UgYSByZXBvcnQgaW4gdGhlIG5lZ2F0aXZlLCBmb3IKKwkjIHRoaW5ncyB0aGF0IGFwcGVhciB0byBiZSBwYXRjaGVzLgorCWlmICgkbWFpbGJhY2sgJiYgKCRjbGVhbiA9PSAxIHx8ICEkaXNfcGF0Y2gpKSB7CisJCWV4aXQoMCk7CisJfQorCisJIyBUaGlzIGlzIG5vdCBhIHBhdGNoLCBhbmQgd2UgYXJlIGFyZSBpbiAnbm8tcGF0Y2gnIG1vZGUgc28KKwkjIGp1c3Qga2VlcCBxdWlldC4KKwlpZiAoISRjaGtfcGF0Y2ggJiYgISRpc19wYXRjaCkgeworCQlleGl0KDApOworCX0KKworCWlmICghJGlzX3BhdGNoKSB7CisJCUVSUk9SKCJOT1RfVU5JRklFRF9ESUZGIiwKKwkJICAgICAgIkRvZXMgbm90IGFwcGVhciB0byBiZSBhIHVuaWZpZWQtZGlmZiBmb3JtYXQgcGF0Y2hcbiIpOworCX0KKwlpZiAoJGlzX3BhdGNoICYmICRjaGtfc2lnbm9mZiAmJiAkc2lnbm9mZiA9PSAwKSB7CisJCUVSUk9SKCJNSVNTSU5HX1NJR05fT0ZGIiwKKwkJICAgICAgIk1pc3NpbmcgU2lnbmVkLW9mZi1ieTogbGluZShzKVxuIik7CisJfQorCisJcHJpbnQgcmVwb3J0X2R1bXAoKTsKKwlpZiAoJHN1bW1hcnkgJiYgISgkY2xlYW4gPT0gMSAmJiAkcXVpZXQgPT0gMSkpIHsKKwkJcHJpbnQgIiRmaWxlbmFtZSAiIGlmICgkc3VtbWFyeV9maWxlKTsKKwkJcHJpbnQgInRvdGFsOiAkY250X2Vycm9yIGVycm9ycywgJGNudF93YXJuIHdhcm5pbmdzLCAiIC4KKwkJCSgoJGNoZWNrKT8gIiRjbnRfY2hrIGNoZWNrcywgIiA6ICIiKSAuCisJCQkiJGNudF9saW5lcyBsaW5lcyBjaGVja2VkXG4iOworCQlwcmludCAiXG4iIGlmICgkcXVpZXQgPT0gMCk7CisJfQorCisJaWYgKCRxdWlldCA9PSAwKSB7CisJCSMgSWYgdGhlcmUgd2VyZSB3aGl0ZXNwYWNlIGVycm9ycyB3aGljaCBjbGVhbnBhdGNoIGNhbiBmaXgKKwkJIyB0aGVuIHN1Z2dlc3QgdGhhdC4KKwkJaWYgKCRycHRfY2xlYW5lcnMpIHsKKwkJCXByaW50ICJOT1RFOiB3aGl0ZXNwYWNlIGVycm9ycyBkZXRlY3RlZCwgeW91IG1heSB3aXNoIHRvIHVzZSBzY3JpcHRzL2NsZWFucGF0Y2ggb3JcbiI7CisJCQlwcmludCAiICAgICAgc2NyaXB0cy9jbGVhbmZpbGVcblxuIjsKKwkJCSRycHRfY2xlYW5lcnMgPSAwOworCQl9CisJfQorCisJaWYgKGtleXMgJWlnbm9yZV90eXBlKSB7CisJICAgIHByaW50ICJOT1RFOiBJZ25vcmVkIG1lc3NhZ2UgdHlwZXM6IjsKKwkgICAgZm9yZWFjaCBteSAkaWdub3JlIChzb3J0IGtleXMgJWlnbm9yZV90eXBlKSB7CisJCXByaW50ICIgJGlnbm9yZSI7CisJICAgIH0KKwkgICAgcHJpbnQgIlxuIjsKKwkgICAgcHJpbnQgIlxuIiBpZiAoJHF1aWV0ID09IDApOworCX0KKworCWlmICgkY2xlYW4gPT0gMSAmJiAkcXVpZXQgPT0gMCkgeworCQlwcmludCAiJHZuYW1lIGhhcyBubyBvYnZpb3VzIHN0eWxlIHByb2JsZW1zIGFuZCBpcyByZWFkeSBmb3Igc3VibWlzc2lvbi5cbiIKKwl9CisJaWYgKCRjbGVhbiA9PSAwICYmICRxdWlldCA9PSAwKSB7CisJCXByaW50IDw8ICJFT00iOworJHZuYW1lIGhhcyBzdHlsZSBwcm9ibGVtcywgcGxlYXNlIHJldmlldy4KKworSWYgYW55IG9mIHRoZXNlIGVycm9ycyBhcmUgZmFsc2UgcG9zaXRpdmVzLCBwbGVhc2UgcmVwb3J0Cit0aGVtIHRvIHRoZSBtYWludGFpbmVyLCBzZWUgQ0hFQ0tQQVRDSCBpbiBNQUlOVEFJTkVSUy4KK0VPTQorCX0KKworCXJldHVybiAkY2xlYW47Cit9CmRpZmYgLS1naXQgYS90b29scy9lbnYvTWFrZWZpbGUgYi90b29scy9lbnYvTWFrZWZpbGUKaW5kZXggMmY3YTU5Yy4uMjhiNzNkYSAxMDA2NDQKLS0tIGEvdG9vbHMvZW52L01ha2VmaWxlCisrKyBiL3Rvb2xzL2Vudi9NYWtlZmlsZQpAQCAtMjMsNyArMjMsNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotSE9TVFNSQ1MgOj0gJChvYmopY3JjMzIuYyAgZndfZW52LmMgIGZ3X2Vudl9tYWluLmMKK0hPU1RTUkNTIDo9ICQoU1JDVFJFRSkvbGliL2NyYzMyLmMgIGZ3X2Vudi5jICBmd19lbnZfbWFpbi5jCiBIRUFERVJTCTo9IGZ3X2Vudi5oCiAKICMgQ29tcGlsZSBmb3IgYSBob3N0ZWQgZW52aXJvbm1lbnQgb24gdGhlIHRhcmdldApAQCAtNDMsMTAgKzQzLDcgQEAKIAkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTX05PUEVEKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkKEhPU1RTUkNTKQogCiBjbGVhbjoKLQlybSAtZiAkKG9iailmd19wcmludGVudiAkKG9iailjcmMzMi5jCi0KLSQob2JqKWNyYzMyLmM6Ci0JbG4gLXMgJChzcmMpLi4vLi4vbGliL2NyYzMyLmMgJChvYmopY3JjMzIuYworCXJtIC1mICQob2JqKWZ3X3ByaW50ZW52CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvdG9vbHMvZW52Y3JjLmMgYi90b29scy9lbnZjcmMuYwppbmRleCBmZWViYmFiLi4xMTFkOWY2IDEwMDY0NAotLS0gYS90b29scy9lbnZjcmMuYworKysgYi90b29scy9lbnZjcmMuYwpAQCAtNjEsNiArNjEsNyBAQAogI2VuZGlmCS8qIENPTkZJR19FTlZfSVNfSU5fRkxBU0ggKi8KIAogI2lmIGRlZmluZWQoRU5WX0lTX0VNQkVEREVEKSAmJiAhZGVmaW5lZChDT05GSUdfQlVJTERfRU5WQ1JDKQorIyBpbmNsdWRlIDxlbnZpcm9ubWVudC5oPgogIyBkZWZpbmUgQ09ORklHX0JVSUxEX0VOVkNSQyAxCiAjZW5kaWYKIApAQCAtNzcsNyArNzgsNyBAQAogCiAjaWZkZWYgQ09ORklHX0JVSUxEX0VOVkNSQwogZXh0ZXJuIHVuc2lnbmVkIGludCBlbnZfc2l6ZTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIGVudmlyb25tZW50OworZXh0ZXJuIGVudl90IGVudmlyb25tZW50OwogI2VuZGlmCS8qIENPTkZJR19CVUlMRF9FTlZDUkMgKi8KIAogaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKQEAgLTg1LDcgKzg2LDcgQEAKICNpZmRlZiBDT05GSUdfQlVJTERfRU5WQ1JDCiAJdW5zaWduZWQgY2hhciBwYWQgPSAweDAwOwogCXVpbnQzMl90IGNyYzsKLQl1bnNpZ25lZCBjaGFyICplbnZwdHIgPSAmZW52aXJvbm1lbnQsCisJdW5zaWduZWQgY2hhciAqZW52cHRyID0gKHVuc2lnbmVkIGNoYXIgKikmZW52aXJvbm1lbnQsCiAJCSpkYXRhcHRyID0gZW52cHRyICsgRU5WX0hFQURFUl9TSVpFOwogCXVuc2lnbmVkIGludCBkYXRhc2l6ZSA9IEVOVl9TSVpFOwogCXVuc2lnbmVkIGludCBlb2U7CmRpZmYgLS1naXQgYS90b29scy9ta2VudmltYWdlLmMgYi90b29scy9ta2VudmltYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzMmY0YQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL21rZW52aW1hZ2UuYwpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMSBGcmVlIEVsZWN0cm9ucworICogRGF2aWQgV2FnbmVyIDxkYXZpZC53YWduZXJAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIEluc3BpcmVkIGZyb20gZW52Y3JjLmM6CisgKiAoQykgQ29weXJpZ2h0IDIwMDEKKyAqIFBhb2xvIFNjYWZmYXJkaSwgQUlSVkVOVCBTQU0gcy5wLmEgLSBSSU1JTkkoSVRBTFkpLCBhcnNlbmlvQHRpbi5pdAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjb21waWxlci5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlIDx1LWJvb3QvY3JjLmg+CisKKyNkZWZpbmUgQ1JDX1NJWkUgc2l6ZW9mKHVpbnQzMl90KQorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpleGVjX25hbWUpCit7CisJZnByaW50ZihzdGRlcnIsICIlcyBbLWhdIFstcl0gWy1iXSBbLXAgPGJ5dGU+XSAiCisJICAgICAgICItcyA8ZW52aXJvbm1lbnQgcGFydGl0aW9uIHNpemU+IC1vIDxvdXRwdXQ+IDxpbnB1dCBmaWxlPlxuIgorCSAgICAgICAiXG4iCisJICAgICAgICJUaGlzIHRvb2wgdGFrZXMgYSBrZXk9dmFsdWUgaW5wdXQgZmlsZSAoc2FtZSBhcyB3b3VsZCBhICIKKwkgICAgICAgImBwcmludGVudicgc2hvdykgYW5kIGdlbmVyYXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnZpcm9ubWVudCAiCisJICAgICAgICJpbWFnZSwgcmVhZHkgdG8gYmUgZmxhc2hlZC5cbiIKKwkgICAgICAgIlxuIgorCSAgICAgICAiXHRUaGUgaW5wdXQgZmlsZSBpcyBpbiBmb3JtYXQ6XG4iCisJICAgICAgICJcdFx0a2V5MT12YWx1ZTFcbiIKKwkgICAgICAgIlx0XHRrZXkyPXZhbHVlMlxuIgorCSAgICAgICAiXHRcdC4uLlxuIgorCSAgICAgICAiXHQtciA6IHRoZSBlbnZpcm9ubWVudCBoYXMgbXVsdGlwbGUgY29waWVzIGluIGZsYXNoXG4iCisJICAgICAgICJcdC1iIDogdGhlIHRhcmdldCBpcyBiaWcgZW5kaWFuIChkZWZhdWx0IGlzIGxpdHRsZSBlbmRpYW4pXG4iCisJICAgICAgICJcdC1wIDxieXRlPiA6IGZpbGwgdGhlIGltYWdlIHdpdGggPGJ5dGU+IGJ5dGVzIGluc3RlYWQgb2YgIgorCSAgICAgICAiMHhmZiBieXRlc1xuIgorCSAgICAgICAiXG4iCisJICAgICAgICJJZiB0aGUgaW5wdXQgZmlsZSBpcyBcIi1cIiwgZGF0YSBpcyByZWFkIGZyb20gc3RhbmRhcmQgaW5wdXRcbiIsCisJICAgICAgIGV4ZWNfbmFtZSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1aW50MzJfdCBjcmMsIHRhcmdldGVuZGlhbl9jcmM7CisJY29uc3QgY2hhciAqdHh0X2ZpbGVuYW1lID0gTlVMTCwgKmJpbl9maWxlbmFtZSA9IE5VTEw7CisJaW50IHR4dF9mZCwgYmluX2ZkOworCXVuc2lnbmVkIGNoYXIgKmRhdGFwdHIsICplbnZwdHI7CisJdW5zaWduZWQgY2hhciAqZmlsZWJ1ZiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGZpbGVzaXplID0gMCwgZW52c2l6ZSA9IDAsIGRhdGFzaXplID0gMDsKKwlpbnQgYmlnZW5kaWFuID0gMDsKKwlpbnQgcmVkdW5kYW50ID0gMDsKKwl1bnNpZ25lZCBjaGFyIHBhZGJ5dGUgPSAweGZmOworCisJaW50IG9wdGlvbjsKKwlpbnQgcmV0ID0gRVhJVF9TVUNDRVNTOworCisJc3RydWN0IHN0YXQgdHh0X2ZpbGVfc3RhdDsKKworCWludCBmcCwgZXA7CisKKwkvKiBQYXJzZSB0aGUgY21kbGluZSAqLworCXdoaWxlICgob3B0aW9uID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJzOm86cmJwOmgiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChvcHRpb24pIHsKKwkJY2FzZSAncyc6CisJCQlkYXRhc2l6ZSA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJYmluX2ZpbGVuYW1lID0gc3RyZHVwKG9wdGFyZyk7CisJCQlpZiAoIWJpbl9maWxlbmFtZSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3Qgc3RyZHVwKCkgdGhlIG91dHB1dCAiCisJCQkJCQkiZmlsZW5hbWVcbiIpOworCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyZWR1bmRhbnQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2InOgorCQkJYmlnZW5kaWFuID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCXBhZGJ5dGUgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoc3RkZXJyLCAiV3Jvbmcgb3B0aW9uIC0lY1xuIiwgb3B0aW9uKTsKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJfQorCX0KKworCS8qIENoZWNrIGRhdGFzaXplIGFuZCBhbGxvY2F0ZSB0aGUgZGF0YSAqLworCWlmIChkYXRhc2l6ZSA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIlBsZWFzZSBzcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBlbnZyaW9ubm1lbnQgIgorCQkJInBhcnRpdGlvbi5cbiIpOworCQl1c2FnZShhcmd2WzBdKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlkYXRhcHRyID0gbWFsbG9jKGRhdGFzaXplICogc2l6ZW9mKCpkYXRhcHRyKSk7CisJaWYgKCFkYXRhcHRyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgYWxsb2MgZGF0YXB0ci5cbiIpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCS8qCisJICogZW52cHRyIHBvaW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhY3R1YWwgZW52aXJvbm1lbnQgKGFmdGVyIHRoZQorCSAqIGNyYyBhbmQgcG9zc2libGUgYHJlZHVuZGFudCcgYml0CisJICovCisJZW52c2l6ZSA9IGRhdGFzaXplIC0gKENSQ19TSVpFICsgcmVkdW5kYW50KTsKKwllbnZwdHIgPSBkYXRhcHRyICsgQ1JDX1NJWkUgKyByZWR1bmRhbnQ7CisKKwkvKiBQYWQgdGhlIGVudmlyb25tZW50IHdpdGggdGhlIHBhZGRpbmcgYnl0ZSAqLworCW1lbXNldChlbnZwdHIsIHBhZGJ5dGUsIGVudnNpemUpOworCisJLyogT3BlbiB0aGUgaW5wdXQgZmlsZSAuLi4gKi8KKwlpZiAob3B0aW5kID49IGFyZ2MpIHsKKwkJZnByaW50ZihzdGRlcnIsICJQbGVhc2Ugc3BlY2lmeSBhbiBpbnB1dCBmaWxlbmFtZVxuIik7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJdHh0X2ZpbGVuYW1lID0gYXJndltvcHRpbmRdOworCWlmIChzdHJjbXAodHh0X2ZpbGVuYW1lLCAiLSIpID09IDApIHsKKwkJaW50IHJlYWRieXRlcyA9IDA7CisJCWludCByZWFkbGVuID0gc2l6ZW9mKCplbnZwdHIpICogMjA0ODsKKwkJdHh0X2ZkID0gU1RESU5fRklMRU5POworCisJCWRvIHsKKwkJCWZpbGVidWYgPSByZWFsbG9jKGZpbGVidWYsIHJlYWRsZW4pOworCQkJcmVhZGJ5dGVzID0gcmVhZCh0eHRfZmQsIGZpbGVidWYgKyBmaWxlc2l6ZSwgcmVhZGxlbik7CisJCQlmaWxlc2l6ZSArPSByZWFkYnl0ZXM7CisJCX0gd2hpbGUgKHJlYWRieXRlcyA9PSByZWFkbGVuKTsKKworCX0gZWxzZSB7CisJCXR4dF9mZCA9IG9wZW4odHh0X2ZpbGVuYW1lLCBPX1JET05MWSk7CisJCWlmICh0eHRfZmQgPT0gLTEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3Qgb3BlbiBcIiVzXCI6ICVzXG4iLAorCQkJCQl0eHRfZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJCS8qIC4uLiBhbmQgY2hlY2sgaXQgKi8KKwkJcmV0ID0gZnN0YXQodHh0X2ZkLCAmdHh0X2ZpbGVfc3RhdCk7CisJCWlmIChyZXQgPT0gLTEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3Qgc3RhdCgpIG9uIFwiJXNcIjogIgorCQkJCQkiJXNcbiIsIHR4dF9maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKworCQlmaWxlc2l6ZSA9IHR4dF9maWxlX3N0YXQuc3Rfc2l6ZTsKKwkJLyogUmVhZCB0aGUgcmF3IGlucHV0IGZpbGUgYW5kIHRyYW5zZm9ybSBpdCAqLworCQlmaWxlYnVmID0gbWFsbG9jKHNpemVvZigqZW52cHRyKSAqIGZpbGVzaXplKTsKKwkJcmV0ID0gcmVhZCh0eHRfZmQsIGZpbGVidWYsIHNpemVvZigqZW52cHRyKSAqIGZpbGVzaXplKTsKKwkJaWYgKHJldCAhPSBzaXplb2YoKmVudnB0cikgKiBmaWxlc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDYW4ndCByZWFkIHRoZSB3aG9sZSBpbnB1dCBmaWxlXG4iKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKwkJcmV0ID0gY2xvc2UodHh0X2ZkKTsKKwl9CisJLyoKKwkgKiBUaGUgcmlnaHQgdGVzdCB0byBkbyBpcyAiPT4iIChub3QgIj4iKSBiZWNhdXNlIG9mIHRoZSBhZGRpdGlvbm5hbAorCSAqIGVuZGluZyBcMC4gU2VlIGJlbG93LgorCSAqLworCWlmIChmaWxlc2l6ZSA+PSBlbnZzaXplKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVGhlIGlucHV0IGZpbGUgaXMgbGFyZ2VyIHRoYW4gdGhlICIKKwkJCQkiZW52cmlvbm5tZW50IHBhcnRpdGlvbiBzaXplXG4iKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwkvKiBSZXBsYWNlIG5ld2xpbmVzIHNlcGFyYXRpbmcgdmFyaWFibGVzIHdpdGggXDAgKi8KKwlmb3IgKGZwID0gMCwgZXAgPSAwIDsgZnAgPCBmaWxlc2l6ZSA7IGZwKyspIHsKKwkJaWYgKGZpbGVidWZbZnBdID09ICdcbicpIHsKKwkJCWlmIChmcCA9PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBOZXdsaW5lIGF0IHRoZSBiZWdnaW5pbmcgb2YgdGhlIGZpbGUgPworCQkJCSAqIElnbm9yZSBpdC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoZmlsZWJ1ZltmcC0xXSA9PSAnXFwnKSB7CisJCQkJLyoKKwkJCQkgKiBFbWJlZGRlZCBuZXdsaW5lIGluIGEgdmFyaWFibGUuCisJCQkJICoKKwkJCQkgKiBUaGUgYmFja3NsYXNoIHdhcyBhZGRlZCB0byB0aGUgZW52cHRyIDsKKwkJCQkgKiByZXdpbmQgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIG5ld2xpbmUKKwkJCQkgKi8KKwkJCQllcC0tOworCQkJCWVudnB0cltlcCsrXSA9ICdcbic7CisJCQl9IGVsc2UgeworCQkJCS8qIEVuZCBvZiBhIHZhcmlhYmxlICovCisJCQkJZW52cHRyW2VwKytdID0gJ1wwJzsKKwkJCX0KKwkJfSBlbHNlIGlmIChmaWxlYnVmW2ZwXSA9PSAnIycpIHsKKwkJCWlmIChmcCAhPSAwICYmIGZpbGVidWZbZnAtMV0gPT0gJ1xuJykgeworCQkJCS8qIFRoaXMgbGluZSBpcyBhIGNvbW1lbnQsIGxldCdzIHNraXAgaXQgKi8KKwkJCQl3aGlsZSAoZnAgPCB0eHRfZmlsZV9zdGF0LnN0X3NpemUgJiYgZnArKyAmJgorCQkJCSAgICAgICBmaWxlYnVmW2ZwXSAhPSAnXG4nKTsKKwkJCX0gZWxzZSB7CisJCQkJZW52cHRyW2VwKytdID0gZmlsZWJ1ZltmcF07CisJCQl9CisJCX0gZWxzZSB7CisJCQllbnZwdHJbZXArK10gPSBmaWxlYnVmW2ZwXTsKKwkJfQorCX0KKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGZpbmFsICdcMCcKKwkgKiBBbmQgZG8gaXQgYWdhaW4gb24gdGhlIG5leHQgYnl0ZSB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIGVudmlyb25tZW50LgorCSAqLworCWlmIChlbnZwdHJbZXAtMV0gIT0gJ1wwJykgeworCQllbnZwdHJbZXArK10gPSAnXDAnOworCQkvKgorCQkgKiBUaGUgdGV4dCBmaWxlIGRvZXNuJ3QgaGF2ZSBhbiBlbmRpbmcgbmV3bGluZS4gIFdlIG5lZWQgdG8KKwkJICogY2hlY2sgdGhlIGVudiBzaXplIGFnYWluIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHJvb20gZm9yIHR3byBcMAorCQkgKi8KKwkJaWYgKGVwID49IGVudnNpemUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVGhlIGVudmlyb25tZW50IGZpbGUgaXMgdG9vIGxhcmdlIGZvciAiCisJCQkJCSJ0aGUgdGFyZ2V0IGVudmlyb25tZW50IHN0b3JhZ2VcbiIpOworCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJfQorCQllbnZwdHJbZXBdID0gJ1wwJzsKKwl9IGVsc2UgeworCQllbnZwdHJbZXBdID0gJ1wwJzsKKwl9CisKKwkvKiBDb21wdXRlcyB0aGUgQ1JDIGFuZCBwdXQgaXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YSAqLworCWNyYyA9IGNyYzMyKDAsIGVudnB0ciwgZW52c2l6ZSk7CisJdGFyZ2V0ZW5kaWFuX2NyYyA9IGJpZ2VuZGlhbiA/IGNwdV90b19iZTMyKGNyYykgOiBjcHVfdG9fbGUzMihjcmMpOworCisJbWVtY3B5KGRhdGFwdHIsICZ0YXJnZXRlbmRpYW5fY3JjLCBzaXplb2YodWludDMyX3QpKTsKKworCWJpbl9mZCA9IGNyZWF0KGJpbl9maWxlbmFtZSwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCk7CisJaWYgKGJpbl9mZCA9PSAtMSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQliaW5fZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJaWYgKHdyaXRlKGJpbl9mZCwgZGF0YXB0ciwgc2l6ZW9mKCpkYXRhcHRyKSAqIGRhdGFzaXplKSAhPQorCQkJc2l6ZW9mKCpkYXRhcHRyKSAqIGRhdGFzaXplKSB7CisJCWZwcmludGYoc3RkZXJyLCAid3JpdGUoKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldCA9IGNsb3NlKGJpbl9mZCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbXhzYm9vdC5jIGIvdG9vbHMvbXhzYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Njc1M2QKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9teHNib290LmMKQEAgLTAsMCArMSw2ODQgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IGltYWdlIGdlbmVyYXRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyLmgiCisKKy8qCisgKiBEZWZhdWx0IEJDQiBsYXlvdXQuCisgKgorICogVFdFQUsgdGhpcyBpZiB5b3UgaGF2ZSBibG93biBhbnkgT0NPVFAgZnVzZXMuCisgKi8KKyNkZWZpbmUJU1RSSURFX1BBR0VTCQk2NAorI2RlZmluZQlTVFJJREVfQ09VTlQJCTQKKworLyoKKyAqIExheW91dCBmb3IgMjU2TWIgYmlnIE5BTkQgd2l0aCAyMDQ4YiBwYWdlIHNpemUsIDY0YiBPT0Igc2l6ZSBhbmQKKyAqIDEyOGtiIGVyYXNlIHNpemUuCisgKgorICogVFdFQUsgdGhpcyBpZiB5b3UgaGF2ZSBkaWZmZXJlbnQga2luZCBvZiBOQU5EIGNoaXAuCisgKi8KK3VpbnQzMl90IG5hbmRfd3JpdGVzaXplID0gMjA0ODsKK3VpbnQzMl90IG5hbmRfb29ic2l6ZSA9IDY0OwordWludDMyX3QgbmFuZF9lcmFzZXNpemUgPSAxMjggKiAxMDI0OworCisvKgorICogU2VjdG9yIG9uIHdoaWNoIHRoZSBTaWdtYVRlbCBib290IHBhcnRpdGlvbiAoMHg1Mykgc3RhcnRzLgorICovCit1aW50MzJfdCBzZF9zZWN0b3IgPSAyMDQ4OworCisvKgorICogRWFjaCBvZiB0aGUgVS1Cb290IGJvb3RzdHJlYW1zIGlzIGF0IG1heGltdW0gMU1CIGJpZy4KKyAqCisgKiBUV0VBSyB0aGlzIGlmLCBmb3Igc29tZSB3aWxkIHJlYXNvbiwgeW91IG5lZWQgdG8gYm9vdCBiaWdnZXIgaW1hZ2UuCisgKi8KKyNkZWZpbmUJTUFYX0JPT1RTVFJFQU1fU0laRQkoMSAqIDEwMjQgKiAxMDI0KQorCisvKiBpLk1YMjggTkFORCBjb250cm9sbGVyLXNwZWNpZmljIGNvbnN0YW50cy4gRE8gTk9UIFRXRUFLISAqLworI2RlZmluZQlNWFNfTkFORF9ETUFfREVTQ1JJUFRPUl9DT1VOVAkJNAorI2RlZmluZQlNWFNfTkFORF9DSFVOS19EQVRBX0NIVU5LX1NJWkUJCTUxMgorI2RlZmluZQlNWFNfTkFORF9NRVRBREFUQV9TSVpFCQkJMTAKKyNkZWZpbmUJTVhTX05BTkRfQ09NTUFORF9CVUZGRVJfU0laRQkJMzIKKworc3RydWN0IG14MjhfbmFuZF9mY2IgeworCXVpbnQzMl90CQljaGVja3N1bTsKKwl1aW50MzJfdAkJZmluZ2VycHJpbnQ7CisJdWludDMyX3QJCXZlcnNpb247CisJc3RydWN0IHsKKwkJdWludDhfdAkJCWRhdGFfc2V0dXA7CisJCXVpbnQ4X3QJCQlkYXRhX2hvbGQ7CisJCXVpbnQ4X3QJCQlhZGRyZXNzX3NldHVwOworCQl1aW50OF90CQkJZHNhbXBsZV90aW1lOworCQl1aW50OF90CQkJbmFuZF90aW1pbmdfc3RhdGU7CisJCXVpbnQ4X3QJCQlyZWE7CisJCXVpbnQ4X3QJCQlybG9oOworCQl1aW50OF90CQkJcmhvaDsKKwl9CQkJdGltaW5nOworCXVpbnQzMl90CQlwYWdlX2RhdGFfc2l6ZTsKKwl1aW50MzJfdAkJdG90YWxfcGFnZV9zaXplOworCXVpbnQzMl90CQlzZWN0b3JzX3Blcl9ibG9jazsKKwl1aW50MzJfdAkJbnVtYmVyX29mX25hbmRzOwkJLyogSWdub3JlZCAqLworCXVpbnQzMl90CQl0b3RhbF9pbnRlcm5hbF9kaWU7CQkvKiBJZ25vcmVkICovCisJdWludDMyX3QJCWNlbGxfdHlwZTsJCQkvKiBJZ25vcmVkICovCisJdWludDMyX3QJCWVjY19ibG9ja19uX2VjY190eXBlOworCXVpbnQzMl90CQllY2NfYmxvY2tfMF9zaXplOworCXVpbnQzMl90CQllY2NfYmxvY2tfbl9zaXplOworCXVpbnQzMl90CQllY2NfYmxvY2tfMF9lY2NfdHlwZTsKKwl1aW50MzJfdAkJbWV0YWRhdGFfYnl0ZXM7CisJdWludDMyX3QJCW51bV9lY2NfYmxvY2tzX3Blcl9wYWdlOworCXVpbnQzMl90CQllY2NfYmxvY2tfbl9lY2NfbGV2ZWxfc2RrOwkvKiBJZ25vcmVkICovCisJdWludDMyX3QJCWVjY19ibG9ja18wX3NpemVfc2RrOwkJLyogSWdub3JlZCAqLworCXVpbnQzMl90CQllY2NfYmxvY2tfbl9zaXplX3NkazsJCS8qIElnbm9yZWQgKi8KKwl1aW50MzJfdAkJZWNjX2Jsb2NrXzBfZWNjX2xldmVsX3NkazsJLyogSWdub3JlZCAqLworCXVpbnQzMl90CQludW1fZWNjX2Jsb2Nrc19wZXJfcGFnZV9zZGs7CS8qIElnbm9yZWQgKi8KKwl1aW50MzJfdAkJbWV0YWRhdGFfYnl0ZXNfc2RrOwkJLyogSWdub3JlZCAqLworCXVpbnQzMl90CQllcmFzZV90aHJlc2hvbGQ7CisJdWludDMyX3QJCWJvb3RfcGF0Y2g7CisJdWludDMyX3QJCXBhdGNoX3NlY3RvcnM7CisJdWludDMyX3QJCWZpcm13YXJlMV9zdGFydGluZ19zZWN0b3I7CisJdWludDMyX3QJCWZpcm13YXJlMl9zdGFydGluZ19zZWN0b3I7CisJdWludDMyX3QJCXNlY3RvcnNfaW5fZmlybXdhcmUxOworCXVpbnQzMl90CQlzZWN0b3JzX2luX2Zpcm13YXJlMjsKKwl1aW50MzJfdAkJZGJidF9zZWFyY2hfYXJlYV9zdGFydF9hZGRyZXNzOworCXVpbnQzMl90CQliYWRibG9ja19tYXJrZXJfYnl0ZTsKKwl1aW50MzJfdAkJYmFkYmxvY2tfbWFya2VyX3N0YXJ0X2JpdDsKKwl1aW50MzJfdAkJYmJfbWFya2VyX3BoeXNpY2FsX29mZnNldDsKK307CisKK3N0cnVjdCBteDI4X25hbmRfZGJidCB7CisJdWludDMyX3QJCWNoZWNrc3VtOworCXVpbnQzMl90CQlmaW5nZXJwcmludDsKKwl1aW50MzJfdAkJdmVyc2lvbjsKKwl1aW50MzJfdAkJbnVtYmVyX2JiOworCXVpbnQzMl90CQludW1iZXJfMmtfcGFnZXNfYmI7Cit9OworCitzdHJ1Y3QgbXgyOF9uYW5kX2JidCB7CisJdWludDMyX3QJCW5hbmQ7CisJdWludDMyX3QJCW51bWJlcl9iYjsKKwl1aW50MzJfdAkJYmFkYmxvY2tbNTEwXTsKK307CisKK3N0cnVjdCBteDI4X3NkX2RyaXZlX2luZm8geworCXVpbnQzMl90CQljaGlwX251bTsKKwl1aW50MzJfdAkJZHJpdmVfdHlwZTsKKwl1aW50MzJfdAkJdGFnOworCXVpbnQzMl90CQlmaXJzdF9zZWN0b3JfbnVtYmVyOworCXVpbnQzMl90CQlzZWN0b3JfY291bnQ7Cit9OworCitzdHJ1Y3QgbXgyOF9zZF9jb25maWdfYmxvY2sgeworCXVpbnQzMl90CQkJc2lnbmF0dXJlOworCXVpbnQzMl90CQkJcHJpbWFyeV9ib290X3RhZzsKKwl1aW50MzJfdAkJCXNlY29uZGFyeV9ib290X3RhZzsKKwl1aW50MzJfdAkJCW51bV9jb3BpZXM7CisJc3RydWN0IG14Mjhfc2RfZHJpdmVfaW5mbwlkcnZfaW5mb1sxXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbXgyOF9uYW5kX2VjY19zaXplX2luX2JpdHModWludDMyX3QgZWNjX3N0cmVuZ3RoKQoreworCXJldHVybiBlY2Nfc3RyZW5ndGggKiAxMzsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBteDI4X25hbmRfZ2V0X2VjY19zdHJlbmd0aCh1aW50MzJfdCBwYWdlX2RhdGFfc2l6ZSwKKwkJCQkJCXVpbnQzMl90IHBhZ2Vfb29iX3NpemUpCit7CisJaWYgKHBhZ2VfZGF0YV9zaXplID09IDIwNDgpCisJCXJldHVybiA4OworCisJaWYgKHBhZ2VfZGF0YV9zaXplID09IDQwOTYpIHsKKwkJaWYgKHBhZ2Vfb29iX3NpemUgPT0gMTI4KQorCQkJcmV0dXJuIDg7CisKKwkJaWYgKHBhZ2Vfb29iX3NpemUgPT0gMjE4KQorCQkJcmV0dXJuIDE2OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG14MjhfbmFuZF9nZXRfbWFya19vZmZzZXQodWludDMyX3QgcGFnZV9kYXRhX3NpemUsCisJCQkJCQl1aW50MzJfdCBlY2Nfc3RyZW5ndGgpCit7CisJdWludDMyX3QgY2h1bmtfZGF0YV9zaXplX2luX2JpdHM7CisJdWludDMyX3QgY2h1bmtfZWNjX3NpemVfaW5fYml0czsKKwl1aW50MzJfdCBjaHVua190b3RhbF9zaXplX2luX2JpdHM7CisJdWludDMyX3QgYmxvY2tfbWFya19jaHVua19udW1iZXI7CisJdWludDMyX3QgYmxvY2tfbWFya19jaHVua19iaXRfb2Zmc2V0OworCXVpbnQzMl90IGJsb2NrX21hcmtfYml0X29mZnNldDsKKworCWNodW5rX2RhdGFfc2l6ZV9pbl9iaXRzID0gTVhTX05BTkRfQ0hVTktfREFUQV9DSFVOS19TSVpFICogODsKKwljaHVua19lY2Nfc2l6ZV9pbl9iaXRzICA9IG14MjhfbmFuZF9lY2Nfc2l6ZV9pbl9iaXRzKGVjY19zdHJlbmd0aCk7CisKKwljaHVua190b3RhbF9zaXplX2luX2JpdHMgPQorCQkJY2h1bmtfZGF0YV9zaXplX2luX2JpdHMgKyBjaHVua19lY2Nfc2l6ZV9pbl9iaXRzOworCisJLyogQ29tcHV0ZSB0aGUgYml0IG9mZnNldCBvZiB0aGUgYmxvY2sgbWFyayB3aXRoaW4gdGhlIHBoeXNpY2FsIHBhZ2UuICovCisJYmxvY2tfbWFya19iaXRfb2Zmc2V0ID0gcGFnZV9kYXRhX3NpemUgKiA4OworCisJLyogU3VidHJhY3QgdGhlIG1ldGFkYXRhIGJpdHMuICovCisJYmxvY2tfbWFya19iaXRfb2Zmc2V0IC09IE1YU19OQU5EX01FVEFEQVRBX1NJWkUgKiA4OworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBjaHVuayBudW1iZXIgKHN0YXJ0aW5nIGF0IHplcm8pIGluIHdoaWNoIHRoZSBibG9jayBtYXJrCisJICogYXBwZWFycy4KKwkgKi8KKwlibG9ja19tYXJrX2NodW5rX251bWJlciA9CisJCQlibG9ja19tYXJrX2JpdF9vZmZzZXQgLyBjaHVua190b3RhbF9zaXplX2luX2JpdHM7CisKKwkvKgorCSAqIENvbXB1dGUgdGhlIGJpdCBvZmZzZXQgb2YgdGhlIGJsb2NrIG1hcmsgd2l0aGluIGl0cyBjaHVuaywgYW5kCisJICogdmFsaWRhdGUgaXQuCisJICovCisJYmxvY2tfbWFya19jaHVua19iaXRfb2Zmc2V0ID0gYmxvY2tfbWFya19iaXRfb2Zmc2V0IC0KKwkJCShibG9ja19tYXJrX2NodW5rX251bWJlciAqIGNodW5rX3RvdGFsX3NpemVfaW5fYml0cyk7CisKKwlpZiAoYmxvY2tfbWFya19jaHVua19iaXRfb2Zmc2V0ID4gY2h1bmtfZGF0YV9zaXplX2luX2JpdHMpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBrbm93IHRoZSBjaHVuayBudW1iZXIgaW4gd2hpY2ggdGhlIGJsb2NrIG1hcmsgYXBwZWFycywKKwkgKiB3ZSBjYW4gc3VidHJhY3QgYWxsIHRoZSBFQ0MgYml0cyB0aGF0IGFwcGVhciBiZWZvcmUgaXQuCisJICovCisJYmxvY2tfbWFya19iaXRfb2Zmc2V0IC09CisJCWJsb2NrX21hcmtfY2h1bmtfbnVtYmVyICogY2h1bmtfZWNjX3NpemVfaW5fYml0czsKKworCXJldHVybiBibG9ja19tYXJrX2JpdF9vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbXgyOF9uYW5kX21hcmtfYnl0ZV9vZmZzZXQodm9pZCkKK3sKKwl1aW50MzJfdCBlY2Nfc3RyZW5ndGg7CisJZWNjX3N0cmVuZ3RoID0gbXgyOF9uYW5kX2dldF9lY2Nfc3RyZW5ndGgobmFuZF93cml0ZXNpemUsIG5hbmRfb29ic2l6ZSk7CisJcmV0dXJuIG14MjhfbmFuZF9nZXRfbWFya19vZmZzZXQobmFuZF93cml0ZXNpemUsIGVjY19zdHJlbmd0aCkgPj4gMzsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBteDI4X25hbmRfbWFya19iaXRfb2Zmc2V0KHZvaWQpCit7CisJdWludDMyX3QgZWNjX3N0cmVuZ3RoOworCWVjY19zdHJlbmd0aCA9IG14MjhfbmFuZF9nZXRfZWNjX3N0cmVuZ3RoKG5hbmRfd3JpdGVzaXplLCBuYW5kX29vYnNpemUpOworCXJldHVybiBteDI4X25hbmRfZ2V0X21hcmtfb2Zmc2V0KG5hbmRfd3JpdGVzaXplLCBlY2Nfc3RyZW5ndGgpICYgMHg3OworfQorCitzdGF0aWMgdWludDMyX3QgbXgyOF9uYW5kX2Jsb2NrX2NzdW0odWludDhfdCAqYmxvY2ssIHVpbnQzMl90IHNpemUpCit7CisJdWludDMyX3QgY3N1bSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQljc3VtICs9IGJsb2NrW2ldOworCisJcmV0dXJuIGNzdW0gXiAweGZmZmZmZmZmOworfQorCitzdGF0aWMgc3RydWN0IG14MjhfbmFuZF9mY2IgKm14MjhfbmFuZF9nZXRfZmNiKHVpbnQzMl90IHNpemUpCit7CisJc3RydWN0IG14MjhfbmFuZF9mY2IgKmZjYjsKKwl1aW50MzJfdCBiY2Jfc2l6ZV9ieXRlczsKKwl1aW50MzJfdCBzdHJpZGVfc2l6ZV9ieXRlczsKKwl1aW50MzJfdCBib290c3RyZWFtX3NpemVfcGFnZXM7CisJdWludDMyX3QgZncxX3N0YXJ0X3BhZ2U7CisJdWludDMyX3QgZncyX3N0YXJ0X3BhZ2U7CisKKwlmY2IgPSBtYWxsb2MobmFuZF93cml0ZXNpemUpOworCWlmICghZmNiKSB7CisJCXByaW50ZigiTVgyOCBOQU5EOiBVbmFibGUgdG8gYWxsb2NhdGUgRkNCXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KGZjYiwgMCwgbmFuZF93cml0ZXNpemUpOworCisJZmNiLT5maW5nZXJwcmludCA9CQkJMHgyMDQyNDM0NjsKKwlmY2ItPnZlcnNpb24gPQkJCQkweDAxMDAwMDAwOworCisJLyoKKwkgKiBGSVhNRTogVGhlc2UgaGVyZSBhcmUgZGVmYXVsdCB2YWx1ZXMgYXMgZm91bmQgaW4ga29icy1uZy4gV2Ugc2hvdWxkCisJICogcHJvYmFibHkgcmV0cmlldmUgdGhlIGRhdGEgZnJvbSBOQU5EIG9yIHNvbWV0aGluZy4KKwkgKi8KKwlmY2ItPnRpbWluZy5kYXRhX3NldHVwID0JCTgwOworCWZjYi0+dGltaW5nLmRhdGFfaG9sZCA9CQkJNjA7CisJZmNiLT50aW1pbmcuYWRkcmVzc19zZXR1cCA9CQkyNTsKKwlmY2ItPnRpbWluZy5kc2FtcGxlX3RpbWUgPQkJNjsKKworCWZjYi0+cGFnZV9kYXRhX3NpemUgPQkJbmFuZF93cml0ZXNpemU7CisJZmNiLT50b3RhbF9wYWdlX3NpemUgPQkJbmFuZF93cml0ZXNpemUgKyBuYW5kX29vYnNpemU7CisJZmNiLT5zZWN0b3JzX3Blcl9ibG9jayA9CW5hbmRfZXJhc2VzaXplIC8gbmFuZF93cml0ZXNpemU7CisKKwlmY2ItPm51bV9lY2NfYmxvY2tzX3Blcl9wYWdlID0JKG5hbmRfd3JpdGVzaXplIC8gNTEyKSAtIDE7CisJZmNiLT5lY2NfYmxvY2tfMF9zaXplID0JCTUxMjsKKwlmY2ItPmVjY19ibG9ja19uX3NpemUgPQkJNTEyOworCWZjYi0+bWV0YWRhdGFfYnl0ZXMgPQkJMTA7CisKKwlpZiAobmFuZF93cml0ZXNpemUgPT0gMjA0OCkgeworCQlmY2ItPmVjY19ibG9ja19uX2VjY190eXBlID0JCTQ7CisJCWZjYi0+ZWNjX2Jsb2NrXzBfZWNjX3R5cGUgPQkJNDsKKwl9IGVsc2UgaWYgKG5hbmRfd3JpdGVzaXplID09IDQwOTYpIHsKKwkJaWYgKG5hbmRfb29ic2l6ZSA9PSAxMjgpIHsKKwkJCWZjYi0+ZWNjX2Jsb2NrX25fZWNjX3R5cGUgPQk0OworCQkJZmNiLT5lY2NfYmxvY2tfMF9lY2NfdHlwZSA9CTQ7CisJCX0gZWxzZSBpZiAobmFuZF9vb2JzaXplID09IDIxOCkgeworCQkJZmNiLT5lY2NfYmxvY2tfbl9lY2NfdHlwZSA9CTg7CisJCQlmY2ItPmVjY19ibG9ja18wX2VjY190eXBlID0JODsKKwkJfQorCX0KKworCWlmIChmY2ItPmVjY19ibG9ja19uX2VjY190eXBlID09IDApIHsKKwkJcHJpbnRmKCJNWDI4IE5BTkQ6IFVuc3VwcG9ydGVkIE5BTkQgZ2VvbWV0cnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlmY2ItPmJvb3RfcGF0Y2ggPQkJCTA7CisJZmNiLT5wYXRjaF9zZWN0b3JzID0JCQkwOworCisJZmNiLT5iYWRibG9ja19tYXJrZXJfYnl0ZSA9CW14MjhfbmFuZF9tYXJrX2J5dGVfb2Zmc2V0KCk7CisJZmNiLT5iYWRibG9ja19tYXJrZXJfc3RhcnRfYml0ID0gbXgyOF9uYW5kX21hcmtfYml0X29mZnNldCgpOworCWZjYi0+YmJfbWFya2VyX3BoeXNpY2FsX29mZnNldCA9IG5hbmRfd3JpdGVzaXplOworCisJc3RyaWRlX3NpemVfYnl0ZXMgPSBTVFJJREVfUEFHRVMgKiBuYW5kX3dyaXRlc2l6ZTsKKwliY2Jfc2l6ZV9ieXRlcyA9IHN0cmlkZV9zaXplX2J5dGVzICogU1RSSURFX0NPVU5UOworCisJYm9vdHN0cmVhbV9zaXplX3BhZ2VzID0gKHNpemUgKyAobmFuZF93cml0ZXNpemUgLSAxKSkgLworCQkJCQluYW5kX3dyaXRlc2l6ZTsKKworCWZ3MV9zdGFydF9wYWdlID0gMiAqIGJjYl9zaXplX2J5dGVzIC8gbmFuZF93cml0ZXNpemU7CisJZncyX3N0YXJ0X3BhZ2UgPSAoMiAqIGJjYl9zaXplX2J5dGVzICsgTUFYX0JPT1RTVFJFQU1fU0laRSkgLworCQkJCW5hbmRfd3JpdGVzaXplOworCisJZmNiLT5maXJtd2FyZTFfc3RhcnRpbmdfc2VjdG9yID0JZncxX3N0YXJ0X3BhZ2U7CisJZmNiLT5maXJtd2FyZTJfc3RhcnRpbmdfc2VjdG9yID0JZncyX3N0YXJ0X3BhZ2U7CisJZmNiLT5zZWN0b3JzX2luX2Zpcm13YXJlMSA9CQlib290c3RyZWFtX3NpemVfcGFnZXM7CisJZmNiLT5zZWN0b3JzX2luX2Zpcm13YXJlMiA9CQlib290c3RyZWFtX3NpemVfcGFnZXM7CisKKwlmY2ItPmRiYnRfc2VhcmNoX2FyZWFfc3RhcnRfYWRkcmVzcyA9CVNUUklERV9QQUdFUyAqIFNUUklERV9DT1VOVDsKKworCXJldHVybiBmY2I7CisKK2VycjoKKwlmcmVlKGZjYik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXgyOF9uYW5kX2RiYnQgKm14MjhfbmFuZF9nZXRfZGJidCh2b2lkKQoreworCXN0cnVjdCBteDI4X25hbmRfZGJidCAqZGJidDsKKworCWRiYnQgPSBtYWxsb2MobmFuZF93cml0ZXNpemUpOworCWlmICghZGJidCkgeworCQlwcmludGYoIk1YMjggTkFORDogVW5hYmxlIHRvIGFsbG9jYXRlIERCQlRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltZW1zZXQoZGJidCwgMCwgbmFuZF93cml0ZXNpemUpOworCisJZGJidC0+ZmluZ2VycHJpbnQJPSAweDU0NDI0MjQ0OworCWRiYnQtPnZlcnNpb24JCT0gMHgxOworCisJcmV0dXJuIGRiYnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBteDI4X25hbmRfcGFyaXR5XzEzXzgoY29uc3QgdWludDhfdCBiKQoreworCXVpbnQzMl90IHBhcml0eSA9IDAsIHRtcDsKKworCXRtcCA9ICgoYiA+PiA2KSBeIChiID4+IDUpIF4gKGIgPj4gMykgXiAoYiA+PiAyKSkgJiAxOworCXBhcml0eSB8PSB0bXAgPDwgMDsKKworCXRtcCA9ICgoYiA+PiA3KSBeIChiID4+IDUpIF4gKGIgPj4gNCkgXiAoYiA+PiAyKSBeIChiID4+IDEpKSAmIDE7CisJcGFyaXR5IHw9IHRtcCA8PCAxOworCisJdG1wID0gKChiID4+IDcpIF4gKGIgPj4gNikgXiAoYiA+PiA1KSBeIChiID4+IDEpIF4gKGIgPj4gMCkpICYgMTsKKwlwYXJpdHkgfD0gdG1wIDw8IDI7CisKKwl0bXAgPSAoKGIgPj4gNykgXiAoYiA+PiA0KSBeIChiID4+IDMpIF4gKGIgPj4gMCkpICYgMTsKKwlwYXJpdHkgfD0gdG1wIDw8IDM7CisKKwl0bXAgPSAoKGIgPj4gNikgXiAoYiA+PiA0KSBeIChiID4+IDMpIF4KKwkJKGIgPj4gMikgXiAoYiA+PiAxKSBeIChiID4+IDApKSAmIDE7CisJcGFyaXR5IHw9IHRtcCA8PCA0OworCisJcmV0dXJuIHBhcml0eTsKK30KKworc3RhdGljIHVpbnQ4X3QgKm14MjhfbmFuZF9mY2JfYmxvY2soc3RydWN0IG14MjhfbmFuZF9mY2IgKmZjYikKK3sKKwl1aW50OF90ICpibG9jazsKKwl1aW50OF90ICplY2M7CisJaW50IGk7CisKKwlibG9jayA9IG1hbGxvYyhuYW5kX3dyaXRlc2l6ZSArIG5hbmRfb29ic2l6ZSk7CisJaWYgKCFibG9jaykgeworCQlwcmludGYoIk1YMjggTkFORDogVW5hYmxlIHRvIGFsbG9jYXRlIEZDQiBibG9ja1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChibG9jaywgMCwgbmFuZF93cml0ZXNpemUgKyBuYW5kX29vYnNpemUpOworCisJLyogVXBkYXRlIHRoZSBGQ0IgY2hlY2tzdW0gKi8KKwlmY2ItPmNoZWNrc3VtID0gbXgyOF9uYW5kX2Jsb2NrX2NzdW0oKCh1aW50OF90ICopZmNiKSArIDQsIDUwOCk7CisKKwkvKiBGaWd1cmUgMTItMTEuIGluIGlNWDI4Uk0sIHJldi4gMSwgc2F5cyBGQ0IgaXMgYXQgb2Zmc2V0IDEyICovCisJbWVtY3B5KGJsb2NrICsgMTIsIGZjYiwgc2l6ZW9mKHN0cnVjdCBteDI4X25hbmRfZmNiKSk7CisKKwkvKiBFQ0MgaXMgYXQgb2Zmc2V0IDEyICsgNTEyICovCisJZWNjID0gYmxvY2sgKyAxMiArIDUxMjsKKworCS8qIENvbXB1dGUgdGhlIEVDQyBwYXJpdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBteDI4X25hbmRfZmNiKTsgaSsrKQorCQllY2NbaV0gPSBteDI4X25hbmRfcGFyaXR5XzEzXzgoYmxvY2tbaSArIDEyXSk7CisKKwlyZXR1cm4gYmxvY2s7Cit9CisKK3N0YXRpYyBpbnQgbXgyOF9uYW5kX3dyaXRlX2ZjYihzdHJ1Y3QgbXgyOF9uYW5kX2ZjYiAqZmNiLCBjaGFyICpidWYpCit7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQ4X3QgKmZjYmJsb2NrOworCWludCByZXQgPSAwOworCWludCBpOworCisJZmNiYmxvY2sgPSBteDI4X25hbmRfZmNiX2Jsb2NrKGZjYik7CisJaWYgKCFmY2JibG9jaykKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IFNUUklERV9QQUdFUyAqIFNUUklERV9DT1VOVDsgaSArPSBTVFJJREVfUEFHRVMpIHsKKwkJb2Zmc2V0ID0gaSAqIG5hbmRfd3JpdGVzaXplOworCQltZW1jcHkoYnVmICsgb2Zmc2V0LCBmY2JibG9jaywgbmFuZF93cml0ZXNpemUgKyBuYW5kX29vYnNpemUpOworCX0KKworCWZyZWUoZmNiYmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXgyOF9uYW5kX3dyaXRlX2RiYnQoc3RydWN0IG14MjhfbmFuZF9kYmJ0ICpkYmJ0LCBjaGFyICpidWYpCit7CisJdWludDMyX3Qgb2Zmc2V0OworCWludCBpID0gU1RSSURFX1BBR0VTICogU1RSSURFX0NPVU5UOworCisJZm9yICg7IGkgPCAyICogU1RSSURFX1BBR0VTICogU1RSSURFX0NPVU5UOyBpICs9IFNUUklERV9QQUdFUykgeworCQlvZmZzZXQgPSBpICogbmFuZF93cml0ZXNpemU7CisJCW1lbWNweShidWYgKyBvZmZzZXQsIGRiYnQsIHNpemVvZihzdHJ1Y3QgbXgyOF9uYW5kX2RiYnQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDI4X25hbmRfd3JpdGVfZmlybXdhcmUoc3RydWN0IG14MjhfbmFuZF9mY2IgKmZjYiwgaW50IGluZmQsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCW9mZl90IHNpemU7CisJdWludDMyX3Qgb2Zmc2V0MSwgb2Zmc2V0MjsKKworCXNpemUgPSBsc2VlayhpbmZkLCAwLCBTRUVLX0VORCk7CisJbHNlZWsoaW5mZCwgMCwgU0VFS19TRVQpOworCisJb2Zmc2V0MSA9IGZjYi0+ZmlybXdhcmUxX3N0YXJ0aW5nX3NlY3RvciAqIG5hbmRfd3JpdGVzaXplOworCW9mZnNldDIgPSBmY2ItPmZpcm13YXJlMl9zdGFydGluZ19zZWN0b3IgKiBuYW5kX3dyaXRlc2l6ZTsKKworCXJldCA9IHJlYWQoaW5mZCwgYnVmICsgb2Zmc2V0MSwgc2l6ZSk7CisJaWYgKHJldCAhPSBzaXplKQorCQlyZXR1cm4gLTE7CisKKwltZW1jcHkoYnVmICsgb2Zmc2V0MiwgYnVmICsgb2Zmc2V0MSwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1c2FnZSh2b2lkKQoreworCXByaW50ZigKKwkJIlVzYWdlOiBteDI4aW1hZ2UgW29wc10gPHR5cGU+IDxpbmZpbGU+IDxvdXRmaWxlPlxuIgorCQkiQXVnbWVudCBCb290U3RyZWFtIGZpbGUgd2l0aCBhIHByb3BlciBoZWFkZXIgZm9yIGkuTVgyOCBib290XG4iCisJCSJcbiIKKwkJIiAgPHR5cGU+CXR5cGUgb2YgaW1hZ2U6XG4iCisJCSIgICAgICAgICAgICAgICAgIFwibmFuZFwiIGZvciBOQU5EIGltYWdlXG4iCisJCSIgICAgICAgICAgICAgICAgIFwic2RcIiBmb3IgU0QgaW1hZ2VcbiIKKwkJIiAgPGluZmlsZT4gICAgIGlucHV0IGZpbGUsIHRoZSB1LWJvb3Quc2IgYm9vdHN0cmVhbVxuIgorCQkiICA8b3V0ZmlsZT4gICAgb3V0cHV0IGZpbGUsIHRoZSBib290YWJsZSBpbWFnZVxuIgorCQkiXG4iKTsKKwlwcmludGYoCisJCSJGb3IgTkFORCBib290LCB0aGVzZSBvcHRpb25zIGFyZSBhY2NlcHRlZDpcbiIKKwkJIiAgLXcgPHNpemU+ICAgIE5BTkQgcGFnZSBzaXplXG4iCisJCSIgIC1vIDxzaXplPiAgICBOQU5EIE9PQiBzaXplXG4iCisJCSIgIC1lIDxzaXplPiAgICBOQU5EIGVyYXNlIHNpemVcbiIKKwkJIlxuIgorCQkiRm9yIFNEIGJvb3QsIHRoZXNlIG9wdGlvbnMgYXJlIGFjY2VwdGVkOlxuIgorCQkiICAtcCA8c2VjdG9yPiAgU2VjdG9yIHdoZXJlIHRoZSBTR1RMIHBhcnRpdGlvbiBzdGFydHNcbiIKKwkpOworfQorCitzdGF0aWMgaW50IG14MjhfY3JlYXRlX25hbmRfaW1hZ2UoaW50IGluZmQsIGludCBvdXRmZCkKK3sKKwlzdHJ1Y3QgbXgyOF9uYW5kX2ZjYiAqZmNiOworCXN0cnVjdCBteDI4X25hbmRfZGJidCAqZGJidDsKKwlpbnQgcmV0ID0gLTE7CisJY2hhciAqYnVmOworCWludCBzaXplOworCXNzaXplX3Qgd3Jfc2l6ZTsKKworCXNpemUgPSBuYW5kX3dyaXRlc2l6ZSAqIDUxMiArIDIgKiBNQVhfQk9PVFNUUkVBTV9TSVpFOworCisJYnVmID0gbWFsbG9jKHNpemUpOworCWlmICghYnVmKSB7CisJCXByaW50ZigiQ2FuIG5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyIG9mICVkIGJ5dGVzXG4iLCBzaXplKTsKKwkJZ290byBlcnIwOworCX0KKworCW1lbXNldChidWYsIDAsIHNpemUpOworCisJZmNiID0gbXgyOF9uYW5kX2dldF9mY2IoTUFYX0JPT1RTVFJFQU1fU0laRSk7CisJaWYgKCFmY2IpIHsKKwkJcHJpbnRmKCJVbmFibGUgdG8gY29tcGlsZSBGQ0JcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJZGJidCA9IG14MjhfbmFuZF9nZXRfZGJidCgpOworCWlmICghZGJidCkgeworCQlwcmludGYoIlVuYWJsZSB0byBjb21waWxlIERCQlRcbiIpOworCQlnb3RvIGVycjI7CisJfQorCisJcmV0ID0gbXgyOF9uYW5kX3dyaXRlX2ZjYihmY2IsIGJ1Zik7CisJaWYgKHJldCkgeworCQlwcmludGYoIlVuYWJsZSB0byB3cml0ZSBGQ0IgdG8gYnVmZmVyXG4iKTsKKwkJZ290byBlcnIzOworCX0KKworCXJldCA9IG14MjhfbmFuZF93cml0ZV9kYmJ0KGRiYnQsIGJ1Zik7CisJaWYgKHJldCkgeworCQlwcmludGYoIlVuYWJsZSB0byB3cml0ZSBEQkJUIHRvIGJ1ZmZlclxuIik7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlyZXQgPSBteDI4X25hbmRfd3JpdGVfZmlybXdhcmUoZmNiLCBpbmZkLCBidWYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJVbmFibGUgdG8gd3JpdGUgZmlybXdhcmUgdG8gYnVmZmVyXG4iKTsKKwkJZ290byBlcnIzOworCX0KKworCXdyX3NpemUgPSB3cml0ZShvdXRmZCwgYnVmLCBzaXplKTsKKwlpZiAod3Jfc2l6ZSAhPSBzaXplKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGVycjM7CisJfQorCisJcmV0ID0gMDsKKworZXJyMzoKKwlmcmVlKGRiYnQpOworZXJyMjoKKwlmcmVlKGZjYik7CitlcnIxOgorCWZyZWUoYnVmKTsKK2VycjA6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteDI4X2NyZWF0ZV9zZF9pbWFnZShpbnQgaW5mZCwgaW50IG91dGZkKQoreworCWludCByZXQgPSAtMTsKKwl1aW50MzJfdCAqYnVmOworCWludCBzaXplOworCW9mZl90IGZzaXplOworCXNzaXplX3Qgd3Jfc2l6ZTsKKwlzdHJ1Y3QgbXgyOF9zZF9jb25maWdfYmxvY2sgKmNiOworCisJZnNpemUgPSBsc2VlayhpbmZkLCAwLCBTRUVLX0VORCk7CisJbHNlZWsoaW5mZCwgMCwgU0VFS19TRVQpOworCXNpemUgPSBmc2l6ZSArIDUxMjsKKworCWJ1ZiA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIWJ1ZikgeworCQlwcmludGYoIkNhbiBub3QgYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciBvZiAlZCBieXRlc1xuIiwgc2l6ZSk7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlyZXQgPSByZWFkKGluZmQsICh1aW50OF90ICopYnVmICsgNTEyLCBmc2l6ZSk7CisJaWYgKHJldCAhPSBmc2l6ZSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBlcnIxOworCX0KKworCWNiID0gKHN0cnVjdCBteDI4X3NkX2NvbmZpZ19ibG9jayAqKWJ1ZjsKKworCWNiLT5zaWduYXR1cmUgPSAweDAwMTEyMjMzOworCWNiLT5wcmltYXJ5X2Jvb3RfdGFnID0gMHgxOworCWNiLT5zZWNvbmRhcnlfYm9vdF90YWcgPSAweDE7CisJY2ItPm51bV9jb3BpZXMgPSAxOworCWNiLT5kcnZfaW5mb1swXS5jaGlwX251bSA9IDB4MDsKKwljYi0+ZHJ2X2luZm9bMF0uZHJpdmVfdHlwZSA9IDB4MDsKKwljYi0+ZHJ2X2luZm9bMF0udGFnID0gMHgxOworCWNiLT5kcnZfaW5mb1swXS5maXJzdF9zZWN0b3JfbnVtYmVyID0gc2Rfc2VjdG9yICsgMTsKKwljYi0+ZHJ2X2luZm9bMF0uc2VjdG9yX2NvdW50ID0gKHNpemUgLSAxKSAvIDUxMjsKKworCXdyX3NpemUgPSB3cml0ZShvdXRmZCwgYnVmLCBzaXplKTsKKwlpZiAod3Jfc2l6ZSAhPSBzaXplKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGVycjE7CisJfQorCisJcmV0ID0gMDsKKworZXJyMToKKwlmcmVlKGJ1Zik7CitlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBwYXJzZV9vcHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpOworCWludCB0bXA7CisJY2hhciAqZW5kOworCWVudW0gcGFyYW0geworCQlQQVJBTV9XUklURSwKKwkJUEFSQU1fT09CLAorCQlQQVJBTV9FUkFTRSwKKwkJUEFSQU1fUEFSVCwKKwkJUEFSQU1fU0QsCisJCVBBUkFNX05BTkQKKwl9OworCWludCB0eXBlOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cm5jbXAoYXJndltpXSwgIi13IiwgMikpCisJCQl0eXBlID0gUEFSQU1fV1JJVEU7CisJCWVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbaV0sICItbyIsIDIpKQorCQkJdHlwZSA9IFBBUkFNX09PQjsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoYXJndltpXSwgIi1lIiwgMikpCisJCQl0eXBlID0gUEFSQU1fRVJBU0U7CisJCWVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbaV0sICItcCIsIDIpKQorCQkJdHlwZSA9IFBBUkFNX1BBUlQ7CisJCWVsc2UJLyogU0QvTU1DICovCisJCQlicmVhazsKKworCQl0bXAgPSBzdHJ0b2woYXJndlsrK2ldLCAmZW5kLCAxMCk7CisJCWlmICh0bXAgJSAyKQorCQkJcmV0dXJuIC0xOworCQlpZiAodG1wIDw9IDApCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKHR5cGUgPT0gUEFSQU1fV1JJVEUpCisJCQluYW5kX3dyaXRlc2l6ZSA9IHRtcDsKKwkJaWYgKHR5cGUgPT0gUEFSQU1fT09CKQorCQkJbmFuZF9vb2JzaXplID0gdG1wOworCQlpZiAodHlwZSA9PSBQQVJBTV9FUkFTRSkKKwkJCW5hbmRfZXJhc2VzaXplID0gdG1wOworCQlpZiAodHlwZSA9PSBQQVJBTV9QQVJUKQorCQkJc2Rfc2VjdG9yID0gdG1wOworCX0KKworCWlmIChzdHJjbXAoYXJndltpXSwgInNkIikgJiYgc3RyY21wKGFyZ3ZbaV0sICJuYW5kIikpCisJCXJldHVybiAtMTsKKworCWlmIChpICsgMyAhPSBhcmdjKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gaTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpbmZkLCBvdXRmZDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgb2Zmc2V0OworCisJb2Zmc2V0ID0gcGFyc2Vfb3BzKGFyZ2MsIGFyZ3YpOworCWlmIChvZmZzZXQgPCAwKSB7CisJCXVzYWdlKCk7CisJCXJldCA9IDE7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlpbmZkID0gb3Blbihhcmd2W29mZnNldCArIDFdLCBPX1JET05MWSk7CisJaWYgKGluZmQgPCAwKSB7CisJCXByaW50ZigiSW5wdXQgQm9vdFN0cmVhbSBmaWxlIGNhbiBub3QgYmUgb3BlbmVkXG4iKTsKKwkJcmV0ID0gMjsKKwkJZ290byBlcnIxOworCX0KKworCW91dGZkID0gb3Blbihhcmd2W29mZnNldCArIDJdLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLAorCQkJCQlTX0lSVVNSIHwgU19JV1VTUik7CisJaWYgKG91dGZkIDwgMCkgeworCQlwcmludGYoIk91dHB1dCBmaWxlIGNhbiBub3QgYmUgY3JlYXRlZFxuIik7CisJCXJldCA9IDM7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlpZiAoIXN0cmNtcChhcmd2W29mZnNldF0sICJzZCIpKQorCQlyZXQgPSBteDI4X2NyZWF0ZV9zZF9pbWFnZShpbmZkLCBvdXRmZCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2W29mZnNldF0sICJuYW5kIikpCisJCXJldCA9IG14MjhfY3JlYXRlX25hbmRfaW1hZ2UoaW5mZCwgb3V0ZmQpOworCisJY2xvc2Uob3V0ZmQpOworZXJyMjoKKwljbG9zZShpbmZkKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30K